首页 文章

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

提问于
浏览
0

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

对于我而言,拥有非基于平铺的表面至关重要,因为平台的世界迫切需要不直的表面 .

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

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

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

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

像这样

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

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

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

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

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

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

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

1 回答

  • 1

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

    Phys2D是恰好在Java中的库,它在几种类型的几何图元之间进行冲突 . 该网站包括可下载/可运行的演示文件库 .

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

相关问题