大家好我只是在课堂上尝试执行一个方法而且它不起作用。 我得到了一个" Uncaught TypeError:undefined不是一个函数"错误。
我称其他功能为好,而且运作良好,所以我不明白。我试图更改名称,没有任何内容。
我认为我使用Phaser存在问题,但我不知道......
Bomb.prototype.collisionBlocs = function() {
if (!this.hasBounced) {
this.bounce();
this.hasBounced = true;
}
}
Bomb.prototype.bounce = function() {
if (this.direction == 'UP') {
this.direction = 'DOWN';
}
else if (this.direction == 'RIGHT') {
this.direction = 'LEFT';
}
else if (this.direction == 'DOWN') {
this.direction = 'UP';
}
else if (this.direction == 'LEFT') {
this.direction = 'RIGHT';
}
}
答案 0 :(得分:5)
“事实上,
collisionBlocs()
是来自移相器碰撞事件的回调函数:game.physics.arcade.collide(this.sprite, blocs, this.collisionBlocs);
也许这就是问题”
将成为问题。在JS中,函数中this
的值取决于函数的调用方式。您将对collisionBlocs
的引用传递给.collide()
方法,当它调用它时,它将无法正确设置this
,因此this.bounce
将为undefined
。
您需要强制this
的值正确。最简单的方法是使用.bind()
:
game.physics.arcade.collide(this.sprite, blocs, this.collisionBlocs.bind(this));
旧浏览器不支持.bind()
method(IE <= 8),但如果您需要支持这些浏览器,则可以使用a polyfill。
MDN有关于how this
works in JavaScript的更多信息。
答案 1 :(得分:2)
不是绑定this
,而是使用callbackContext
为您提供的collide
参数会更容易。它是专门为此问题添加的。这是方法签名:
collide: function (object1, object2, collideCallback, processCallback, callbackContext)
您没有使用processCallback
,因此您可以为此传递null
,但您确实需要上下文。这是调用回调的上下文(尝试this
开始)。