基于矢量的二维平台中的碰撞检测

时间:2011-09-13 22:15:52

标签: algorithm collision

和之前的许多其他人一样,我现在正在编写2D平台游戏,或者更精确地编写引擎。我的问题是关于碰撞检测,特别是对碰撞的反应。

对于我来说,使用非基于瓷砖的表面至关重要,因为平台的世界迫切需要不直的表面。

您认为实施此类目标的最佳方法是什么?

我已经找到了解决方案,但我对此只有95%的满意度。

我的实体是基于组件的,所以首先它计算所有的移动。水平位置变化。落。跳跃速度;这一切。然后它暂时存储这些值;碰撞组件可以访问。

这个为实体添加4个生命值。两个用于地板碰撞,两个用于墙壁碰撞。

喜欢这个

image http://fux-media.com/collision.png

我首先检查地板。当发生碰撞时,我向上迭代碰撞检测,直到不再发生碰撞。

我将实体重置到这一点。如果两个地面生命点发生碰撞,我将实体重置为最低点,以避免实体漂浮在空中。

然后我用上面的生命点检查墙壁。基本上,如果碰撞,我会做同样的事情,只是水平。

如果效果很好。非常沉重的提升被视为墙壁,而非常低的提升只是攀爬。但在两者之间,当提升大约45度时,它表现得很奇怪。感觉不对。

现在,我可以避免在我的游戏中实现45度墙,但那不会是干净的,因为我正在编写一个无论如何都能正常工作的引擎。

那么......你将如何在算法上实现这一点?

1 个答案:

答案 0 :(得分:1)

我认为你的积分是正确的。您可以组合这些点以形成多边形,然后使用生成的多边形执行碰撞检测。

Phys2D是一个碰巧在Java中的库,可以在几种类型的几何图元之间进行碰撞。该网站包括可下载/可运行的演示文件库。

如果环顾四周,您可以在大多数常见语言中找到2D多边形碰撞检测实现。通过一些研究,对基础几何计算的理解,以及一些热情,如果你愿意,你甚至可以自己编写。