微信小游戏, 切换到后台后,我使用这个方法判断程序重新进入前台:
wx.onShow(res => { console.log( "onShow方法的回调" ); console.log(res); if (res.path == null ){ //关闭后热启动 restart_render(); } }) |
能顺利检测到游戏进入到前台, 但是上一次绘制的所有视图都不见了, 变成了黑屏状态, 然后我又用context重新将上一次保存的状态重新绘制了一遍, 在模拟器上是有效的, 在iPhone上真机调试,只能绘制少部分视图, 大多视图依然是黑的, 原以为模拟器能通过,真机一定可以的, 没想到这次被微信坑了 ...
楼主正解
我也是碰到一样的问题,真是个坑····
我要这铁棒(模拟器)有何用 ...
我又试了一下,这个restart_render(); 在onshow中执行绘制是不正常的, 但是在点击监听中是正常的, 我三观被毁 ...
wx.onTouchStart(
function
(e){
if
(utils_coordinate.getXY(e).y > array_map1[array_map1.length - 1].y + array_map1[array_map1.length - 1].height){
restart_render();
}})
也就是说用户点击一下黑色屏幕,canvas又正常绘制除了全部画面, onshow方法中执行restart_render()只有在模拟器中才有效, wx.onTouchStart方法中执行restart_render(), 模拟器和真机都有效, 但是这样体验不好呀... 用户后台了一下而已,回到前台就黑屏了, 必须点一下屏幕才能亮起... 我觉得可能与主线程有关, 所以接下来我会尝试在onshow中写一个延迟方法, 延迟500ms再去调用restart_render(), 延迟方法应该是在主线程吧? 等我消息,兄弟们 ...
果然不出我所料, 问题应该是微信的
wx.onShow(res => {
//这里并非运行在主线程,如果在这里写绘制的代码,就会发生灵异事件,正确的写法是
setTimeout(
function
() {
restart_render();
}, 500)})
现在就可以正常运行了, 问题解决了, 原来根本不需要问别人,这个社区就是最好的思考问题的地方, 发了个帖子,自己就找到问题了, 已经解决,如果各位还有更好的方法,请在下面回复我,如果你也遇到这个问题,可以用我上面的方法试试,不谢...
大哥,restart_render()是哪里的方法,怎么调取,我是第三方引擎开发小游戏