魔兽世界插件实战笔记从入门到放弃的心理历程 第三节-窗体颜色设置与渐变

魔兽世界插件实战笔记从入门到放弃的心理历程 第三节-窗体颜色设置与渐变


先来了解一下魔兽世界中颜色的设定,它采用的是Hex的表示法,这个在网上还不好找,一般都是RGB色谱,先来转换一下吧,要不然你想要那种颜色,也是傻傻分不清。
Hex 怎么转 RGB呢?
例如,FFCC99,,每两个字符代表一个0-255的16进制数,分别表示红,绿,蓝三种颜色。我们可以利用string.sub()函数将其分为3部分,然后用tonumber()将字符串转换为数字,不过注意:

结果是nil,因为lua语言中,tonumber() 默认用于转换10进制数字。需要第二个参数以指定数制:
结果是:255
然后就可以写出16进制转换RGB百分比的代码了,用一个函数来表达吧,用起来方便些:
简单测试一下,在vscode中还是比较直观的,直接可以显示出来颜色:
颜色搞清楚了,就可以给窗体添加纹理了:

在XML中,说过都是成对出现的表示法,<Texture></Texture>也不例外:
纹理还可以是两种不同颜色间的渐变。这可以使用<Gradient>标记来设定最小颜色和最大颜色,并以此定义一个渐变效果。
<Gradient>有orientation属性,可以赋值为HORIZONTAL(垂直渐变)或VERTICAL(水平渐变)。默认是ORIZONTAL。标记必须包含两个元素,<MinColor>和<MaxColor>,均为ColorType类型。
仅一个<Gradient>标记并不会创建渐变效果,它必须与<Color>标记结合使用才可以。在渐变效果的每个位置,从Color>标记得到的颜色值与当前的渐变值相乘,来决定屏幕上应当显示什么样的颜色。这样处理最简单的实现方法是具有下面的颜色值。

这保证了你的渐变值从<MinColor>开始,到<MaxColor>结束,由于每个分量值都为1.0,因此其在相乘时并不改变每个颜色值。
虽然这个花里胡哨的,也不一定用到,但是颜色表示法还是需要了解的,因为在插件中,我们会用颜色来区分不同的状态,窗体的设定是Hex模式,其实在lua中实现的时候,都是用的RGB颜色,所以也不用担心。