如何处理等距碰撞检测?


14

我想做一个等距的跳跃风格的平台游戏。玩家应该能够跳到地板上方的平台顶部,撞到物体的侧面等。

我将使用2D游戏引擎,所以我不想为未使用的尺寸模拟完整的3D碰撞。

我认为游戏中的对象应使用:X,Y,宽度,高度和Z表示深度。

使用这些值,我应该如何检测冲突?


我知道这是一个一般性的问题,但是,我想获得更详细的答案或指向良好学习资源的链接。
jdeseno

Answers:


19

2种选择:

  • 您可以将其视为具有固定正交摄影机的3D游戏。然后,您可以使用任何标准的3D游戏资源/书籍/教程/库。即使使用Sprite以2D进行渲染,运动等数学运算仍将在场景后方进行3D渲染。这将为您提供最准确的结果。

  • 您可以将其视为自上而下的2D游戏,具有增加的height属性。例如,假设一个2D网格,其中每个图块都有一个高度值。当从一个图块移动到另一个图块时,仅当角色的脚在其上方或等于该图块的高度时,才让角色传递到特定的图块,但是如果角色在跳跃并且重力将其放下到图块的顶部,则您让他们留在那里。如果再做一些工作,您就可以做到,这样您就可以在桥梁下行走。


4

有很多方法可以简化此过程。例如,如果您不允许图层(例如,您可以上下走过的桥梁),则可以在X / Y维度上进行所有碰撞检测,在其中您可以将碰撞集过滤为高度+深度的任意值或更高。


2

如果游戏基于矩形网格,则此网格定义您的X / Y轴。Z可以用作高度。

碰撞与任何基于2D瓷砖的游戏一样容易。

然后,您只需要从网格转换回等轴测屏幕坐标即可进行渲染。这非常简单-但是您可能需要考虑计算“深度”值,以进行排序(从后到前渲染等轴测场景)


使用Z表示高度是违背本能的,但是在自上而下的2D游戏中这样做是正确的。那么您就可以在侧面游戏和自顶向下游戏之间重用代码。
伊恩

2

谷歌搜索我发现这个演示:http : //planetskill.com/iso/

WASD移动。空格键跳

它仅实现与上/下轴的碰撞,但添加其他碰撞应该很容易:

如果下一步的上/下位置高于最大位置,请不要移动。这也应该使您以简单的方式实现跳跃。

此处的示例代码:http : //gist.github.com/478997


2

上述所有的。等轴测只是剪切的2d网格,因此将其视为2d tilemap,并考虑一种编码深度的方法。在常规的2D游戏中(如何在“跳跃”时能够在方块后面或方块前面)进行操作,您会如何存储每个图块的深度(深度缓冲区-> z缓冲区)或使用多层,或者,如果需要的话,可以为每个tiletype(或mapposition)实现一个回调,并且可以执行所需的任何操作,检查深度,检查设备,扭曲播放器,让播放器缓慢向上移动,格式化HD。


Kaj的好答案-这是问题的关键,我很惊讶没有其他人提出这个问题。在物理方面,这总是使新手对等距感到困惑。
工程师

1

好吧,您可以在不可见的等级上有一个单独的碰撞层,并用它来检查碰撞。

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.