对于我来说,使用非基于瓷砖的表面至关重要,因为平台的世界迫切需要不直的表面。
您认为实施此类目标的最佳方法是什么?
我已经找到了解决方案,但我对此只有95%的满意度。
我的实体是基于组件的,所以首先它计算所有的移动。水平位置变化。落。跳跃速度;这一切。然后它暂时存储这些值;碰撞组件可以访问。
这个为实体添加4个生命值。两个用于地板碰撞,两个用于墙壁碰撞。
喜欢这个
image http://fux-media.com/collision.png
我首先检查地板。当发生碰撞时,我向上迭代碰撞检测,直到不再发生碰撞。
我将实体重置到这一点。如果两个地面生命点发生碰撞,我将实体重置为最低点,以避免实体漂浮在空中。
然后我用上面的生命点检查墙壁。基本上,如果碰撞,我会做同样的事情,只是水平。
如果效果很好。非常沉重的提升被视为墙壁,而非常低的提升只是攀爬。但在两者之间,当提升大约45度时,它表现得很奇怪。感觉不对。
现在,我可以避免在我的游戏中实现45度墙,但那不会是干净的,因为我正在编写一个无论如何都能正常工作的引擎。
那么......你将如何在算法上实现这一点?
答案 0 :(得分:1)
我认为你的积分是正确的。您可以组合这些点以形成多边形,然后使用生成的多边形执行碰撞检测。
Phys2D是一个碰巧在Java中的库,可以在几种类型的几何图元之间进行碰撞。该网站包括可下载/可运行的演示文件库。
如果环顾四周,您可以在大多数常见语言中找到2D多边形碰撞检测实现。通过一些研究,对基础几何计算的理解,以及一些热情,如果你愿意,你甚至可以自己编写。