微信小游戏接入和文件管理
今天微信小游戏的接入工作终于告一段落,写篇文章来备忘,同时提醒下遇到同样问题的同学。
先简单列举下在接入工作中遇到的问题:
1.只提供一个主canvas,其他创建出来的canvas都是离屏的。
2.不支持dom树。
3.不支持xml的解析
4.不支持 URL.createObjectURL 的形式创建图片
5.模拟器跟微信的表现不一致
6.文件管理系统跟游戏的对接
由于我们项目是个完全自研的引擎,很多方面当时在浏览器环境下正常运行,但是微信限制太多,改动很大。
1.由于项目以前是3d和2d两层canvas在dom树里混合,这里不得不去把2d用贴图形式 渲染到3d,当然这里提升空间很大,去做基于webgl的ui渲染,各大引擎已经实现。
2.问题同1,我们还有很多基于dom树的控件 不得不去移到渲染列表
3.暂时没有解决方案,除非自己写文本解析 来实现xml的解析。
4.这个应该是微信基于自己的安全考虑,想想如果你能把二进制转换成图片,你都能来干些什么,如何审查。
5.这里不一致的表现很多,遇到已微信上的实际内容为准 所以多用微信测试,千万别以为在模拟器里好了,微信就好了。
请一切效果以在微信里表现为准
请一切效果以在微信里表现为准
请一切效果以在微信里表现为准
6.这是我这次发帖的重点,详细讲下这里遇到的坑
微信提供了好几个文件域,1.代码包文件 2.本地文件 3.临时缓存文件 4.受信任的安全域(游戏cdn)。
由于代码包文件4m的限制,用起来真的捉襟见肘,一个项目代码文件轻松达标,所以这里不考虑放入资源文件,还有这里的文件改动必须要重新提审。
所以现在项目的资源策略是,去cdn加载资源,writeFile写到本地,通过readFile返回本地文件,这里需要特别注意的地方就是因为不提供二进制序列化图片的方法,所以图片要以image.src的方式加载。
这里还遇到一个坑就是在模拟器里,写在本地的所有文件都能通过 XMLHttpRequest的方式请求得到,但是在微信里,只有图片能通过image.src的方式加载,其他资源无法通过XMLHttpRequest的请求得到,会报加载异常。请通过readFile读取二进制文件使用。
另外微信模拟了浏览器的缓存
另外微信模拟了浏览器的缓存
另外微信模拟了浏览器的缓存
所以当你加载到的资源跟资源服上的不一致的时候 请加随机数
祝大家接入愉快 另外微信小游戏群 谁来拉我进去
请提供微信号给我,网站私信就可以。