Skip to content

物理引擎

您可以添加物理行为来使物体按照物理定律逼真地移动。这适用于各种游戏:像"愤怒的小鸟"、"剪绳子"、自行车模拟、台球游戏等许多游戏都使用物理引擎来动画化物体。

提示

该行为基于_Box2D_,这是一个优秀的完整的刚体物理仿真库。

该行为由三个主要概念组成:持有物体的世界(这就是场景)、物体本身(这些是对象)以及可选的连接物(连接物体的关节)。所有这些都在本文中有解释。

警告

限制:如上所述,该扩展程序模拟刚体物理,这意味着物体不能被变形。不支持软体、衣物和流体等事物。

物理引擎示意图

世界

世界是模拟运行的地方,物体和连接物被附加到世界上与其他实体进行交互。这对应于GDevelop中的场景。和GDevelop场景大小一样,世界大小是无限的,所以您不必担心您的物体在哪里。一旦添加并启用了物理行为,它们将始终遵循物理定律。

世界有三个属性:

  • 重力。它由两个分量(X 和 Y)组成,类似于我们的重力,向每个物体施加一个力,将它们推向给定方向。物体还支持重力缩放因子,关于此更多内容在物体部分讨论。
  • 时间缩放。它定义了模拟将使用的时间比例。如果时间缩放为0.5,模拟将以一半的速度运行;如果时间缩放为2,模拟将快两倍。如果时间缩放为0,模拟将暂停。对于子弹时间效果非常有用!
  • 比例。GDevelop距离和大小以像素为单位定义,但物理引擎内部使用米。必须设置一个比例因子(具有两个分量,X 轴和 Y 轴上的比例)进行转换。比例数字表示多少像素等于一米;例如,比例为50表示GDevelop中的50像素距离转换为物理世界中的1米。

注意

确定世界比例的第一规则是选择它,使得您的可移动/动态物体的大小在0.1 - 10米的范围内;超出此范围,模拟将失去精度。例如,如果您的物体尺寸大约为100x100像素,那么世界比例为100将非常完美,因为它将使您的物体大小大约为1x1米。静态物体可以更长,最多可扩展到50米。

物体

物体是物理扩展的灵魂;它们定义了您的物体将如何移动、其形状将是什么样子、弹跳多少以及是否能旋转或移动。

当您向对象添加物理行为时,您可以直接从IDE设置物体配置。有许多选项可供您尝试。它们已按类别归类如下:

物体类型

GDevelop支持三种基本物体类型:

  • 动态:最常见的类型,动态物体受重力影响,可以与其他活动、静态和运动物体碰撞。您可以对其施加力和冲量,并修改其速度。几乎任何必须移动的东西都应该是动态物体。
  • 静态:静态物体不受重力影响,您无法使用力、冲量或修改其速度来移动它们。它们只能与动态物体碰撞,忽略运动学和其他静态物体。它们被用于静态世界几何,如地面、不可移动的墙壁和平台。
  • 运动学:运动学非常专业化;它们是一种静态体,因此它们不会受到重力、力或冲量的影响,但您可以通过修改其速度来移动它们。运动学只会与动态物体碰撞,但不会因此碰撞而移动。运动学物体用于模拟可移动的墙壁和平台。

以及一些与动态相关的设置:

  • 子弹:如果设置为true,则物体将使用连续碰撞检测算法,稍微降低性能但在移动非常快时会提高响应。用于正确模拟子弹或任何高速物体并减少子弹穿过薄物体的几率。
  • 固定旋转:如果设置为true,则物体将无法旋转。用于避免物体像您的玩家每次与墙壁碰撞或在下坡行走时都会旋转。
  • 可休眠:如果设置为true,引擎可以提高那些长时间没有移动的物体的性能,使它们休眠。这是一个性能设置,不应影响模拟本身。

注意

您可以使用事件条件来检查物体是否休眠。如果一个对象正在休眠,这意味着一段时间以来它一直处于平衡状态。

物体形状

