【发布时间】:2018-02-24 00:45:14
【问题描述】:
我的代码
for each(var enemy in RhythmGame.npcs) {
if(this.hitTestObject(enemy)) {
enemy.step(distance, axis, origin);
enemy.damage(power);
}
}
在我将它放入函数之前工作正常
separate();
function separate():void {
for each(var enemy in RhythmGame.npcs) {
if(this.hitTestObject(enemy)) {
enemy.step(distance, axis, origin);
enemy.damage(power);
}
}
}
然后我得到错误
TypeError:错误 #1006:hitTestObject 不是函数。
我发现this 在函数中指的是[object global],而不是它应该在的类实例中。为什么会发生这种情况?关于作用域的工作原理,我在这里有什么不明白的地方?
【问题讨论】:
-
诊断它:trace(this); trace(typeof(this)); trace(getQualifiedClassName(this)); trace(this is DisplayObject); 对于这两种情况并进行比较(并更新您的问题)。
-
好电话。它确实忘记了
this是什么。 -
你是否在另一个函数中定义了这个函数?
-
匿名(或内联)函数始终在应用程序的全局范围内。定义的函数将在声明它们的对象的范围内。尝试指定“私人功能”或“公共功能”。这是一个很好的解释:stackoverflow.com/questions/33200045/…
-
为什么要在
if(this.hitTestObject(enemy))中使用“this”?主类代码不应该处理英雄对敌人实例的命中检测吗?这样您就可以在函数中使用您的实际实例名称(现在位于主代码中)。
标签: actionscript-3 scope actionscript this hittest