【问题标题】:Detect collision direction in Phaser3在 Phaser3 中检测碰撞方向
【发布时间】:2020-02-29 14:02:09
【问题描述】:

我正在尝试使用 Phaser3 库创建类似“炸弹人”的游戏。 为此,我想定义 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
);

如果有任何帮助,我将不胜感激。这真让我抓狂。也许有更好的方法来做到这一点,我错过了一些东西......

提前致谢。

【问题讨论】:

  • 不确定,如果它是相关的,但你在这里有一个错字:else if(player.body.touching.rigt)。应该是else if(player.body.touching.right)。你有一个回购或在线代码游乐场的链接吗?我去看看。
  • 确实是错字。帖子已被编辑。感谢您愿意帮助曼努埃尔!你可以在这里找到 git repo:github.com/tamir-nakar/bomber_man。当你运行它时,你会发现它很难移动。知道碰撞方向将帮助我修复它,但也许有一种本机方法(而不是发明轮子)。任何形式的帮助将不胜感激。谢谢!
  • 也许您可以通过在gamedev.stackexchange.com 中发布您的问题来获得更多帮助
  • @TamirNakar 你的仓库过时了吗?我试图找到player.js 文件,但找不到!
  • 您会在“实体”目录下找到它

标签: phaser-framework


【解决方案1】:

所以我终于想通了。

主要问题是我定义玩家移动的方式。应该是

  if (this.keyboard.right.isDown) {
    this.body.setVelocityX(this.speed);
  }

而不是

  if (this.keyboard.right.isDown) {
    this.x += this.speed;
  }

防止碰撞检测的第二种方法和 body.touchingbody.blocked 属性被更新。

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

谢谢大家!

【讨论】:

  • 澄清一下:当使用top方式时,你根本不用弄乱body属性。
猜你喜欢
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多