今天遇到了一个很蛋疼的问题,用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),其次是其他进制整数,但绝对不可以是浮点数。