首先,再次强调一些微信小游戏的基础技术限制:
-
不允许操作 DOM、BOM、如果必须改成小游戏相应的 API 调用方式,目前引擎会自动引入weapp-adapter.js 文件做兼容处理。
-
不允许动态执行代码的能力,eval、setTimeout 和 setInterval 函数的第一个参数不能为字符串,Function构造函数的参数不能为字符串。
-
关于小游戏体积问题,小游戏的体积不得大于 4M,缓存不得大于 50M。具体的解释为:
- 本地的代码和资源不得超过 4M。
- 单个小游戏项目缓存的文件不能超过 50M,目前当缓存超过 50M 时后续的资源将不会缓存,未来新版的 AssetsManager 将会允许开发者自定义哪些资源需要缓存的机制。
- 不允许从服务器下载脚本文件。
接下来向诸位开发者汇总一下这两天开发者普遍遇到的问题以及解决方案:
答:目前我们只支持白鹭引擎 5.1.x 版本发布为微信小游戏,推荐您使用最新的 5.1.2 版本。升级教程
答:assetsmanager 是 res 的替代方案,这两者的 API 有 90% 保持一致,但是仍然有一些小区别,主要是在 RES.Analyzer 上,如果您遇到了相关问题,您可以在 egretProperties.json 中修改模块配置,从 assetsmanager 修改回 res 并执行 egret clean ,这样就可以换成 res 资源管理库了。更改如图所示:
答:请确保您的微信开发者工具版本是 v1.02.1712280下载连接,遇到识别项目或者无法读取manifest.js 文件问题时先写检查下版本是不是太低导致的
答:需要在微信小游戏的项目中找到 game.json 文件,deviceOrientation 参数设置为 landscape,更多设置参考官方文档,如图:
下一引擎版本将会自动切换屏幕旋转模式
答:升级成功后,请首先保证 HTML5 版本可以正常运行,然后再尝试发布为微信小游戏,目前我们遇到了多位开发者通过创建 5.1.2 新项目后拷贝老项目代码和素材的方式尝试升级,由于忽视了修改 egretProperties.json 中的模块配置,导致运行失败的问题。升级教程
答:需要将要反射的类挂载到 window 对象下,例如有个 class People{} 类,需要添加代码 window["People"] = People。示例demo下载
答:参考上一条回答,需要将自定义组件暴露到全局作用域。
答:请查看游戏的入口类名是否为 Main,如不是请修改为 Main。
答:目前可以在 project.config.json 中手动设置 urlCheck 为 false。
答: 因为 protobuf.js 内部包含了加载的逻辑,这部分逻辑需要适配到微信小游戏的 API 才可以使用,目前正在解决这个问题。
答:播放的声音停止后延迟 100ms 再进行播放。
答:小游戏的支持包升级到 v1.0.15 以上。
答:把开放数据域和主域的帧率都改成 60 帧。
答:目前不要设置声音的音量,由于小游戏原生的声音设置 volume 无效,我们正在和微信团队配合,争取尽快解决这个问题。
答:解决方法:在进入游戏前先判断一下机型和系统型号,如果是 7plus,请切换到 canvas 模式来避免。
使用 navigator.userAgent 在小游戏中获取信息时无论是什么手机的返回值都是一样的 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E8301 MicroMessenger/6.6.0 MiniGame NetType/WIFI Language/zh_CN',
答:目前请暂时避免这种使用方式,这个问题已经反馈给微信团队。
答:请开发者检查下自己的操作系统是否是 32位 Windows,这是 5.1.2 版本在 32位 Windows系统上的 BUG,我们会尽快修复,在此之前,建议开发者使用 egret publish --target wxgame 发布后,手动使用微信开发者工具打开。
答:检查是否使用了 嵌入EXML到代码中,例:
var className = "skins.ButtonSkin";
var exmlText = `<e:Skin class="${className}" states="up,over,down,disabled" xmlns:s="http://ns.egret.com/eui">
...
</e:Skin>`;
需要改成单独的皮肤文件。
答:这个问题的本质原因是,您现在没有 appId,用的是体验账号,如果关闭调试模式的话,会触发微信的 request 域名验证,所以就失败了,这个问题只能等到微信开放注册机制才能解决。
答:
-
升级小游戏支持库到1.0.12版本
-
在微信开发者工具的 Console 控制台输入 egret.wxgame.version 应输出1.0.12
-
访问 这里 下载小游戏xml支持库
-
解压支持库,并拷贝到微信小游戏目录
-
打开小游戏目录中 game.js
-
在 egret.runEgret 之前加入代码:window.DOMParser = require("./xmldom/xmldom.js").DOMParser;
答: 我们要再次强调小游戏有很多的限制,首先检查我们所使用的第三方库是否符合小游戏的标准,具体可以参考小游戏官方文档,如果不符合规范,我们只能自己来修改这个库以达到标准。后期我们会整理常用的库提供给开发者。 经检查适合小游戏的标准,但还是会报我们使用的 第三放库未定义,需要我们把第三方库挂在到全局对象 window 上,我们可以在 wxgame.ts 的文件中添加。例如我们加入 zlib 库。如图:
答: 请您直接使用微信开发者工具 打开这个小游戏项目即可。
答: 升级小游戏包到最新版本(1.0.12)后,重新生成微信小游戏项目,可以解决。
今天就和大家分享这么多。有关更多的问题请您到 egret 论坛 bbs.egret.com 参与讨论。
window 系统下,部分独立显卡对模拟器的支持有问题,需要切换成集成显卡。
答:小游戏平台只能在 index.html 里设置,不能通过 stage.frameRate 方法动态修改
答:这是为了解决骁龙CPU的手机上产生两份纹理引起的,只会在模拟器上报错,真机上没有影响。把微信小游戏项目里 library/image.js
这个log
注释掉就可以了。