收藏
回答

微信小游戏context切后台后真机绘制不出来

问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小游戏 Bug canvas 微信iOS客户端 iOS 6.6.7 24

微信小游戏, 切换到后台后,我使用这个方法判断程序重新进入前台:

wx.onShow(res => {
  console.log("onShow方法的回调");
  console.log(res);
  if (res.path == null){
    //关闭后热启动
    restart_render();
  }
})

能顺利检测到游戏进入到前台, 但是上一次绘制的所有视图都不见了, 变成了黑屏状态, 然后我又用context重新将上一次保存的状态重新绘制了一遍, 在模拟器上是有效的, 在iPhone上真机调试,只能绘制少部分视图, 大多视图依然是黑的, 原以为模拟器能通过,真机一定可以的, 没想到这次被微信坑了 ...

最后一次编辑于  2018-06-12  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

6 个回答

  • Ryan-天哥
    Ryan-天哥
    2018-06-12

    我要这铁棒(模拟器)有何用 ...

    2018-06-12
    赞同
    回复 3
    • Ryan-天哥
      Ryan-天哥
      2018-06-12

      我又试了一下,这个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(), 延迟方法应该是在主线程吧? 等我消息,兄弟们 ...

      2018-06-12
      赞同
      回复
    • Ryan-天哥
      Ryan-天哥
      2018-06-12

      果然不出我所料, 问题应该是微信的

      wx.onShow(res => {//这里并非运行在主线程,如果在这里写绘制的代码,就会发生灵异事件,正确的写法是
      setTimeout(function () {
            restart_render();
          }, 500)})

      现在就可以正常运行了, 问题解决了, 原来根本不需要问别人,这个社区就是最好的思考问题的地方, 发了个帖子,自己就找到问题了, 已经解决,如果各位还有更好的方法,请在下面回复我,如果你也遇到这个问题,可以用我上面的方法试试,不谢...

      2018-06-12
      赞同
      回复
    • mark
      mark
      2018-09-28回复Ryan-天哥

      大哥,restart_render()是哪里的方法,怎么调取,我是第三方引擎开发小游戏

      2018-09-28
      赞同
      回复
  • 王鼎兴
    王鼎兴
    2018-06-26

    我也是碰到一样的问题,真是个坑····

    2018-06-26
    赞同
    回复
  • 1024
    1024
    2018-08-15

    楼主正解

    2018-08-15
    赞同
    回复