组合CreateJS + PhoneGap时的代码问题

时间:2014-01-17 17:40:39

标签: javascript jquery cordova createjs

我目前正在使用CreateJS套件开发HTML5 / JavaScript游戏,它在浏览器中运行得非常好。 我现在正在尝试修改它,以便它可以用作PhoneGap应用程序。到目前为止,我已经设法解决了所有的问题;除了Ticker之外。基本上,我有一个初始化函数,它填充我的LoadQueue,它在加载时调用handleComplete。在handleComplete函数的末尾,我设置了:

createjs.Ticker.addEventListener("tick", this.tick);
createjs.Ticker.setFPS(gameFPS);

但是当我跑步时,我在控制台中得到了这个:

Uncaught TypeError: Cannot read property 'handleEvent' of undefined

我认为它可能只是范围问题,但是当我将此代码放在函数或app变量之外的任何地方时,我仍然会得到相同的错误。我一直在寻找解决方案,但没有什么具体的。我确保在调用之前声明/定义所有事件处理程序,我尝试从.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的追踪?

2 个答案:

答案 0 :(得分:0)

所以我改变了

 createjs.Ticker.addEventListener("tick", this.tick);

 createjs.Ticker.addEventListener("tick", app.tick);

“app”是包含所有此代码的var。在将一些其他函数调用更改为:“app.Example();”之后我的代码最终在我的计算机和手机上与PhoneGap集成运行。所以我假设在前一种情况下,它使用“this”来引用createjs.Ticker。

我仍然非常感谢有经验的人澄清/纠正,因为我经常会遇到这样的小问题。因此,如果有人可以插入并解释我最初所做的事情究竟出了什么问题,那么将来可以帮助我避免像这样的愚蠢的小错误。

但至少现在我的代码有效:D

答案 1 :(得分:0)

我意识到这已经过时了,但我偶然发现它并且可能有一些指示。我需要查看更多代码以确定,但怀疑你代理的“this”引用并假设tick方法存在并不是你认为的范围/对象(app)。虽然看似正确将“this”代理到Ticker回调tick函数中,如果你在另一个事件回调或其他一些劫持了这个引用的函数中这样做,并且也没有正确地代理“this”,那么很可能“这“并没有指出你的想法。它指向事件被触发的对象。必须确保他们理解JavaScript这个范围规则。谷歌“JavaScript这个范围”获取更多信息。