物体形状选项确定物体的形状和大小。根据形状类型,您有不同的选项来设置尺寸:

  • 矩形对象上所有轴对齐的矩形。如果未设置自定义宽度和高度,则使用对象大小。

  • 圆形对象上的圆。如果未设置自定义半径,它将根据对象宽度和高度的平均值计算。如果对象是正方形,结果将是一个内接于对象边界框内部的圆。

  • 边缘对象中心的一条细线;由于此形状没有体积,所以不适合作为动态物体。它用于静态几何,如地面和平台。如果未设置自定义长度和角度,则边缘将是具有与对象宽度相等长度的水平线。

  • 多边形使用顶点配置的自定义形状。该多边形必须是凸多边形(如果未满足此条件,则形状将退回到矩形)。顶点数必须大于或等于3(否则不可能是凸多边形)且小于或等于8(每个多边形支持的最大顶点数)。 除了自定义形状类型和尺寸之外,物体形状支持两个额外选项:

  • 偏移:偏移有两个分量(X和Y),可用于将形状从对象中心移动。

  • 缩放:这将缩放形状的自定义尺寸和偏移。如果您不使用自定义尺寸,可以使用盒形状并将宽度和高度设置为等于对象的原始尺寸;不需要改变形状的缩放,因为缩放将自动完成。如果形状类型是多边形,缩放将修改顶点位置,并且缩放原点将是多边形原点。如果将多边形原点设置为“中心”并缩小形状,则顶点将缩小到/朝向对象中心。

物体设置

除了类型和形状外,物理物体还有一些额外设置,这些设置确定物体在碰撞时的行为方式,重力如何影响它们以及通过空气摩擦损失的能量。下面对每个设置进行了解释:

  • 密度:密度决定了物体的质量。一般公式为密度 = 质量/体积。在2D游戏中,这相当于密度 = 质量/面积。具有相同密度但不同面积/大小的两个物体将具有不同质量,因此在调整对象大小时必须考虑密度。

  • 摩擦:摩擦力会将接触物体上的力与其运动方向相反的方向添加到物体上。摩擦力越大,物体在接触时减速就越快。为了更好地理解,以沙子制成的平台的摩擦力接近1(非常高),而以冰制成的平台的摩擦因数接近零。当两个物体接触时,通过以下公式计算总摩擦力:摩擦力 = sqrt(物体A的摩擦 * 物体B的摩擦)

  • 弹性:弹性决定物体在每次碰撞中会保留或失去多少能量。值为零意味着碰撞将完全非弹性,且物体不会反弹。而弹性= 1意味着碰撞将完全弹性,物体每次弹跳时都会以相同的能量跳起。想象一下球从地面弹跳,并且每次都达到相同高度。大于1的弹性值是有效的,但会使物体在每次碰撞中获得能量,并且模拟可能会失控。当两个物体接触时,通过以下公式计算总弹性:弹性 = max(物体A的弹性,物体B的弹性)

  • 线性阻尼:线性阻尼始终减慢物体速度。数值越高,减慢物体速度就越快。可以将其想象为空气粘度,非常高的值甚至会使物体在液体中移动。尽管可以使用任何值,但负阻尼将使物体在每一步上获得速度,产生非物理行为。

  • 角阻尼:角阻尼类似于线性阻尼,但是它不是减慢物体的线性速度,而是减慢角速度,使物体每步旋转得更慢。尽管可以使用任何值,但负阻尼将使物体在每一步上获得角速度,产生非物理行为。

  • 重力缩放:这会乘以世界重力来确定施加到物体上的重力。请注意,这是一个数字而不是矢量;您无法改变重力的方向,只能改变大小和方向。任何数字都是有效的。例如,如果重力缩放为1,则施加的重力将是世界重力;如果为2,则该物体的重力将是原来的两倍;如果为0.5,则重力将减弱为原来的一半;如果为0,则物体不受重力影响;如果为-1,则重力将被倒置。

碰撞层和屏蔽

层和屏蔽是用于过滤对象之间碰撞的方式。

  • :物体可以属于的逻辑组。物体可以是多个层的成员。

  • 屏蔽:物体将与之发生碰撞的层列表。

