2

我正在使用 Matter.js 物理引擎使用 Phaser 3 创建 HTML5 游戏。游戏同时在屏幕上显示多个对象,包括:

如果重要,MatterJS.Body 对象是使用生成的fromVertices()(此处的文档:https ://photonstorm.github.io/phaser3-docs/Phaser.Physics.Matter.Factory.html#fromVertices__anchor )

我希望生成一个Phaser.Physics.Matter.Image具有随机起始位置的新对象,但是,该位置不能与屏幕上已经存在的任何游戏对象重叠。

我知道如何为对象的位置生成随机坐标。我的问题是,如何检查现有对象是否不包含此坐标?

我可以使用 获取所有现有游戏对象的列表this.matter.world.localWorld.bodies),所以我尝试的是:

  1. 生成随机xy坐标。
  2. 遍历this.matter.world.localWorld.bodies, 并为每个游戏对象(我们称之为gameObject):
  3. 调用getBounds().contains(x, y)以检查边界是否包含坐标。

当我只有图像和精灵时,这实际上有效,但是,我也有没有getBounds()方法的 MatterJS.Body 对象。这是我的主要问题。编辑:它们确实有一个bounds属性,但它只是标记为 min 和 max 的两个坐标,并且没有contains()方法。AABB 边界检查不足以实现我的目标;我需要更精确的东西。

注意:我还考虑过简单地将对象放在屏幕上并监听碰撞事件。但是,看起来碰撞事件仅在碰撞由运动中的对象触发时触发,理想情况下,如果它位于某物之上,我根本不想渲染它。

最后说明:我愿意创建某种形状或游戏对象,而不是使用 x 和 y 坐标,如果这意味着更简单的方法来做我想做的事情。

4

0 回答 0