Skip to content

Handling collisions in your game

大多数游戏需要检测和处理物体之间的碰撞。检测和处理碰撞可以使物体停在平台上,并检测子弹与玩家或子弹与其他物体之间的碰撞。

GDevelop 提供了几种不同的处理碰撞的方式。您可以使用事件编辑器中的条件和动作来检测碰撞,也可以使用对象行为。

将物体设置为实体:使用“分离对象”动作(适用于俯视游戏、RPG…)

图片

您可以使用“分离对象”动作手动移动物体。该“分离对象”动作还可以使用“力量”移动物体或设置物体的位置。

分离对象”动作接受两个对象名称作为参数。

  • 第一个对象名称是_移动对象_(玩家、敌人等)。
  • 第二个对象名称是一个_实体对象(或一组实体对象)_。例如,这些对象可以是墙。

该动作然后会遍历所有给定的对象。它将确保如果第一种对象正在与第二种对象发生碰撞,该对象将被移开。这是使用一种称为_SAT 算法_的算法来实现的。

图片

此动作将在每一帧中被启动。在没有条件的事件中,该动作已经在进行碰撞检查。避免多次启动此动作。这样做可能会降低游戏性能。

检测碰撞

使用“分离对象”是确保物体不能移动到其他实体物体中的一种好方法。此动作检查对象之间的碰撞。例如,如果游戏对象“玩家”正在触及墙壁,那么当与名为“碰撞”的条件一起使用时,此动作将触发对玩家的伤害。

顺序很重要。

  • 运行名为“碰撞”的条件。
  • 添加适当的动作。
  • 添加“分离对象”动作。

运行“分离对象”动作后,对象将被移动。对象之间的碰撞将不再能够被检查。

您可以在示例中找到这些条件和动作的用法:

提示

查看实际效果! 🎮

在线打开此示例:Bomb the Crate Example

[

Platformer 游戏:使用平台角色和平台行为

如果您正在制作平台游戏,使用“平台角色”行为是一个好主意。这是一个高度可定制的现成平台游戏引擎。 “平台角色”行为处理与平台的重力和碰撞。

在平台游戏中检测碰撞?

在具有“平台角色”行为的平台游戏中,与平台的碰撞是由系统处理的。

  • 您仍然可以使用碰撞条件来检查对象与其他对象(例如,玩家和敌人之间)之间的碰撞并做出相应反应。
  • 您可以使用“在地板上”条件来检查对象是否在平台上。

图片

提示

查看实际效果! 🎮

在线打开此示例:Platformer Example

具有物理效果的游戏?使用物理行为

使用物理行为可以在游戏中实现逼真的物理行为。将“物理”行为附加到您的对象上。那些对象将行为像是活在游戏世界中一样。一些真实世界行为的例子包括弹跳的球,下落,跳跃等。

配置游戏墙壁或不应移动的实体对象,以使用“静态”行为。

使用物理行为检测碰撞

当您使用物理行为时,_不要使用_位于所有对象功能类别中的碰撞条件。 物理引擎将自行管理所有碰撞。 碰撞条件不会正确检测对象何时接触。

相反,使用物理行为类别中的碰撞条件,该条件正确使用物理引擎来模拟碰撞。

图片

此外,具有物理行为的对象会忽略对象的碰撞蒙版,并且而是使用对象本身的行为选项卡上的碰撞信息。这默认为一个与对象完整尺寸相同的框。在大多数情况下,将需要从行为选项卡内更改这些设置。图片

提示

查看实际效果! 🎮

在线打开此示例:Physics Example

图片