我正在为教育目的开发类似 Minecraft 的游戏。到目前为止,即使使用 1024x1204
块,渲染也很棒,但是现在我开始集成玩家碰撞,我遇到了问题。
我有玩家的 aabb
和他周围所有街区的 aabb
。这些是动态创建的,并且运行速度非常快。
我的问题如下:
我有速度 vector 和当前位置。对于每个轴,我计算潜在位置并制作一个 aabb。我检查碰撞并且它是自由的,我移动到那里,否则我将该组件的速度设置为 0。我将轴分开,因为我希望我的播放器沿部分面向墙壁的方向滑动。
轴的顺序是 y,x,z。碰撞响应很棒,但我在拐角处遇到了一些问题,因为它有时会卡在世界中而无法移动。不知道这是什么原因。
我不想实现实际的物理,因为它们要求更高,而且基本上对于我需要的东西来说太多了。
你们对如何以一种好的方式实现这一点有什么建议吗?我做了一些搜索,但我没有找到任何对这种特殊情况有用的东西。
最佳答案
从某种意义上说,这有点抽象,因为您的问题的原因可能与许多事情有关。在我的脑海中,可能是您的碰撞检测代码中的一个错误:它以某种方式允许对象跨越 1 个(或更多)个单位的边界。因此,当计算下一次碰撞时,1 个或多个维度被卡住(想象一下,当检测到碰撞时,墙壁内已经有一只 ARM 。您无法将 ARM 取出,因为它与墙壁边界的内部发生了碰撞)
关于c++ - Minecraft 喜欢碰撞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11991153/