2012-08-16 69 views
3

我正在为了教育目的在玩Minecraft游戏。即使使用1024x1204块,渲染效果也非常好,但现在我开始整合玩家碰撞问题。像碰撞一样的Minecraft

我对球员和aabb的对他周围所有的块aabb。这些都是动态创建的,并且运行速度非常快。

我的问题如下:

我有速度向量和当前位置。对于每个轴,我计算潜在的位置并制作一个aabb。我检查是否有碰撞,并且它是空闲的,我移动到那里,否则我将该组件的速度设置为0.我将轴分开,因为我希望我的播放器以部分面向墙的方向滑动。

轴的顺序是y,x,z。碰撞反应很好,但我在角落遇到了一些问题,因为它有时会陷入世界而不能移动。不知道这是什么原因。

我不想实现实际的物理,因为那些更苛刻,基本上只是我需要的太多。

你们对如何以一种很好的方式实施这个建议有什么建议吗?我做了一些搜索,但没有发现对这种特殊情况有用的东西。

+0

这就是滑稽。真正的Minecraft也有同样的错误。首先想到的是“不要让玩家坐在一个街区边缘”。将它们滑向0.00001以上的一侧或另一侧。 – 2012-08-16 16:11:30

+2

NES的超级马里奥兄弟也有同样的错误。我可以在0,0的位置打到墙上的一个街区,并且可以用它作为表面。 – ixron 2012-08-16 16:43:23

回答

1

这是一个有点抽象的意义上说,你的问题的原因可以与许多事情有关。从我的头顶开始,可能是碰撞检测代码中的一个错误:它以某种方式允许对象通过1(或更多)单位跨越边界。因此,当计算下一次碰撞时,1或更多尺寸被卡住(想象当检测到碰撞时,已经有一个臂在墙内),因为它碰撞到墙边界内部,所以不能伸出手臂)

+0

我非常怀疑它与碰撞检查有关。我用Ogre的aabb代码进行了足够长的测试。所有轴上的aabb的大小都是1。玩家是0.4x0.8x0.4。基本上,我在移动任何东西之前检查可能发生的碰撞,所以我真的不知道它在几何体内的可能性如何。 – Sanctus2099 2012-08-16 19:43:51