Phaser - 如何使用 Phaser.js 正确实施 Arcade Physics Collisions
Phaser - How to properly implement Arcade Physics Collisions with Phaser.js
我在网上浏览了一些教程并查看了文档,但这似乎让我更加困惑。
问题:
所有精灵都在这段代码中初始化了物理:
// 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 });
现在我假设这样可以很好地初始化物理?
如果是这样,那么我很困惑如何检测 Player
和 EvilDave
碰撞,以及如何启动碰撞功能(例如 Player
死亡或 EvilDave
受到伤害)。 (字符为 64x64 像素)
如果有人能帮助我,我将不胜感激。
Player
、EvilDave
等 实例 是 Sprites 吗?您没有显示代码,所以很难确定。
启用物理的调用应该是这样的:
hal.physics.arcade.enable(x64_guys);
虽然我会完全放弃使用 'hal' 的做法,而是使用 'this'。您不需要将常量作为第二个参数,因为无论如何您都直接在 Arcade Physics 管理器上启用。
以上代码是否都发生在创建函数中?如果不是,应该是。
这也是错误的:body.bounce.x = true;
Bounce 是一个 Phaser.Point 对象,而不是布尔值,因此它需要为其分配一个值。如果要启用 100% 全反射弹跳,则将其设置为 1:body.bounce.x = 1;
要检查 Player
和 EvilDave
之间的碰撞,您需要将此添加到 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';
}
您可以在网站上的 Sprite 与 Sprite 示例中查看完整代码。非常值得仔细查看。
我在网上浏览了一些教程并查看了文档,但这似乎让我更加困惑。
问题:
所有精灵都在这段代码中初始化了物理:
// 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 });
现在我假设这样可以很好地初始化物理?
如果是这样,那么我很困惑如何检测 Player
和 EvilDave
碰撞,以及如何启动碰撞功能(例如 Player
死亡或 EvilDave
受到伤害)。 (字符为 64x64 像素)
如果有人能帮助我,我将不胜感激。
Player
、EvilDave
等 实例 是 Sprites 吗?您没有显示代码,所以很难确定。
启用物理的调用应该是这样的:
hal.physics.arcade.enable(x64_guys);
虽然我会完全放弃使用 'hal' 的做法,而是使用 'this'。您不需要将常量作为第二个参数,因为无论如何您都直接在 Arcade Physics 管理器上启用。
以上代码是否都发生在创建函数中?如果不是,应该是。
这也是错误的:body.bounce.x = true;
Bounce 是一个 Phaser.Point 对象,而不是布尔值,因此它需要为其分配一个值。如果要启用 100% 全反射弹跳,则将其设置为 1:body.bounce.x = 1;
要检查 Player
和 EvilDave
之间的碰撞,您需要将此添加到 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';
}
您可以在网站上的 Sprite 与 Sprite 示例中查看完整代码。非常值得仔细查看。