微信小游戏
1.包大小限制:代码包总大小不能超过 8M,单个分包不能超过 4M
2.微信音效自带的游戏音乐切入后台后中断,切回前台不会播放,需要在前台事件中手动去回复播放
中断事件也是一样,在中断结束的事件回调中去回复(接到电话、闹钟响起、系统提醒、收到微信好友的语音/视频通话请求)
(游戏采用cocos音效,这里应该用不到,可以观察到时候是否影响到cocos的音效播放)
3.初始包尽量小,在初始页去down其他分包,这样避免了主包大小
4.本地缓存文件和本地用户文件的清理时机跟代码包一样,只有在代码包被清理的时会被清理。(版本号?)
在本地用户文件目录下创建一个文件 hello.txt,写入内容 "hello, world"
const fs = wx.getFileSystemManager()
fs.writeFileSync(`${wx.env.USER_DATA_PATH}/hello.txt`, 'hello, world', 'utf8')
5.分包;微信 6.6.7 客户端,2.1.0 及以上基础库开始支持)
需要先在 game.json 配置分包信息。
├── game.js
├── game.json
├── images
│ ├── a.png
│ ├── b.png
├── stage1
│ └── game.js
│ └── images
│ ├── 1.png
│ ├── 2.png
└── stage2.js
6.小程序运行机制(小程序没有重启的概念。)
热启动:假如用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,
只需将后台态的小程序切换到前台,这个过程就是热启动;
冷启动:用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动,即冷启动。
前台/后台状态
当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有直接销毁,而是进入了后台状态;
当用户再次进入微信或再次打开小程序,小程序又会从后台进入前台。
小程序销毁
需要注意的是:只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)小程序会被微信主动销毁。
当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收。
在 iOS 上,当微信客户端在一定时间间隔内(目前是 5 秒)连续收到两次及以上系统内存告警时,会主动进行小程序的销毁,并提示用户 「该小程 序可能导致微信响应变慢被终止」。
建议小程序在必要时使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。
(基础库 1.1.0 及以上,1.4.0 以下版本: 当用户从扫一扫、转发等入口(场景值为1007, 1008, 1011, 1025)进入小程序,
且没有置顶小程序的情况下退出,小程序会被销毁) 强制更新应用新版本
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 请求完新版本信息的回调
console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success: function (res) {
if (res.confirm) {
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下载失败
})
// 创建一个msg.length * 2 + 2的大小的ArrayBuffer
// 字符串转为ArrayBuffer对象,参数为字符串; var buf = new ArrayBuffer(str.length*2); 每个字符占用2个字节
var buffer = new ArrayBuffer(msg.length * 2 + 2);
// 创建一个指向b的Int16视图,开始于字节0,长度为2
var v1 = new Int16Array(buffer, 0, 2);
// 将类型化数组的set方法用于复制数组,也就是将一段内容完全复制到另一段内存
// 将msgType复制到v1中
//*******将消息头(协议)放到了开头
v1.set(msgType);
// 获取protobufMsg的字节大小
var pbstr = protobufClass.encode(protobufMsg).finish();
// 创建一个指向b的Uint8视图,开始于字节2
var v2 = new Uint8Array(buffer, 2);
// 将pbstr复制到v2中
//*******将消息结构体内容(协议)放到了剩余位置
v2.set(pbstr);
// 发送消息buffer
this.__socket.send(buffer);