物理碰撞层与用于放置对象在场景中的图层不相关。

这个系统可以让您建立各种对象之间的复杂交互。例如:想象一下您正在开发一个僵尸游戏,您希望玩家与地面发生碰撞,并且希望僵尸与玩家和地面发生碰撞,但您不希望僵尸之间发生碰撞。在这种情况下,您可以使用碰撞过滤器层和屏蔽。

有一个记住的简单规则:两个物体A和B可以在任何A的层匹配B的任何屏蔽层 任何B的层匹配A的任何屏蔽层

这是上述僵尸问题的可能解决方案:

  • 地面:启用第一个层和第一个和第二个屏蔽。

  • 玩家:启用第一个层和第一个和第二个屏蔽。

  • 僵尸:启用第二个层和第一个屏蔽。

对象屏蔽
地面11, 2
玩家11, 2
僵尸21

我们可以验证这样能起作用:

  • 地面和玩家:地面层与玩家屏蔽(第一个)匹配,玩家层与地面屏蔽(第一个)匹配

  • 地面和僵尸:地面层与僵尸屏蔽(第一个)匹配,僵尸层与地面屏蔽(第二个)匹配

  • 玩家和僵尸:玩家层与僵尸屏蔽(第一个)匹配,僵尸层与玩家屏蔽(第二个)匹配

  • 僵尸和僵尸:僵尸仅启用第二层,仅启用第一个屏蔽,因此僵尸不能彼此碰撞。

请注意,您有16个层和16个屏蔽可用。在此示例中,只需要两个层和屏蔽。默认情况下,所有物理对象将使用层1和屏蔽1。

移动

设置对象后,是时候开始模拟了:重力将开始推动物体,物体将移动和碰撞,但您无法与您的游戏进行任何交互。现在是移动对象的时间,您可以使用事件来实现。以下是一些用于与对象交互并根据您想要的方式移动它们的有用操作:危险

请记住,GDevelop中的力相关操作并不适用于物理行为。要使用物理行为移动对象,请使用特定于物理行为的操作。

  • : 力改变物体的运动,并旨在用一段时间产生可观的效果。当你对物体施加力时,物体获得的速度取决于力的大小和物体的质量。如果对两个物体施加相同的力,则重物体移动得比轻物体慢。
  • 扭矩: 与力类似,但是用于旋转。扭矩会在物体上产生角加速度,使其随时间快速或缓慢地旋转。
  • 冲量: 类似于力,但不依赖于时间步进,而是立即添加一定量的速度。它们旨在使用一次。一个使用场景是模拟跳跃:每次按下跳跃按钮时,向上添加一个冲量。
  • 角冲量: 与冲量类似,用于旋转。它可以立即改变物体的旋转速度。
  • 速度: 你可以直接修改物体的速度。例如,你可以使你的角色以恒定速度行走,然后在按下运动按钮时更改速度。
  • 角速度: 你也可以直接设置角速度(旋转速度)。

警告

你可以直接改变物体的位置,但是这会产生非物理行为,至少直到新位置被纠正。毕竟,在现实生活中,物体不会瞬间传送。

请注意,力和冲量需要一个施加点;这很重要,因为从物体底部推一个玻璃杯(移动玻璃杯)和从顶部边缘推一个玻璃杯(玻璃杯可能会倒下)并不相同,或者从门把手推门和从铰链推门也不同。

如果施加点与物体质心不同,则会产生某种扭矩/旋转。

请注意

你可以使用物理行为表达式MassCenterX()MassCenterY()来获取物体的质心。

使用关节来控制物体运动

关节是对物体施加额外运动规则的限制。一些关节使物体围绕固定点旋转,其他关节将两个物体固定在一起,复杂的关节模拟车辆轮胎,限制了物体之间的距离但允许它们自由旋转。

关节ID的概念很重要。当你创建一个关节时,你可以传递一个变量名;如果这样做,GDevelop将在给定的变量中存储关节的唯一标识号(ID)。使用关节ID,您可以在创建后修改它,检查其值并删除它。想象一下,你创建一个关节,将钥匙固定在绳子上,绳子连接到屋顶;如果你将关节ID保存在一个变量中,那么你可以检查物体是否与绳子碰撞,并使用保存的ID删除关节,使钥匙掉下来。

