AMO 发表于 2015-4-18 17:14:14

关于显示信息的颜色代码的研究

本帖最后由 静默男爵 于 2015-4-18 17:17 编辑

显示信息作为一个可以快速切入指示与bgm的效果,在战役中被广泛地应用在各个方面。最常见的就是人物的对话了,一般地,不同的人物对话,制作者都会别出心裁地用不同的颜色标记出,既方便了玩家的阅读,也使对话内容更加美观。今天我们要讲的就是关于显示信息的颜色代码的前置与后置问题。

前置颜色代码,想必大家都不陌生,就是在显示的信息文字的最前方加上<BLUE>、<RED>、<GREEN>、<YELLOW>、<AQUA>、<PURPLE>、<GREY>、<ORANGE>,来使文字显示出蓝色、红色、绿色、黄色、青色、紫色、灰色、橙色,现在问题来了,如果在显示信息文字的最后方加上这些代码,也会显示出对应的颜色。(参考链接:一个bug?)于是我们不禁会想:后置颜色代码是不是也可以应用到战役制作里面?答案是肯定的。但是讲到这里,我想大部分坛友都会有一个疑惑……



如果前置颜色代码与后置颜色代码同时出现,显示的文字会变成什么样?




让我们先来看这样一个例子,首先是前置<RED>代码,然后是后置<BLUE>代码,这样会显示出什么样的文字呢?答对啦!!那就是……


…蓝色的乱码……


好像哪里不太对……


按照我们的常识,这段文字显示的信息应该是红色的“小朋友们……蓝猫配<BLUE>”。这个例子告诉我们前置和后置决定文字的颜色并不是绝对的,那么让我们再看看另外一个例子。




这个显示出来之后会是什么颜色的呢?





很显然是绿色的乱码。





那么这个呢?事实告诉我们上面这个显示出的并不是紫色的乱码……


出人意料地,显示出了红色的正常文字……


这样看似毫无规律的颜色显示,有些坛友可能会注意到一个细节,那就是颜色显示的优先度问题。简单来说,<BLUE>、<RED>、<GREEN>、<YELLOW>、<AQUA>、<PURPLE>、<GREY>、<ORANGE>这八种颜色之间随机选出几种颜色的代码分别放在最前与最后,那么谁的优先度高,谁就会决定文字的颜色。


我们从以上例子中可以得出部分颜色的优先度:蓝色>红色>紫色;绿色>灰色。因此一个很合理的猜想就是:颜色的优先度顺序与游戏者默认颜色的顺序是一样的。而实际的试验也验证了这一点。即:


颜色显示优先度:蓝色>红色>绿色>黄色>青色>紫色>灰色>橙色


现在我们再来看这样的两个例子:




由于蓝色的优先度最高,所以这段信息是一连串蓝色的英文。




现在来看这一例子:





细心的坛友会发现这一串代码中,<BLUE>既不是最前端也不是最后面的代码,所以按照刚刚的结论,应该是最后面的代码决定了黄色的文字。然而……





依然是蓝色……


这说明颜色的代码并不取决于在文字中的位置,换句话说,如果一段文字中有<BLUE>这一代码,显示出的文字就是蓝色,而不是取决于它是否位于最前端或者最后。





于是这样我们就能够得到正确的结论了:文字的颜色为蓝色。





正确。


但是这里面有个小问题……刚刚留心看的坛友也一定注意到了,就是在文字中插入了颜色代码之后,会出现乱码或者奇怪的英文字母。那么为了使研究更加清晰明确,接下来让我们显示英文信息。





由以上结论得知,这段颜色是绿色的,不过不要紧,我们研究的是另一个问题。





通过观察发现,“Hello”中少了一个“H”,这是“<AQUA>H”被绿色颜色代码吃掉的结果。再让我们回头看看其他的例子:





这段代码中“<GREEN”也被蓝色的颜色代码吃掉了。








在这段代码中,“<AQUA”被红色颜色代码吃掉了。


留心一下这些“吃人”的颜色代码与被吃掉的字符:
<AQUA>H ====== <GREEN>
<GREEN======<BLUE>
<AQUA   ======   <RED>


我们不难发现,吃掉的位于最前端的字符的数量,实际上就是决定了文字颜色的代码本身的字符数量。








这样也就不难解释上两图的显示结果了。


需要注意的一点是,只要有“<”字符在开头出现,就会开始进行文字颜色的判定,这个时候游戏会自动寻找决定颜色的代码。比如:








但是如果没有字符“<”在最前端,就不会开始颜色的判定,这个时候即使你输入了颜色代码也是无效的。比方说下面的这个例子:








因为最前方没有“<”,所以<BLUE>不会生效,是白色的文字。








有趣的是,颜色代码可以吃掉自己,但是显示的颜色并不会变。


这样我们不难解释以前常用的前置颜色代码了吧?举个例子:“<RED>组长没节操!”之所以会显示出红色的“组长没节操!”,是因为开头的“<”使游戏进行了颜色判定,并且只有<RED>一个代码(优先度最大),然后红色颜色代码吃掉了与自身代码字符数相同的“<RED>”。


怎么样?是不是很简单呀?






总结:

①改变信息中文字的颜色,必须在开头加“<”这一字符。
②信息是否改变颜色,与颜色代码在信息中的位置无关。
③颜色代码会“吃掉”位于信息最前端的与代码自身等长的字符,如果“不够吃”则会乱码。




================================================================================================


指导教师:@条顿武士



条顿武士 发表于 2015-4-18 18:09:22

补充一下:

③颜色代码会“吃掉”位于信息最前端的与代码自身等长的字符,如果“不够吃”则会乱码。

这里并不是不够吃会出现乱码,而是因为汉字占据两个字符的位置,在吃掉的字符数刚好跨越半个汉字的位置时便会出现乱码。

春田一九零三 发表于 2015-4-18 18:55:11

1.0c版本中,使用<RED>标注前置会留下一个>,利用这个原理后置<RED>则可以使得<RED>的>不再显示。。。。这大概就是以前<RED>后置法的原理吧?{:164:}

一窍不开 发表于 2015-4-18 18:57:02

学习了学习了!大赞!

Howerds 发表于 2015-4-18 20:06:44

想到一个应用,就是在游戏里人为制造乱码。

PS. 此结论也适用于送出聊天吧?

末底改 发表于 2015-4-19 04:02:20

这个有趣,可以自编密码和解码

troytroytroy 发表于 2015-5-1 01:47:48

我測試 1.4 版並不會出現亂碼。但是字符還是會消去,首個中文會被砍去一半而無法閱讀,但後面就正常了。
页: [1]
查看完整版本: 关于显示信息的颜色代码的研究