魔獸世界插件實戰(zhàn)筆記從入門到放棄的心理歷程 第三節(jié)-窗體顏色設置與漸變

魔獸世界插件實戰(zhàn)筆記從入門到放棄的心理歷程 第三節(jié)-窗體顏色設置與漸變


先來了解一下魔獸世界中顏色的設定,它采用的是Hex的表示法,這個在網(wǎng)上還不好找,一般都是RGB色譜,先來轉(zhuǎn)換一下吧,要不然你想要那種顏色,也是傻傻分不清。
Hex 怎么轉(zhuǎn) RGB呢?
例如,F(xiàn)FCC99,,每兩個字符代表一個0-255的16進制數(shù),分別表示紅,綠,藍三種顏色。我們可以利用string.sub()函數(shù)將其分為3部分,然后用tonumber()將字符串轉(zhuǎn)換為數(shù)字,不過注意:

結(jié)果是nil,因為lua語言中,tonumber() 默認用于轉(zhuǎn)換10進制數(shù)字。需要第二個參數(shù)以指定數(shù)制:
結(jié)果是:255
然后就可以寫出16進制轉(zhuǎn)換RGB百分比的代碼了,用一個函數(shù)來表達吧,用起來方便些:
簡單測試一下,在vscode中還是比較直觀的,直接可以顯示出來顏色:
顏色搞清楚了,就可以給窗體添加紋理了:

在XML中,說過都是成對出現(xiàn)的表示法,<Texture></Texture>也不例外:
紋理還可以是兩種不同顏色間的漸變。這可以使用<Gradient>標記來設定最小顏色和最大顏色,并以此定義一個漸變效果。
<Gradient>有orientation屬性,可以賦值為HORIZONTAL(垂直漸變)或VERTICAL(水平漸變)。默認是ORIZONTAL。標記必須包含兩個元素,<MinColor>和<MaxColor>,均為ColorType類型。
僅一個<Gradient>標記并不會創(chuàng)建漸變效果,它必須與<Color>標記結(jié)合使用才可以。在漸變效果的每個位置,從Color>標記得到的顏色值與當前的漸變值相乘,來決定屏幕上應當顯示什么樣的顏色。這樣處理最簡單的實現(xiàn)方法是具有下面的顏色值。

這保證了你的漸變值從<MinColor>開始,到<MaxColor>結(jié)束,由于每個分量值都為1.0,因此其在相乘時并不改變每個顏色值。
雖然這個花里胡哨的,也不一定用到,但是顏色表示法還是需要了解的,因為在插件中,我們會用顏色來區(qū)分不同的狀態(tài),窗體的設定是Hex模式,其實在lua中實現(xiàn)的時候,都是用的RGB顏色,所以也不用擔心。