Phaser-如何使用Phaser.js正确实现Arcade物理碰撞

Phaser - How to properly implement Arcade Physics Collisions with Phaser.js

本文关键字:Arcade 实现 碰撞 何使用 Phaser js Phaser-      更新时间:2023-09-26

我在网上浏览了一些教程,并查看了文档,但这似乎让我更加困惑。

问题:

所有精灵的物理都在这个代码中初始化:

// Store all Sprites in an Array for easy access
var x64_guys = [Player, Dave, EvilDave];
// Sprite physics properties. Give the little guys some life.
hal.physics.arcade.enable(x64_guys, Phaser.Physics.ARCADE);
for(var j=0; j<x64_guys.length;j++){
    x64_guys[j].body.collideWorldBounds = true;
    x64_guys[j].body.bounce.x = true;
    x64_guys[j].body.bounce.y = true;
}

其中hal等于new Phaser.Game(window.innerWidth, window.innerHeight, Phaser.AUTO, "stage", { preload: preload, create: create, update: update });

现在我假设这可以很好地初始化这样的物理?

如果是这样的话,那么我对如何检测PlayerEvilDave碰撞以及在碰撞时启动功能(例如Player死亡或EvilDave受伤)感到相当困惑。(字符为64x64像素)

如果有人能帮助我,我将不胜感激。

是精灵的PlayerEvilDave实例吗?你没有显示代码,所以很难确定。

启用物理学的呼吁应该是这样的:

hal.physics.arcade.enable(x64_guys);

尽管我会放弃使用"hal"的做法,而是使用"this"。你不需要常数作为第二个参数,因为你无论如何都要在街机物理管理器上启用直接。

以上所有代码都发生在create函数中吗?如果不是,应该是。

这也是错误的:body.bounce.x = true;反弹是一个Phaser.Point对象,而不是布尔值,因此它希望为其指定一个值。如果您想启用100%全反射反弹,请将其设置为1:body.bounce.x = 1;

要检查PlayerEvilDave之间的冲突,您需要将其添加到update函数中:

function update() {
    // object1, object2, collideCallback, processCallback, callbackContext
    game.physics.arcade.collide(Player, EvilDave, collisionHandler, null, this);
}
function collisionHandler (obj1, obj2) {
    //  The two sprites are colliding
    game.stage.backgroundColor = '#992d2d';
}

您可以在网站上的"精灵与精灵"示例中看到这方面的完整代码。值得仔细研究一下。