- 微信H5页面跳转横屏小游戏,在手机竖屏下退出返回H5,100%必现顶部标题栏高度异常
微信H5页面,跳转横屏小游戏,在手机竖屏下退出返回H5,100%必现顶部标题栏高度异常 [视频] 情况1:竖屏时进入H5,点击跳转横屏小游戏,手机保持竖屏,点击屏幕最下方的退出小程序的●按钮,会100%复现这个BUG,只要是当在横屏画面通过竖屏在使用手机,这情况下退出小程序,那么退出后,手机上的微信网页的高度会有问题,顶部的标题栏会消失,导致页面显示不正常 情况2:竖屏时进入H5,点击跳转横屏小游戏,手机旋转为横屏 ,然后按正常人的习惯,在横屏下点击●退出小程序,待完全退出再旋转屏幕为竖屏,这时候H5就是正常的 情况3:按照情况1,当复现BUG后,你人为旋转手机横屏,再旋转回竖屏,你会惊奇的发现自动修复了 情况4:按照情况1,当复现BUG后,在 iphone屏幕最左侧往右侧滑动1CM,然后继续拉回,也就是我们平时左滑退出微信浏览器的手势,滑一点点就取消,你也会发现BUG自动修复
11-06 - ios下小游戏内存1000M,帧率只有20左右,安卓内存80M,帧率60左右
ios下小游戏内存1000M,帧率只有20左右,安卓内存80M,帧率60左右 手机微信已上传日志: 我->设置->帮助与反馈,右上角上报日志入口 已经点击 【日志上传】 和 【卡顿记录上传】 微信号 hmonline 时间点 2022-11-17 18:00 - 17:00 之间 多次尝试 无论是正式版、体验版、开发版都是这样,尝试删除小游戏重新加载,也是如此,游戏刚进入内存就飙升900M,一会就是1200M左右 然后把同一个微信号在另外一步安卓手机登录,进入同样的游戏,内存就是80M,然后帧率是60帧,很奇怪
2022-11-17 - FileSystemManager.mkdir 在IOS真机上判断目录是否存在有误
小游戏需要加载一些外部资源,首次加载资源后把文件列表存储在一个TXT文档,并且存放在 wxfile://usr/layaairGame 目录下,第二次加载会对比每一个外部资源文件和本地TXT文档中记录的缓存文件列表,如果已经存在同名文件则跳过,当外部资源URL结尾的版本号和本地记录不一样时,则会重新下载文件,并更新本地TXT,这套逻辑没有问题,用来解决资源更新的问题。 但是后续发现IOS真机小游戏,在点击右上角 【●●●】 然后点击 【重新进入小游戏】,这时会重新加载所有外部图片资源,就像是没有对比本地TXT文件一样,后续反复仔细研究代码,发现LAYA引擎的源代码中是通过 FileSystemManager.mkdir 创建一个存放缓存文件的本地临时目录,由判断目录是否存在,来判断本地 TXT文档 是否存在。 通过研究微信官方小游戏 FileSystemManager.mkdir API的文档发现,创建目录${dirPath}有同名文件或目录即返回 fail file already exists,而LAYA引擎源代码中正是通过这个API的返回字符来判断文件夹是否存在,理论上第二次加载时,目录已存在,TXT文档也存在,原代码逻辑设计的就是当目录存在则读取TXT文档,获取之前存储的缓存文件列表,再通过对比文件名实现自动跳过外部图片资源的重复加载。但是由于 mkdir IOS真机表现,在目录已存在的前提下,并没有返回 fail file already exists ,而是直接成功创建了同名的目录,导致目录存在则读取TXT的逻辑代码跳过没有执行生效,最终的表现就是虽然首次加载过外部图片资源并已记录TXT,第二次、第三次.....均会重复加载外部资源,导致200M的小游戏本地用户文件空间逐步变满,最终导致LAYA引擎内统计本地空间使用容量值出错,而缓存空间满后自动清理缓存文件的逻辑也全部失效,最终表现就是200M空间满,游戏无法正常加载资源,导致游戏无法显示图片,游戏黑屏。 贴一段LAYA引擎源代码,原来的逻辑正是通过mkdir是否能够正常创建同名目录来判断文件夹是否存在,以达到判断TXT文档是否存在的目的 fs.mkdir({dirPath: dirPath, recursive:true, success: function(data:Object):void { console.error('mkdir sucess'); console.error(data); callBack != null && callBack.runWith([0, {data: JSON.stringify({})}]); }, fail: function(data:Object):void { console.error('mkdir fail'); console.error(data); if (data.errMsg.indexOf("file already exists") != -1) readSync(fileListName, "utf8", callBack); else callBack != null && callBack.runWith([1, data]); }});
2022-10-29