与Phaser Arcade物理引擎的碰撞

时间:2017-05-02 11:50:44

标签: javascript game-physics phaser-framework

我正在尝试与Phaser Arcade Physics进行游戏,您可以控制精灵,并尝试使用箭头键来避免对象。但是,我遇到了在这些对象和精灵之间发生碰撞的问题。

我的代码: https://jsfiddle.net/o445dt44/

具体是在JSFiddle的第69行,我希望你看看。

//game.physics.arcade.collide(sprite, enemy, enemy2, enemy3);

这通常应该完成碰撞的工作,但事实并非如此。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

未来的FYI,您的JSFiddle缺少对Phaser的外部引用。例如,您可以在https://cdnjs.cloudflare.com/ajax/libs/phaser/2.6.2/phaser.min.js包含CDN版本。

其次,您实际上没有正确使用碰撞功能。每the documentation它实际上是collide(object1, object2, collideCallback, processCallback, callbackContext)

我创建了a forked version,可以正确设置碰撞。特别是进行了以下更改:

敌人需要设置在与sprite相同的级别。

var enemy;
var enemy2;
var enemy3;

接下来,在您的更新中,考虑到如何设置内容,您需要单独设置所有对象之间的冲突:

game.physics.arcade.collide(sprite, enemy);
game.physics.arcade.collide(sprite, enemy2);
game.physics.arcade.collide(sprite, enemy3);
game.physics.arcade.collide(enemy, enemy2);
game.physics.arcade.collide(enemy, enemy3);
game.physics.arcade.collide(enemy2, enemy3);

替代方案,更好的方法是将敌人设置为一个群组,然后让你的精灵与群组发生冲突。

有一个official Sprite Vs Group example可以解决这个问题。如果你想让敌人发生碰撞,你可以设置该组与自身发生碰撞。

game.physics.arcade.collide(enemies, enemies);