【问题标题】:Ticker problems when combining CreateJS + PhoneGap组合 CreateJS + PhoneGap 时出现的 Ticker 问题
【发布时间】:2014-10-10 04:55:37
【问题描述】:

我目前正在使用 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

我认为这可能只是范围问题,但是当我将此代码放在函数或 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 的跟踪?

【问题讨论】:

  • 另外,所有其他 createjs.***** 的东西都有效,因为我的进度条在加载阶段被绘制到屏幕上。但是一旦代码被调用,它就会捕获错误

标签: javascript jquery cordova createjs


【解决方案1】:

所以我改变了

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

到

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

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

我仍然非常感谢有更多经验的人的澄清/纠正,因为我经常被这样的小问题挂断。因此,如果有人能插话并准确解释我最初所做的事情有什么问题,这将极大地帮助我避免将来出现类似的愚蠢小错误。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多