在 Phaser3 中检测碰撞方向
Detect collision direction in Phaser3
我正在尝试使用 Phaser3 库创建一个 'Bomber-man' 类游戏。
为此,我想定义 player 和 bricks 之间的碰撞关系,
更重要的是 - 检测相对于玩家的碰撞方向。
我注意到 touching 或 blocked 等正文属性,但它们始终设置为 false。 (请看下文)
//scene.js
// bricks static group
this.scene.physics.add.staticGroup({ immovable: true });
// player defined in external file (as sprite)
this.player = new Player(this, 90, 90)
// player.js
// ...
this.physics.add.collider(
this,
scene.bricks,
function(player, brick) {
if(player.body.touching.left) { //ALWAYS FALSE!!!
this.isBlockedFromLeft = true;
}, else if(player.body.touching.right) {
this.isBlockedFromRight = true; // ALWAYS FALSE!!!
}
},
null,
this
);
如果有任何帮助,我将不胜感激。这真让我抓狂。也许有更好的方法,但我遗漏了一些东西...
提前致谢。
所以我终于想通了。
主要问题是我定义玩家移动的方式。应该是
if (this.keyboard.right.isDown) {
this.body.setVelocityX(this.speed);
}
而不是
if (this.keyboard.right.isDown) {
this.x += this.speed;
}
第二种方法防止碰撞检测和更新body.touching和body.blocked属性。
此外,我发现当谈到自上而下的平铺游戏时,使用 tile-map 功能构建游戏真的更容易。
官方示例可以在这里找到:
https://phaser.io/examples/v3/search?search=map
这是一个教程,介绍如何使用名为 'Tiled' 的轻量级软件制作平铺地图
https://www.youtube.com/watch?v=2_x1dOvgF1E
谢谢大家!
我正在尝试使用 Phaser3 库创建一个 'Bomber-man' 类游戏。 为此,我想定义 player 和 bricks 之间的碰撞关系, 更重要的是 - 检测相对于玩家的碰撞方向。
我注意到 touching 或 blocked 等正文属性,但它们始终设置为 false。 (请看下文)
//scene.js
// bricks static group
this.scene.physics.add.staticGroup({ immovable: true });
// player defined in external file (as sprite)
this.player = new Player(this, 90, 90)
// player.js
// ...
this.physics.add.collider(
this,
scene.bricks,
function(player, brick) {
if(player.body.touching.left) { //ALWAYS FALSE!!!
this.isBlockedFromLeft = true;
}, else if(player.body.touching.right) {
this.isBlockedFromRight = true; // ALWAYS FALSE!!!
}
},
null,
this
);
如果有任何帮助,我将不胜感激。这真让我抓狂。也许有更好的方法,但我遗漏了一些东西...
提前致谢。
所以我终于想通了。
主要问题是我定义玩家移动的方式。应该是
if (this.keyboard.right.isDown) {
this.body.setVelocityX(this.speed);
}
而不是
if (this.keyboard.right.isDown) {
this.x += this.speed;
}
第二种方法防止碰撞检测和更新body.touching和body.blocked属性。
此外,我发现当谈到自上而下的平铺游戏时,使用 tile-map 功能构建游戏真的更容易。 官方示例可以在这里找到: https://phaser.io/examples/v3/search?search=map 这是一个教程,介绍如何使用名为 'Tiled' 的轻量级软件制作平铺地图 https://www.youtube.com/watch?v=2_x1dOvgF1E
谢谢大家!