今天遇到了一個很蛋疼的問題,用egret引擎開發的小遊戲發佈到微信小遊戲後,使用Win PC的客戶端打開後發生了閃退。
why? 內存爆了?運行環境問題?
nonono!多方追查下發現原因是這個:
// spTxt: egret.textField
spTxt.strokeColor = 1.5;
可以看到,描邊顏色被設置成了1.5。。。
在egret官網,對顏色值的要求是:可以接受一個16進制的顏色值,也可以接受其他進制的數字。但推薦使用16進制。
這樣一看1.5也沒問題啊!
但是再看一下egret源碼中對顏色值的處理方法:
/**
* 轉換數字爲顏色字符串
* @param value {number} 顏色值,例如 0xffffff
* @returns {string} 顏色字符串,例如"#ffffff"。
* @version Egret 2.4
* @platform Web,Native
* @includeExample egret/utils/toColorString.ts
* @language zh_CN
*/
function toColorString(value) {
if (value < 0)
value = 0;
if (value > 16777215)
value = 16777215;
var color = value.toString(16).toUpperCase();
while (color.length > 6) {
color = color.slice(1, color.length);
}
while (color.length < 6) {
color = "0" + color;
}
return "#" + color;
}
可以看到egret的處理方法是把數字轉爲16進制字符串,然後多的保留最後6位,少的前邊補“0”。
so...
console.log(toColorString(1.5))
// "#0001.8"
輸出了一個貌似顏色值的東西。
我們在微信小遊戲中嘗試使用這個作爲顏色值。在開發者工具表現爲黑色,在我的手機上(三星 note8)是鮮豔的紅色,在WIN PC的客戶端裏就發生了文章開頭的事情[捂臉]。
總結:
使用egret引擎在傳顏色值的時候,最好傳入16的整數(0x000000),其次是其他進制整數,但絕對不可以是浮點數。