在循环中检测物体碰撞

时间:2019-01-08 13:52:18

标签: javascript phaser-framework

有没有一种方法可以检测与使用while循环创建的对象的碰撞?

我正在使用while循环在屏幕上重复图像:

this.spikeX = 0;
while (this.spikeX < this.world._width) {
    this.spike = this.add.sprite(this.spikeX, 0, 'spikes');
    this.physics.arcade.enable(this.spike);
    this.gameObjects.push(this.spike);
    this.spikeX += (this.spike.width * 0.75);
}

我有碰撞功能:

collision: function(obj1, obj2) {
    if (obj1.body.x < obj2.body.x + obj2.body.width &&
        obj1.body.x + obj1.body.width > obj2.body.x &&
        obj1.body.y < obj2.body.y + obj2.body.height &&
        obj1.body.height + obj1.body.y > obj2.body.y) {
            return true;
    }
},

if(this.collision(this.player, this.spike)) {
    console.log('spike');
}

当我在update函数中调用此函数时,它不会检测到冲突,但是仅当我在while循环外创建一个尖峰时才起作用。

1 个答案:

答案 0 :(得分:2)

这可能是因为您只有一个this.spike。 如果您有多个子画面,则需要将它们归为一组,并按以下方式创建它们:

spike_group = game.add.group();
spike = spikes.create(spikeX, 0, 'spikes');

然后,您检查钉队和一个球员中每个钉刺的碰撞情况。

而且,为什么不像这样使用街机碰撞:

// inside update function
physics.arcade.collide(player, spike_group , overlap_spikes, this);

// out of update function
function overlap_spikes()
{
    console.log("touch spike");
}

注意:这些示例未使用'this'关键字。