GameMaker Studio 物理对象精确碰撞

GameMaker Studio Physics Object Precise Collisions

是否可以让 GameMaker Studio 中的物理对象使用精确碰撞?

这是我的问题的一些背景信息。我正在制作一款海盗游戏,玩家可以在有许多岛屿的大洋中航行。我一直在使用物理引擎来控制船的运动,而且效果很好。然而,当试图在船舶和各个岛屿之间引入碰撞时,问题就出现了。据我所知,底层物理装置只能形成相当简单的形状。具体来说,碰撞形状编辑器被限制为 12 个点,并且只有凸形。这是一个问题,因为我的许多岛屿都是相对复杂的非凸形状,不一定是单件。能够将岛屿精灵用作精确的碰撞掩码会很好,因为对于非基于物理的对象来说是可能的。

有没有办法做到这一点,或者我缺少的可能的解决方法?这是我的一个岛屿的例子:

通过在定义碰撞形状时使用 Shape 选项,您可以将任何类型的凸多边形作为碰撞形状。示例:

你选择形状选项的地方是红色的。

选择 select 选项后,您只需单击并拖动到 add/edit 多边形的一个顶点。请记住,它必须是凸多边形,GameMaker 对此非常严格。您也可以通过右键单击顶点来删除它们。

我可以看到您的问题的两个解决方案。

1 - 最简单,但性能不友好。

在精灵编辑器中,点击"Modify mask"。应该有一个可以勾选的 "precise collision checking" 框。这意味着您的精灵将逐个像素地检查碰撞。您可以猜到,这对性能不友好,但会完全按照您的要求进行。

2 - 我会推荐的那个。

你可以做的就是通过背景或专用对象绘制岛屿精灵,然后创建一些不可见的简单形状对象(矩形、圆形和菱形),并将它们放在上面你在房间编辑器中的岛屿。 (别忘了你可以拉伸它们)。

这些简单形状的对象将用于检查碰撞。 我在我的一款游戏中使用这种技术为复杂形状的云制作了一个碰撞箱,所以我知道它有效。

我相信你给我们展示的这个岛可以很好地覆盖几个椭圆和一个长方形。

奖励:以图形方式执行此操作后,您可以将形状的创建代码从房间创建事件复制到岛屿创建事件,以重复多个相同的岛屿。只是不要忘记 position/angle 偏移量 !