我正在使用xna 4.0在c#中制作一个简单的自上而下的2D游戏,我正在使用AABB碰撞检测方法。我绝对是编程的初学者,所以如果这个问题非常基础我会道歉。
我希望让多个敌人向玩家移动来攻击他,但每当我添加多个敌人时,我就很难处理它们之间的碰撞和处理。我该如何管理我正在使用的简单矩形交叉碰撞?如果碰撞返回true,我尝试将敌人设置到他们之前的位置,但这确实有很多时髦的东西。
感谢您的帮助!
答案 0 :(得分:1)
在处理多个位置时,以前的位置通常效果不佳,因为即使“之前的位置”也可能开始失效。
相反,您可以考虑从碰撞对象的方式推出一个对象。
这篇文章是在OpenTK中,它不是基于XNA的,但非常相似,应该很容易适应:
http://www.opentk.com/node/869
将AABB推出另一个AABB的方式需要最少的翻译。这必须在多次传递中完成,以确保没有两个对象发生碰撞。但是,从技术上讲,如果您已经使用了玩家,则不需要检查敌人与玩家。相反,你可以更普遍地处理这个问题,使用一种算法来覆盖你需要比较的所有AABB,并知道哪些已被比较。这部分可以进入优化阶段。
也要注意顺序;这是您对碰撞优先级的控制发挥作用的地方。当你的玩家的AABB与另一个人发生碰撞时,你宁愿你的玩家被“推”到第一或敌人吗?这些细节可以由您实施。
答案 1 :(得分:0)
为什么不使用自动处理碰撞(和其他物理)的Farseer Physics Engine? Farseer Physics Engine是一种具有逼真物理响应的碰撞检测系统。
Farseer可以处理每次碰撞,你可以专注于你的游戏设计! (不要重新发明轮子:)
这是一个开源项目并广泛使用!那里有很多样品
下载