如何在平台游戏中处理移动平台?


15

我不想使用box2d或其他任何东西,我只想要简单的移动平台(上下,左右,对角线和圆形路径)。我的问题是处理更新顺序/控制层次结构,以便播放器牢固地固定在平台上,而不会弹跳或摆动?

Answers:


16

我的解决方案是将游戏地图中的每个物理实体都视为树节点,并将地图本身视为根节点。节点可以包含其他节点。每个节点都(直接或间接)包含在地图节点内。

例如,假设您的角色站在平台上。平台的节点包含角色的节点。因此,只要平台移动,它包含的节点(在本例中为角色)也将移动。

为此,每个节点都应相对于父节点具有(x,y)位置。例如,您的角色可以对于平台位于(1,0),而平台本身可以对于游戏地图位于(10,10)。这样,如果平台移动,您的角色将隐式移动。

在此分层树中,每个节点的位置等于其位置加上其父节点的位置之和。假设我们要获取角色在地图上的位置。我们计算:

(字符位置)+(父节点位置)+(根节点位置)=(1,0)+(10,10)+(0,0)= (11,0)

好的,所以一直以来,您的角色一直站在平台上。跳什么呢?好吧,他跳的那一刻,您将他从平台上分离开,并将其附加到包含平台的节点上;在这种情况下,为地图(根节点)。

当他再次降落时,将他附加到他降落的任何节点上。


1
我还将使用节点的x和y速度影响播放器。示例1:平台确实快速移动并停止,玩家具有向上的动力并被启动。示例2:平台下降的速度比玩家以致命的速度下降的速度略慢。该平台应该可以安全着陆,而不是SPLUT
AttackingHobo

这是一种有趣的方法,但似乎对我的引擎进行了全面的更改,仅允许移动平板。也许如果我将objectOnPlatform创建为一个组件,我可以对只是暂时提供此效果的任何对象都可以?
伊恩

10

我建议将其视为伪物理问题,并通过使用地面摩擦来解决。

您已经在使用重力将角色保持在地面上,这可以处理平台上下移动的情况。为了处理左右移动,地面应该在角色上施加很大的摩擦。通常,此摩擦级别将为1.0或100%。

如果角色静止不动,则其速度为0,由于摩擦,它们继承了平台速度的100%。类似于以下内容:

character_velocity = friction * platform_velocity

这种方法的好处在于,它很容易适用于其他平台化机制,例如能够克服陡坡上的摩擦力,从而使角色能够滑动。它还使您可以轻松减少摩擦,以创建角色可在其上滑动的冰块。

处理壁挂高度低等问题可能会更容易处理,因为这些问题可能会使播放机脱离移动的平台。如果仅将角色视为父平台的孩子,那么很有可能它会在无需大量工作的情况下与其余碰撞检测非常轻松地交互。


0

您可以固定玩家位置,而不是“绝对关卡”,而是“相对于平台”,然后使用一个函数来提供其实际位置。我不喜欢这个

将播放器绑定到平台可能会更好(更简单),以便当平台移动+ x / + y时,播放器也会移动相同的距离。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.