请注意

关节ID将始终是大于零的数字。

通常,你需要两个对象来定义一个关节(在上面的例子中,绳子和钥匙),但也有例外情况。

以下是所有类型关节的通用属性、条件和操作列表:

  • 关节第一个/第二个对象:条件,让你选择对象是否为关节连接的第一个或第二个对象。
  • 关节第一个/第二个锚点X/Y:表达式,获取关节连接的第一个或第二个对象的锚点位置。
  • 关节反作用力/扭矩:条件和表达式,检查关节反作用力或扭矩;这个值是衡量关节与其平衡状态有多远的一个值。如果关节反作用力太大,则意味着关节已经通过相当大的力分离出平衡位置。用于制作可破碎的关节。
  • 移除关节:动作,移除指定的关节。如果关节是齿轮关节的子对象之一,则齿轮也将被移除。如果关节连接的任一对象被删除,关节也将被删除。

有许多种类的关节,每种关节都具有独特的行为和属性;它们在下面列出。

警告

请确保在只运行一次的事件中创建关节(例如,在场景开始时)。每帧创建关节会在几秒钟内创建数百个关节,导致性能不佳、非物理行为,并可能由于内存消耗而导致崩溃。

距离关节

距离关节尝试保持两个物体保持一定距离;距离是从关节锚点计算的。物体不会始终保持给定距离,但会倾向于达到它,遵循振荡器公式。

设置:

  • 长度:目标距离,如果给出负值,创建关节时对象之间的距离将被使用。
  • 阻尼比:物体将受到的“摩擦”,低值使物体振荡更多,较高值减少振荡,但物体移动较慢。
  • 频率:物体将振荡的速度,较低的值生成软关节,更渐渐地移动到达目标距离,较高的值模拟硬关节,物体移动得很快以达到目标。

请注意

阻尼比和频率设定的低值将生成软关节,在接近目标距离之前会有许多振荡。相反,高值的设置将生成非常刚性的关节。

旋转关节

旋转关节类似于“销钉”,也被称为“铰链”,它使物体围绕一个点旋转。有两种类型的旋转关节;最终它们几乎是相同的,只有细微的区别:

  • 两个物体之间的旋转关节:它“固定”两个物体,这样它们的锚点将重叠,每个物体都将围绕其锚点旋转。想象一下,你把两张卡片固定在一起并丢掷它们,这样它们会自由移动和旋转。
  • 单个物体中的旋转关节:关节通常作用于两个物体之间;这是其中之一的例外。这种关节需要一个单独的物体和它的锚点,并在给定的固定位置固定物体。想象一下,就像将便签固定在墙上;便签可以围绕销钉旋转,但不能移动。在单对象版本的连接中,对象被添加为连接中的第二个对象。第一个对象是一个隐藏的静态物体;这允许在齿轮中使用这种类型的连接,这在齿轮连接部分有解释。

以下是特定于旋转连接的设置列表:

  • 角度限制:如果启用,旋转将在最小角度和最大角度之间受限。请注意,两个角度都是相对于第一个对象的。
  • 参考角度:考虑为零的两个对象之间的角度。它会偏移所有角度属性。如果参考角度为15度,在世界坐标中对象之间的角度为15度时,请求当前连接角度将返回0,并将最大角度设置为30时,将其设置为45(相对于第一个对象)。
  • 最小角度:两个对象之间的最小角度,相对于第一个对象。必须小于或等于最大角度。
  • 最大角度:两个对象之间的最大角度,相对于第一个对象。必须大于或等于最小角度。

提示

您可以使用具有角度限制的旋转连接来模拟关节,换句话说,模拟布娃娃!

  • 电机:如果启用,连接将向第二个对象添加扭矩,使其旋转,无需外部力,如电动机。如果启用,请记住设置电机速度和最大电机扭矩!
  • 电机速度:目标电机速度,以度每秒为单位。这是第二个对象在围绕第一个对象旋转时将尝试达到的速度。电机速度可以是正值,用于顺时针旋转对象,也可以是负值,用于逆时针旋转对象。
  • 最大电机扭矩:电机可以花费的最大扭矩必须为正值。

