物理对象

当您第一次创建新的对象资源时,会有一个标记为使用物理的复选框,默认情况下该复选框处于选中状态。选择此选项将从根本上改变放置在房间中的对象的行为,因为这将打开对象的物理属性,并意味着其"传统"移动和碰撞功能不再有效(但仅当放置该对象的房间也被标记为物理房间时才有效。请参阅房间编辑器属性)部分。选中此选项后,对象资源窗口将为物理编辑器打开一个新的链接窗口:

Object Editor Physics在开始编辑物理行为的值之前,最好先设置碰撞形状。在"普通"碰撞系统中,你的碰撞是基于指定给物体的精灵遮罩,但在启用物理的情况下,情况就不再是这样了。我们需要为对象自己指定一个碰撞形状(这被恰当地称为装置,有关详细信息,请参阅物理函数),它可以是您自己定义的圆形、矩形或多边形。点击修改碰撞形状按钮将打开以下链接窗口以编辑该形状:

Object Editor Physics Shape Editor这看起来类似于路径编辑器,其功能也大体相同。但是,根据您选择的遮罩,它可能会有更多限制:

Object Editor Physics Shape Type设置好形状后,您需要定义对象要具有的基本物理属性。可以通过更改以下参数来配置这些参数:

 

密度密度

某物的密度被定义为其单位体积的质量,这基本上意味着它在世界上占据的空间中塞入了多少质量。所以,气球的密度会很低,因为它的质量很小,占据了很大的空间,而铅条的密度会很高,因为它的质量很大,但占用的空间很小。在 GameMaker 2D 物理世界中,系统会根据您为密度输入的值和您为设备定义的形状的表面积自动计算质量。这将直接影响灯具的惯性大小以及它对碰撞和力的反应方式,因此,如果您以高密度制作一个小形状,它将具有非常大的质量 (如铅条),但如果您以低密度定义一个大形状,它将具有小得多的质量 (如气球)。

请注意,将密度设置为0将创建本质上密度无限且不受外力或碰撞影响的"静态"灯具,除非在特殊情况下将实例创建为 运动学 (有关更多详细信息,请参见下文)。

 

复原复原

在物理学中,复原的定义是"物体或系统在发生弹性变形后恢复到原来的状态",但由于 GameMaker 中的装置实际上是刚体,不能变形,所以复原实际上是一种表示装置有多"弹性"的方式。此设置将影响对象与其他对象碰撞时的反弹程度,并共同依赖于作用在实例上的其他力,如重力和摩擦力。

 

碰撞组碰撞组

所有物理对象的默认碰撞组为1,这是一个碰撞组。位于同一碰撞组(即,三个对象都在组1中)中的对象的实例始终相互碰撞,即使它们没有碰撞事件也是如此。碰撞组为0的物理对象将正常交互,这意味着它们必须有碰撞事件才能交互(简单的注释就可以触发碰撞),否则不会注册碰撞。具有碰撞组的对象实例(即分配了四个对象)从不碰撞,它们之间的任何碰撞事件都将被忽略。

注意:使用碰撞组显著增加了物理系统所需的处理,应该仅在绝对必要时使用,并且您应该拥有尽可能少的组。

 

线性阻尼线性阻尼

阻尼用于降低实例在房间中移动时的物理世界速度。从原理上讲,这类似于在真实世界中与表面发生摩擦,但在 GameMaker 物理系统中,摩擦实际上仅在具有碰撞形状(夹具)的两个实例接触时应用。因此,你可以认为线性阻尼更像是"空气摩擦",它会随着时间的推移逐渐减慢任何移动的物理实例,而不需要与任何其他物理实例接触。

 

角度阻尼角度阻尼

如果你想一想"现实世界"中的任何旋转物体,除非它有马达或在太空中,否则它的自转速度会随着时间的推移而减慢,因为外力的影响(如机械摩擦或与周围空气或水的摩擦)。我们可以使用角度阻尼选项来模拟这种效果,并降低物理世界中实例的旋转速度,因为如果没有它,任何旋转的实例都将继续无限旋转。

 

摩擦摩擦

摩擦力是抵抗材料元素相互滑动的相对运动的力,在 GameMaker 物理学世界中,摩擦力解释为两个实例与物理夹具碰撞导致的动量损失。因此,当两个实例发生碰撞时,它们的运动受该值的影响,高摩擦力比低摩擦力造成更大的动量损失。

 

 

最后,有三个额外的选项可以标记为打开或关闭您的装置,传感器开始唤醒运动学。这些标志中的每一个都将以以下方式更改您的装置的行为:

 

传感器传感器

通过选中此框,您将告诉 GameMaker 基本上"忽略"对象的物理属性,但仍会返回与其周围对象的碰撞事件。通过这种方式,您可以让一个实例在房间中不存在,但它可以对另一个实例(如玩家)的碰撞做出反应,并依次执行一些操作,如打开一扇门,或在房间中的另一个地方触发某种操作。

注意:传感器夹具将在碰撞首次发生时触发碰撞事件,这意味着当两个物体继续重叠时,您不会获得碰撞事件流(这是传统上会发生的)。如果它们停止重叠并随后重叠,则会触发另一个碰撞事件。

 

开始唤醒开始唤醒

默认情况下,该选项处于选中状态,表示该设备在放置到的房间开始时的初始"状态"。通常情况下,您希望它从一开始就处于唤醒状态(即:参与物理世界),但有时由于物理模拟的突然启动,这可能会导致某些不稳定和不必要的效果。要避免这些效果,可以取消选中此标志,实例将在设备处于睡眠状态时创建,并且它不会参与物理模拟,除非有东西作用于它。

注意 当物理实例不再处于任何移动状态或不再与任何其他物理实例交互时,它们将被标记为\"休眠\",而\"休眠\"实例只是当前未被物理模拟完全处理的实例(这节省了CPU开销)。

 

运动学运动学

在基于物理的游戏中会有某些情况,你想要四处移动,但不希望受到重力等力的作用,也不希望受到与动态对象碰撞产生的力(例如,想想平台游戏中的移动平台)。对于这样的物体,只需将灯具的密度设置为0,就意味着物理学将假设物体是静态的,它根本不会对任何东西做出反应。但是,选中此框将使静态对象处于运动状态,尽管它仍然不会受到碰撞和重力等力的影响,但现在可以使用适当的变量四处移动或旋转(例如,请参见 phy_position_xphy_position_y)。