微信小游戏开发工具自带的DEMO,在PC调试没有问题,到真机体验“重新开始”时出现错误:
* Bug 表现是什么?预期表现是什么?
* 如何复现?
每次必现。
* 提供一个最简复现 Demo
微信小游戏开发工具自带的Demo。
20180107:
通过增加LOG信息,打开DEBUG开关,在手机查看LOG信息。
初步判断是下面代码中的window对象存在“循环引用”,在第一次启动后被系统给释放掉了。
Demo中代码如下:
this.bg = new BackGround(ctx)
this.player = new Player(ctx)
this.gameinfo = new GameInfo()
this.music = new Music()
console.log(“At restart: bg, player:”, this.bg, this.player)
console.log(“At restart: window:”, window)
window.requestAnimationFrame(
this.loop.bind(this),
canvas
)
console.log(“At restart: after window.requrestAnimationsFrame”)
NND,终于把问题定位出来了!!!那个该死的程序猿写的?
1、render方法中会用到top属性,top属性没有初始化,在PC模拟器中不会出错。
2、在手机上,top属性没有初始化和赋值,在执行render中用到top属性被认为时NULL而出错。
BackGround类的构造函数中两行代码改一下顺序,就好了~~
原代码:
this.render(ctx)
this.top = 0
修改后代码:
this.top = 0
this.render(ctx)
//调试代码,在手机上会出错
//let ctx = canvas.getContext(‘2d’)
console.log("At restart: canvas, ctx: ", canvas, ctx)
0107:可能出错在下面代码中,后面的LOG信息没有显示出来。
this.bg = new BackGround(ctx)
this.player = new Player(ctx)
this.gameinfo = new GameInfo()
this.music = new Music()
console.log(“At restart: bg, player:”, this.bg, this.player)