【问题标题】:GameMaker Studio Physics Object Precise CollisionsGameMaker Studio 物理对象精确碰撞
【发布时间】:2016-10-02 20:29:52
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以编写一个函数来查找岛屿的轮廓。找到一个透明像素旁边的像素,然后继续找到当前像素旁边的像素,至少有一个透明邻居(总是在理智的方向上搜索,例如从顺时针上方),直到你返回到第一个像素,然后你需要三角化并分组为凸形。这将有助于en.wikipedia.org/wiki/Polygon_triangulation。只需完成一次,您就可以在生产环境中手动完成。
  • 所以您建议将每个对象拆分为多个凸对象?我想我可以做到,尽管将它们无缝地重新组合在一起可能会很麻烦。

标签: physics game-physics game-maker collision


【解决方案1】:

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

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

在精灵编辑器中,单击“修改蒙版”。应该有一个可以勾选的“精确碰撞检查”框。这意味着您的精灵将逐个像素地检查碰撞。您可以猜到,这对性能不友好,但会完全按照您的意愿行事。

2 - 我推荐的那个。

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

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

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

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

【讨论】:

  • 1 - 这又回到了我最初的问题,有没有办法对使用物理的对象进行精确的碰撞检查?似乎对于物理对象,唯一的选择是使用碰撞形状编辑器。 2- 这个一般的想法(从多个简单的碰撞形状创建一个复杂的碰撞形状)是迄今为止最常见的建议,并且可能是前进的最佳方式。我会试一试,但我仍然想知道原始问题的答案。
  • 是的,进入精灵编辑器,点击“修改蒙版”,然后有一个框你可以打勾,上面写着“精确碰撞检查”
  • 是的,这就是如何为普通对象启用精确的碰撞检查。我要问的是选中“使用物理”选项的对象的精确碰撞。选中该选项会自动将碰撞形状添加到与精灵碰撞蒙版分开的对象。正是这些新碰撞形状的局限性导致了问题(请参阅 Duphus 的答案以获取屏幕截图)。我已经尝试对精灵启用精确的碰撞检查,但是当游戏运行时,发生的碰撞仍然基于物理形状,而不是精灵蒙版。
  • 哦,对不起,我没听懂。我的道歉
  • 我最终采纳了您的第二个建议。我创建了一个不可见的六边形对象(具有物理特性,密度为 0)并用它来平铺我的不同岛屿。然后我与六边形进行物理碰撞。它并不完美,但似乎可以正常工作。因为它们太多了,我将六边形上的物理设置为开始休眠,这样可以防止它们影响游戏速度。感谢您的想法!
【解决方案2】:

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

您选择“形状”选项的位置为红色。

选择该选项后,您只需单击并拖动即可将顶点添加/编辑到多边形。请记住,它必须是凸多边形,GameMaker 对此非常严格。您也可以通过右键单击顶点来删除它们。

【讨论】:

  • 我编辑了我的问题以澄清。我遇到的问题是碰撞形状编辑器无法使形状足够复杂以适合我的岛屿(请参见上面的新图片)。尤其是凸形限制是一个问题。这就是为什么我问是否可以进行精确碰撞。
  • 哇。是的,我明白你的意思。也许把它分解成更小的形状?就像不是有一个大的碰撞盒,而是有一堆较小的碰撞盒。例如,对于顶部的岛屿,不要使用复杂的多边形,而是使用两个更简单的多边形。
猜你喜欢
  • 2015-03-25
  • 1970-01-01
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多