组合CreateJS + PhoneGap时的代码错误
我目前正在使用CreateJS套件开发HTML5 / JavaScript游戏,并且它在浏览器中运行得非常好。 我现在正在尝试修改它,以便它可以作为PhoneGap应用程序工作。 到目前为止,我已经设法解决了所有的问题。 除了代码。 基本上,我有一个初始化函数来填充我的LoadQueue,它在加载时调用handleComplete。 在handleComplete函数的最后,我设置了:
createjs.Ticker.addEventListener("tick", this.tick);
createjs.Ticker.setFPS(gameFPS);
但是当我跑步时,我在控制台中得到这个:
Uncaught TypeError: Cannot read property 'handleEvent' of undefined
我想这可能只是一个范围问题,但是当我将这些代码放在函数或应用程序变量的外部时,我仍然会得到相同的错误。 我已经寻找解决方案,但没有具体的事情。 我已经确定在调用之前声明/定义所有事件处理程序,我试着从.addEventListener更改为.on
将使用jQuery的$()包装解决这个问题? 我不是一位超级经验丰富的JavaScript程序员,尽管我能够在没有太多帮助的情况下找出大多数问题; 我想我可能已经在这里深入了我的视野。
欢迎任何建议。 字面上任何事情。
谢谢!!!
编辑:我试着改变addEventListener行:
createjs.Ticker.on("tick", createjs.proxy(this.tick));
现在,它通过加载,将所有对象绘制到画布上,但现在它给了我:
Uncaught TypeError: Cannot call method 'apply' of undefined create.js:14
那么这是一个范围问题,它只是不断跟踪createjs?
所以我改变了
createjs.Ticker.addEventListener("tick", this.tick);
至
createjs.Ticker.addEventListener("tick", app.tick);
“app”是包含所有这些代码的var。 在改变了一些其他函数调用之后:“app.Example();” 我的代码最终在PhoneGap集成,我的电脑和手机上运行。 所以我假设在前面的例子中,它使用“this”来引用createjs.Ticker。
我仍然非常感谢来自具有更多经验的人员的澄清/改正,因为我经常遇到像这样的小问题。 所以,如果有人能够准确地解释我最初做的是什么问题,那么将来会很大程度上避免这种愚蠢的小错误。
但至少现在我的代码工作:D
我意识到这是旧的,但我偶然发现,也许有一些指针。 我需要查看更多的代码才能确定,但怀疑您正在代理的“this”引用,并假设tick方法所依赖的不是您认为的范围/对象(应用程序)。 尽管在Ticker回调滴答函数中代入“this”似乎是正确的,但如果您在另一个事件回调或其他某个劫持此引用的函数中这样做,并且没有正确代理“this”,那么可能“这“并不指向你的想法。 它指向事件被解雇的对象。 必须确定他们理解JavaScript这个范围规则。 谷歌“JavaScript范围”了解更多信息。
链接地址: http://www.djcxy.com/p/52627.html