此外,在模拟期间,您可以访问以下值:

  • 连接角度:两个对象之间的当前角度,相对于第一个对象,并受参考角度的影响。
  • 连接速度:当前连接角速度,即第二个对象围绕第一个对象旋转时的速度。
  • 连接电机扭矩:当前电机扭矩,它可能低于最大电机扭矩,因为它是达到目标电机速度所需的扭矩。

其他旋转连接的用途可能包括:弹球撬、自上而下的门、自动旋转的桥梁机器。

棱柱连接

棱柱连接的工作原理类似于“活塞”,也称为“滑块”。它使物体在给定轴线上互相滑动。一个很好的例子是电梯;电梯沿着一个轨道在垂直轴线上移动。轨道将是第一个连接体,电梯将是第二个连接体。轴线将是朝上或朝下的角度(-90或90度)。

特定于棱柱连接的设置:

  • 轴角度:确定移动方向的角度,轴角度为0表示水平移动。该值以世界坐标给出,但轴将遵循第一个对象的方向旋转(如果您旋转电梯轨道,电梯移动角度也会旋转)。
  • 参考角度:与旋转连接一样,此角度为轴添加偏移,建立一个新的“角度零点”。如果参考角度为15,那么一个在世界坐标中的轴角度为15(相对于第一个对象的方向)将被视为0。
  • 平移限制:如果启用,第二个对象的移动将在给定的最小平移和最大平移之间受限。
  • 最小平移:第二个对象可以从第一个对象移动的最小位置。在我们的电梯示例中,最小平移将是地板。
  • 最大平移:第二个对象可以从第一个对象移动的最大位置。在我们的电梯示例中,最大平移将是屋顶。

警告

平移限制范围必须包括零点,最小平移为5,最大平移为10(范围[5, 10])将转换为范围[0, 10],以包括零点。

  • 电机:如果启用,连接将对第二个对象施加力,以达到给定的电机速度。如果启用,请记得设置电机速度和最大电机力!
  • 电机速度:电机将尝试达到的目标速度;如果为正值,则第二个对象将沿轴线方向移动,如果为负值,则向相反方向移动。
  • 最大电机力:电机可以花费的最大力量。必须为正值。

此外,在模拟期间,您可以访问以下值:

  • 连接平移:第二个对象相对于第一个对象移动的当前平移。
  • 连接速度:第二个对象沿轴线移动的当前速度,并相对于第一个对象的速度。
  • 连接电机力:电机施加给第二个对象的当前力量;此值可以低于最大电机力,因为它是达到目标电机速度所需的力量。

滑轮连接

滑轮连接是一个简单命名的简单连接。此连接使每个对象到其地面位置的距离之和保持恒定;使用其他词语来理解会更容易:它模拟了一个滑轮:)

想象一下,您有一个方块悬挂在固定点A下方3米处,一个圆形悬挂在固定点B下方2米处,两个对象都连接在同一根绳子的两端。绳子的长度是固定的,因此如果您将方块上移,现在仅悬挂在A下方1米处,圆形必须向下移动相同的距离,现在在B下方4米处,这样方块和A之间的距离加上圆形和B之间的距离始终为5米:distance(box, A) + distance(circle, B) = constant

比率:容易理解,是吗?现在疯狂的部分,此连接支持额外设置:比率。比率使绳子在一个侧面比另一个侧面更具可伸缩性。例如,可以使方块侧的1米绳子等效于圈侧的2米绳子(比率= 1/2 = 0.5)。### 关节设置

齿轮关节

这个关节非常特殊;与直接连接两个物体不同,齿轮将两个其他关节连接起来,这些子关节必须是旋转关节或移动关节。通过将两个关节通过齿轮关节连接起来,一个关节的运动会导致另一个关节移动。例如,在移动一个物体沿着移动关节的轴线会导致连接的旋转关节旋转,反之亦然。

