发布时间:2016-12-30责任编辑:朱明 浏览:2745
在制作游戏界面的过程中,经常会遇到文本的显示,如人物技能的描述,武器特效的描述等内容。在这些文字中,通常会涉及一些具体的数值,如攻击力、技能冷却时间,它们可能会随着角色的升级,武器的强化而发生改变。因此,为了让玩家能够一目了然的看到这些最能体现价值的核心数值,我们需要在一段文字中把它们进行高亮显示。
为了实现上述目的,我们需要使用正则表达式 + 富文本的方式,来达成效果。先来看文本的高亮显示,也就是说我们要改变文本的颜色。这里,我们通过富文本的方式,来改变文本内容到任意颜色。添加color标签:
<color=green>文本内容</color>
这样一来,在界面上显示的文本内容就会以完全不透明的绿色显示。注意,结尾标签不包括参数数值,参数数值可以由双引号括起来,不过这不是必须的。有了改变颜色的功能,接下来需要从文本中筛选出需要变色的数值文本部分。
从一段文本中筛选出数字部分,这种字符串匹配的工作交给正则表达式来处理再合适不过了。先简单介绍一下什么是正则表达式。正则表达式又称为规则表达式,是计算机科学中的一个概念。通常用来检索、替换符合某个模式(规则)的文本。C#的.Net框架支持匹配的正则表达式引擎。在C#中使用正则表达式,主要是通过Regex类实现的,需要添加命名空间的引用:using System.Text.RegularExpressions;
使用正则表达式,需要了解正则表达式中各个字符所代表的含义。比如根据我们的需要,匹配文本中的数字字符串,则代码如下:
Regex reg = new Regex(@"d+");
其中,d表示匹配任意的数字字符;+表示匹配前面的子表达式一次或多次。d+组合起来就是匹配数字字符串。然后,我们还要筛选出文本中的非数字部分,以便与数字部分进行分段的拼接。
Regex reg = new Regex(@"D+");
其中,D是d的反义元字符,匹配的是任意非数字字符,等价于[^0-9]。如下所示,是正则表达式中所使用的符号模式:
字 符 | 描 述 |
转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来 | |
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的零次或多次的子表达式 |
+ | 匹配前面的一次或多次的子表达式 |
? | 匹配前面的零次或一次的子表达式 |
{n} | n是一个非负整数,匹配前面的n次子表达式 |
{n,} | n是一个非负整数,至少匹配前面的n次子表达式 |
{n,m} | m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次 |
? | 当该字符紧跟在其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式尽可能少的匹配所搜索的字符串 |
. | 匹配除“ ”之外的任何单个字符 |
(pattern) | 匹配pattern并获取这一匹配 |
(?:pattern) | 匹配pattern但不获取匹配结果 |
(?=pattern) | 正向预查,在任何匹配pattern的字符串开始处匹配查找字符串 |
(?!pattern) | 负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串 |
x|y | 匹配x或y。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food” |
[xyz] | 字符集合。匹配所包含的任意一个字符。例如,‘[abc]’可以匹配“plain”中的‘a’ |
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’ |
[a-z] | 匹配指定范围内的任意字符。例如,‘[a-z]’可以匹配'a'到'z'范围内的任意小写字母字符 |
[^a-z] | 匹配不在指定范围内的任意字符。例如,‘[^a-z]’可以匹配不在‘a’~‘z’'内的任意字符 |
匹配一个单词边界,指单词和空格间的位置 | |
B | 匹配非单词边界 |
d | 匹配一个数字字符,等价于[0-9] |
D | 匹配一个非数字字符,等价于[^0-9] |
f | 匹配一个换页符 |
| 匹配一个换行符 |
| 匹配一个回车符 |
s | 匹配任何空白字符,包括空格、制表符、换页符等 |
S | 匹配任何非空白字符 |
| 匹配一个制表符 |
v | 匹配一个垂直制表符。等价于x0b和cK |
w | 匹配包括下划线的任何单词字符。等价于‘'[A-Za-z0-9_]’ |
W | 匹配任何非单词字符。等价于‘[^A-Za-z0-9_]’ |
筛选出数字字符串之后,我们只需要在它的前后添加上带有颜色参数的color标签,"<color=#00ff00>"+number.ToString()+"<color>",然后交给UI去显示就大功告成了。最终的效果如图:

战国工作室 供稿