記 egret 顏色傳值踩坑

今天遇到了一個很蛋疼的問題,用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),其次是其他進制整數,但絕對不可以是浮點數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章