微信小遊戲子域踩坑記錄
阿新 • • 發佈:2018-11-25
最近要在小遊戲裡面弄一個排行榜功能,記錄一下踩過的坑吧。
受限的開發資料域
微信是限制在遊戲主體裡面進行關係鏈資料的操作的,取而代之的是一個開放資料域的類沙盒環境。這是一個功能受限的Javascript沙盒,在開放資料域裡面:
- 不能聯網
- 只能使用本地或微信CDN的圖片
- 不能向主域傳遞訊息
- 不能設定sharedCanvas的尺寸
- 不能呼叫canvas的toDataURL以及getImageData
- 只能通過wx.onMessage接受主域訊息
頭像顯示問題
最先受到影響的是排行版中的頭像顯示,一開始很自然的使用了主域中的寫法
cc.loader.load(userGameData.avatarUrl, (err, texture)=>{
if(err){
console.warn(err);
return;
}
avatar.spriteFrame = new cc.SpriteFrame(texture);
});
自然是不行的,原因在於loader在載入遠端資源的時候是要使用網路的,而子域中wx.request是無法使用的。因此需要使用wx.createImage來獲取圖片,下面這樣是可以的。
setAvatar(avatarUrl) { let image = wx.createImage(); image.onload = () => { try { let texture = new cc.Texture2D(); texture.initWithElement(image); texture.handleLoadedTexture(); this.avatar.spriteFrame = new cc.SpriteFrame(texture); } catch (e) { console.warn(e); } }; image.src = avatarUrl; }
包體過大的問題
寫完之後,感覺可以了,便準備上傳小遊戲。然後...包體過大,無法上傳!!!是的,我已經把所有的資源都放在了遠端資源伺服器了。然而還是超了,這裡不得不吐槽下creator的包體太大了。一個10k不到的合圖檔案,一個場景檔案,兩個不到100行的js檔案,就已經1.3M了!!!然後,把專案中無用的模組全關了,重新打包,子域大小在730k左右。另外一個scrollview元件居然就有快30k的大小,實在無力吐槽。等專案有空的時候,還是用原生子域替換掉這個creator版本。
子域在主域的canvas上顯示的比例不對
- 設定子域尺寸和主域繪製精靈尺寸一致
- 不要都選精靈的trim
掉幀
子域的效能實在是不怎麼好,平均只有40幀不到,就算限制了update的頻率也沒有什麼提高==、好在只有一個排行版,勉強能看,有空研究下。
字型模糊
很多人說子域的字型會模糊,我這邊還沒什麼感受,可能和ui設計有關係吧 這裡有個討論,遇到的朋友可以去瞅瞅
總結
使用creator開發小遊戲總體來說還是蠻舒服的,不過也有一些問題,例如字型無法遠端載入、子域效率不行而且包體很大等等。不過現在引擎釋出速度還是很快的,一些問題的修復還是可以期待的。