这个关节也非常棘手!要使齿轮正常工作,每个子关节的第一个物体必须是静态的,而第二个物体必须是动态的。你可以将两个旋转关节、两个移动关节或一个旋转关节和一个移动关节连接在一起,但是始终要求每个关节的第一个物体必须是静态的!

注释

齿轮子关节的第一个物体必须是静态的;这就是为什么旋转关节的单个对象版本澄清了第一个物体是一个隐藏的静态对象。

齿轮关节设置:

  • 第一个关节:将与第二个关节连接的旋转关节或移动关节。
  • 第二个关节:将与第一个关节连接的旋转关节或移动关节。
  • 比率:与滑轮关节类似,齿轮支持“比率”,工作方式类似:如果你将两个旋转关节连接起来,比率为0.33,那么第一个旋转关节转动一圈等于第二个旋转关节转动三圈。但是与滑轮关节比率有所不同的地方在于:齿轮的比率可以是负值,允许在一个关节中的正运动产生另一个关节中的负运动。例如,将两个旋转关节连接在一起,比率为-1,则一个旋转关节的顺时针旋转将导致另一个逆时针旋转,就像齿轮一样。

警告

齿轮存在的必要条件是存在这两个子关节。如果其中任何一个关节被删除,齿轮也将被自动删除。

鼠标关节

这个关节并不一定与鼠标有关,但是非常常见。这个关节将物体移动到目标位置;如果你连续更新目标位置以使物体朝向鼠标或触摸位置,你可以拖动物体。

请注意,这个关节与其他关节不同,因为它是一个需要单个物体的关节:将要朝着目标位置移动的物体。

鼠标关节设置:

  • 物体:要围绕目标位置移动的对象。
  • 目标:物体将尝试到达的目标点。在创建关节时可以随意更新它。
  • 最大力:关节可以施加在物体上以达到目标位置的最大力;力越大,物体移动得越快。必须为正值。
  • 频率:工作方式类似于距离关节频率,决定物体围绕目标位置摆动的速度。
  • 阻尼比:工作方式类似于距离关节阻尼比,随着时间减缓物体运动。

注意

鼠标关节不限于仅与鼠标一起使用,而是接受任何世界点作为目标。这意味着你可以将其用于将一个物体移向另一个物体或触摸屏上的触摸点。

车轮关节

一个非常特殊的关节,当你需要车轮时,你会想要这个关节,并且很难想出一个不同于车轮关节的情况,其中最好的关节是车轮关节。

你可以将车轮关节看作是一个旋转关节加一个移动关节:

  • 旋转关节用于使第二个物体(车轮)旋转,并且与经典的旋转关节一样,它支持一个模拟车辆发动机的电机,使车轮旋转。
  • 移动关节用于模拟车辆车轮悬挂,并且与经典的移动关节一样,你可以设置轴角度来定义车轮的平移方向。通常,轴的方向是垂直的,但是例如,摩托车的前轮悬挂方向不同(在某些情况下非常远)于垂直。

警告

将作为车轮的物体必须是关节中的第二个物体。

车轮关节设置:

  • 轴角度:相当于移动关节的轴角度,它确定车轮与第一个物体之间的移动(或滑动)方向。

  • 频率:悬挂频率,相当于距离关节频率。值越高,车轮摆动得越快。

  • 阻尼比:阻尼比是悬挂阻尼,相当于距离关节阻尼比。较高的值会以更高的速率减缓车轮的运动。

  • 电机:如果启用,关节将向车轮(第二个物体)施加扭矩以达到给定的电机目标速度。如果启用,请记住设置电机速度和最大电机扭矩!

  • 电机速度:车轮将尝试达到的目标角速度。它可以是正值表示顺时针旋转或负值表示逆时针旋转。

  • 最大电机扭矩:关节可以施加在车轮上以达到电机目标速度的最大扭矩。必须为正值。## 在模拟期间您可以访问的一些额外数值:

  • 关节平移: 沿着悬架轴的当前轮子平移量。

  • 关节速度: 当前轮子的旋转速度。

  • 关节电机扭矩: 关节施加在轮子上的当前扭矩,它可以低于最大电机扭矩,因为这是达到目标速度所需的扭矩。

