欢迎光临散文网 会员登陆 & 注册

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

2022-05-23 13:19 作者:在艾泽拉斯路口等风吹  | 我要投稿

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

先来了解一下魔兽世界中颜色的设定,它采用的是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颜色,所以也不用担心。

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

分享到微博请遵守国家法律