2D平台AABB碰撞问题

Vit*_*meo 6 c# physics 2d collision-detection

http://dl.dropbox.com/u/3724424/Programming/Gifs/game6.gif

我有AABB碰撞解决方案的问题.


我通过首先解析X轴然后解析Y轴来解析AABB交叉点.这样做是为了防止这个错误:http://i.stack.imgur.com/NLg4j.png


当对象进入播放器并且必须水平推动播放器时,当前方法工作​​正常.正如你在.gif中看到的那样,水平尖峰正确地推动了玩家.


但是,当垂直尖峰移动到播放器中时,X轴仍然首先被解析.这使得"使用尖钉作为升力"是不可能的.

当玩家进入垂直尖峰(受重力影响,落入其中)时,他被推到Y轴上,因为X轴上没有重叠开始.


我试过的东西是这个链接第一个答案中描述的方法.然而,尖峰和移动物体通过改变位置而不是速度来移动,并且在调用Update()方法之前我不计算它们的下一个预测位置.不用说这个解决方案也不起作用.:(


我需要以上述两种情况都按预期工作的方式解决AABB碰撞问题.

这是我目前的碰撞源代码:http://pastebin.com/MiCi3nA1

如果有人可以调查一下,我会非常感激,因为这个错误从一开始就一直存在于引擎中,我一直在努力找到一个好的解决方案,但没有任何成功.这让我花了很多时间看着碰撞代码并阻止我进入"有趣的部分"并编写游戏逻辑:(


我尝试实现与XNA AppHub平台演示中相同的碰撞系统(通过复制粘贴大部分内容).然而,"跳跃"错误发生在我的游戏中,而在AppHub演示中却没有.[跳跃的bug:http://i.stack.imgur.com/NLg4j.png ]

要跳转我检查播放器是否为"onGround",然后将-5添加到Velocity.Y.

由于玩家的Velocity.X高于Velocity.Y(参考图中的第四个面板),onGround在不应该的时候设置为true,因此让玩家在半空中跳跃.

我相信这不会发生在AppHub演示中,因为玩家的Velocity.X永远不会高于Velocity.Y,但我可能会弄错.

我先解决了这个问题,首先解析X轴,然后解决Y轴问题.但是,正如我上面所说的那样,它会加剧与尖钉的碰撞.

Vit*_*meo 0

我发现的一种可能的解决方案是在根据玩家的速度进行解析之前对对象进行排序。