焊接关节

这个关节非常基本: 它只是试图将两个物体粘在一起,并移动它们,就好像它们是一个单独的物体。

警告

您可以用它来制作可破坏的物体,但不要过度使用。物体将被软关节连接,因此粘合许多密度非常不同的物体可能导致物理不准确的结果。

焊接关节的特定设置:

  • 参考角度: 第二个物体将具有的角度,相对于第一个物体的角度。

注意

要将物体粘在创建关节时的角度,使用物体之间的相对角度作为参考角度: SecondObject.Angle() - FirstObject.Angle()

  • 频率: 类似于距离关节频率,确定物体摆动到达静止位置的速度。
  • 阻尼比: 类似于距离关节阻尼比,随时间减慢物体的移动速度。

索具关节

另一个简单的关节。索具关节使两个物体通过绳索虚拟连接;这样,它们之间的距离不能大于绳索长度,但可以小于它。

就像滑轮关节一样,没有真正的绳子;关节只会检查物体之间的距离,如果距离大于给定长度则作出反应。

索具关节的唯一设置:

  • 最大长度: 这是物体之间的最大距离。如果初始值为负,则在创建关节时物体之间的距离将被使用。

摩擦关节

摩擦关节模拟Z轴的摩擦;它减慢两个物体之间的相对速度和/或角速度以模拟线性摩擦和角摩擦。

提示

如果其中一个物体是静态的,摩擦关节可以用于正确模拟顶部游戏中的摩擦,比如台球桌或顶部赛车游戏。

摩擦关节设置:

  • 最大力: 关节可以施加在物体上的最大力;较高的值会产生更高的线性摩擦。
  • 最大扭矩: 关节可以施加在物体上的最大扭矩;较高的值会产生更高的角摩擦。

电机关节

电机关节与真实电机没有太多直接相关性。当您使用电机关节将两个物体连接在一起时,物体将尝试达到与其他物体相对位置和/或角度加一个偏移量的目标位置。

需要考虑的两个事项:

  • 关节不是刚性的;物体可以远离目标位置或角度,一个校正因子将告诉它们移动和旋转到达静止位置的速度。例如,想象一下这些沙袋玩具,它们总是会自己站起来。您可以使用电机关节来模拟它,将地面和袋子连接在一起;这样无论您如何推动袋子物体,关节都会试图将其放回原始角度,但不会自动完成。
  • 如果有障碍物,电机关节将停止。回到沙袋示例,如果您用一个大物体把它推到地面上以使它保持在地上,电机关节将无法将其推回,就像在现实生活中一样。

注意

此关节不使用锚点;偏移位置必须仅使用线性和角度偏移进行设置。访问此关节的锚点将返回物体的位置。

电机关节的特定设置:

  • 偏移X/Y: 第二个物体的偏移位置,相对于第一个物体。要在创建关节时使用当前物体的位置,请使用 SecondObject.X() - FirstObject.X()SecondObject.Y() - FirstObject.Y()
  • 偏移角度: 第二个物体相对于第一个物体的角度偏移。要在创建关节时使用当前物体的相对角度,请使用 SecondObject.Angle() - FirstObject.Angle()
  • 最大力: 关节可以施加在物体上以将其移动到目标位置的最大力。较大的值将更快地移动物体,如果有必要的话。如果此值为零,则不会进行线性校正,物体不会移动达到目标位置。
  • 最大扭矩: 关节可以施加在物体上以将其旋转到目标角度的最大扭矩。较大的值将更快地旋转物体,如果有必要的话。如果此值为零,则不会进行角校正,物体不会旋转以达到目标角度。
  • 校正因子: 物体必须移动和旋转以达到目标位置和角度的速度。校正值越高,物体移动和/或旋转得就越快。校正受到关节可以使用的最大力和扭矩的限制。

参考

所有动作、条件和表达式都列在物理引擎 2.0 参考页面中。