在 Phaser3 中检测碰撞方向

Detect collision direction in Phaser3

我正在尝试使用 Phaser3 库创建一个 'Bomber-man' 类游戏。 为此,我想定义 playerbricks 之间的碰撞关系, 更重要的是 - 检测相对于玩家的碰撞方向

我注意到 touchingblocked 等正文属性,但它们始终设置为 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.touchingbody.blocked属性。

此外,我发现当谈到自上而下的平铺游戏时,使用 tile-map 功能构建游戏真的更容易。 官方示例可以在这里找到: https://phaser.io/examples/v3/search?search=map 这是一个教程,介绍如何使用名为 'Tiled' 的轻量级软件制作平铺地图 https://www.youtube.com/watch?v=2_x1dOvgF1E

谢谢大家!