你踩過幾個?盤點微信H5小游戲開發(fā)中的那些坑

眼下小游戲特別火,不少團隊也陸續(xù)啟動了微信小游戲的項目,并于立項前期進行技術(shù)預(yù)研究。但從微信官方文檔看 , 卻能發(fā)現(xiàn)不少坑。

一、運行環(huán)境的坑

首先微信小游戲是一個不同于瀏覽器的 JavaScript 運行環(huán)境,沒有 BOM 和 DOM API,所以我們第一個遇到的就是API兼容性問題。

1、API兼容性

1.1、網(wǎng)絡(luò)API

BOM的核心是windows,表示的是一個瀏覽器的實例,在網(wǎng)頁中自定義的任何一個對象、變量和函數(shù),都以windows作為其全局對象;缺乏Dom意味著http、websocket及本地存儲等通信用的API使用就會遇到問題,好在微信提供了這兩個API的私有實現(xiàn),我們要做的就是適配。

適配的基本思路是檢測是否是運行再微信平臺,然后利用JS動態(tài)語言特性, 對BOM的API進行動態(tài)重寫 , 優(yōu)缺點如下:

1.優(yōu)點是API調(diào)用者無需做任何改動,適配成本幾乎為0。對微信小游戲和瀏覽器之間的運行 環(huán)境差異無感知,非常友好。 2.缺點是會增加代碼體積,但代碼體積的增加帶來的損失幾乎可以忽略不計。

這種適配方案的性價比很高, 適配HTTP代碼示例如下:

1.2、微信的模塊化

微信小游戲提供了 CommonJS 風(fēng)格的模塊 API,可以通過 module.exports 和 exports 導(dǎo)出模塊,通過 require 引入模塊 . 這與瀏覽器引入JS文件的方式截然不同 , 中間有一個隔離層。

讓我們舉個例子來說明模塊化帶來的問題。

通常我們在瀏覽器上使用某個js文件里面自定義的類,通過

標(biāo)記引入JS文件可以直接使用:

但在微信中不可以這樣.需要把API都導(dǎo)入到一個對象上,使用時在加這個前綴.導(dǎo)致很多代碼需要修改,那么如何避免增加這個前綴呢?

針對這種情況 , 解決的思路是將所有外部需要用到的方法和對象動態(tài)掛靠到window對象上去,將上面的代碼稍做修改示例如下:

2、工作流變化

由于微信小游戲沒有Dom和Bom,所以很多依賴Dom和Bom的庫都不能直接用,比如 jquery。

微信的這套環(huán)境會或多或少會引起我們的工作流變化,使用第三方游戲開發(fā)引擎(比如Cocos Createor/Egret/Laya)可以彌補這些問題帶來的損失。

二、資源限制

1、每個小游戲允許上傳的代碼包總大小為 4MB。

解決方法1:壓縮js文件,圖片資源放在服務(wù)器上做預(yù)加載。 解決方法2:使用第三方引擎的資源管理功能。

2、微信小程序要求開發(fā)者的服務(wù)器 支持https,wss協(xié)議。

解決方案:服務(wù)器啟用HTTPS。實現(xiàn)的方式有很多,推薦Nginx反向代理。

三、發(fā)布審核

小游戲開發(fā)完成后發(fā)布上線需要具備如下的資格:

1: 服務(wù)器域名備案

2: https wss支持

3: 軟件著作權(quán)證書 復(fù)印件+蓋章簽名

4: 微信公眾平臺帳號及AppID

5: 開發(fā)者工具wechat_devtools_1.02.1803210_x64

6: 游戲自審報告復(fù)印件+簽名

7: iOS開發(fā)中帳號(可選,沒有則填空)

8: 游戲版號(開通微信支付需要)

9:企業(yè)開發(fā)者身份+對公帳號(開通微信支付需要)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容