微信小游戏开发遇到的坑以及注意事项

#一、不要用插件方式导入

浏览器模式下,插件代码的变量会自动注册成全局变量,其他模块直接用就是。编译到微信小游戏,会包装一层,就没法用全局变量。所以叫不以插件方式导入,在最后用module.exports导出变量,要用的时候require一下再用。以前proto文件转成js文件以插件方式导入会出问题,这样处理就好了。

#二、atob、btoa微信小游戏不支持

用第三方的base64库,在项目根目录执行:

npm install --save js-base64

要用的地方引用该模块:

var Base64 = require('js-base64').Base64;
Base64.decode('ZGFua29nYWk=');

#三、FormData不支持,HTTP接口不一样

微信小游戏HTTP接口不一样,也不支持FormData,所以HTTP请求接口整理两个模块,根据cc.sys.platform === cc.sys.WECHAT_GAME初始化接口,同时兼容微信小游戏和浏览器。

#四、eval不支持

如果第三方库用到,很可能有问题,protobufjs的inquire函数用到了,但编解码还是可以用。

#五、"click"事件好像有问题

原来的项目,整理到微信工具里运行,"click"事件的node点击体验经常有问题,一会儿单击就可以,一会儿需要双击才能生效,不知道是微信工具的问题还是cocos creator的锅。类似这样的"click"监听事件可能有问题:

this.gameStartBtn.on("click", this.gameStart, this);

#六、项目里不要有"game.js"文件

windows的cocos creator编译会有问题,mac的cocos creator编译后正常,web模式编译都没问题。估计是cocos的锅。

#七、cc.loader.loadRes可能没有回调

在机器内存紧张的情况下,非常容易遇到,连场景也切不了,也没任何报错。在内存充足的情况下,基本都是正常的,可能是微信工具的锅。

#八、WebSocket问题

虽然腾讯官方文档给的WebSocket API和浏览器的不太一致:https://mp.weixin.qq.com/debug/wxagame/dev/document/network/websocket/wx.connectSocket.html?t=201814,但实际上可以浏览器一样的API操作,也就是类似var ws = new WebSocket(url)这样去连接,但最多只能建立两个WebSocket连接。另外,微信小游戏的发送数据(ws.send)只支持string和arraybuffer,而浏览器可以直接发送Uint8Array。

4赞

第五点我也碰到过,按钮点左下角可以触发事件,点其他地方都不行

this.settingBtn.on(cc.Node.EventType.TOUCH_END, this.touchCallBack, this);

像这样监听TOUCH_END的,好像就没啥问题

你是说用枚举就不会有问题?

顶楼主。这里面有几个问题我也遇到了。

我在使用google官方的javascript的protobuf,核心脚本里有很多的eval和document还有window的代码。但是这些都不是必要的,都是适配特殊浏览器的代码。可以在代码中搜索,把这些代码都删掉不影响使用。

第七项 有什么解决方法么大佬~ 我现在就遇到了这个问题cc.loader.loadRes 木有回调~