平台中的XNA碰撞检测

时间:2011-07-04 19:50:33

标签: xna 2d collision-detection

我一直在研究一个简单的2D平台发动机。到目前为止,我有一个精灵移动(尚未动画),3个平台用于“Jetpac”类型的游戏(旧的ZX Spectrum游戏 - 我敢肯定,如果你谷歌你可以在闪存盒中播放它)。

现在我遇到了实现碰撞检测的问题,因此精灵实际上可以在平台上行走。我认为这将是最大的工作,然后很容易继续。但是如何用平台实现碰撞检测?!

我有所有平台的边界框以及角色,后来会有敌人精灵的边界框,但这可以在以后处理。基本上,允许精灵在平台上行走的最简单方法是什么,而不是使用Bounding Box来完成它?

更多信息:

  • 字符类控制绘制精灵并使用Vector2位置变量更新精灵,使用Vector2运动变量更新。
  • Platform类控制平台的绘制(有3个),因此plat1,plat2和plat3都是平台的类型。
  • 平台需要在所有方面都是完全固定的,但允许精灵继续前进。

任何帮助?

2 个答案:

答案 0 :(得分:4)

使用矩形进行简单碰撞检测的基础知识

使用rectangle struct作为边界框。然后,您可以使用intersects method将平台边界框与角色边界框进行比较。

维护效果的基础知识

如果您拥有大量平台的大级别,那么如果您将所有平台与角色进行比较,您的游戏可能会变慢。例如,您可以使用axis aligned bounding box技术来避免这种情况。 AABB的基础是您沿着x和y轴对边界框进行排序,因此将获得BB的近似位置。

最后但并非最不重要:

查看platformer tutorial

答案 1 :(得分:0)

您是否考虑过在游戏中使用物理引擎的选项?对于一个简单的平台游戏,这可能是矫枉过正,但你可以轻松添加额外的物理效果。

我建议你研究的2D物理引擎是:

  • Box2D,具有本机XNA端口(请参阅here
  • Chipmunk,曾经有一个到XNA的端口,但似乎已经失踪了。