平台中的XNA碰撞检测

平台中的XNA碰撞检测,xna,2d,collision-detection,Xna,2d,Collision Detection,我一直在做一个简单的2D平台引擎。到目前为止,我已经有了一个精灵四处移动(还没有动画),还有3个平台可以玩“Jetpac”类型的游戏(老ZX Spectrum游戏-我相信如果你用谷歌搜索它,你可以在flash框中玩) 现在我要解决的问题是如何实现碰撞检测,这样精灵就可以在平台上行走了。我认为这将是最大的工作,而且很容易继续下去。但如何实现与平台的碰撞检测 我有所有平台的边界框,以及角色的边界框,稍后会有敌人精灵的边界框,但这可以稍后处理。基本上,允许精灵在平台上行走而不使用边界框穿过平台的最简单

我一直在做一个简单的2D平台引擎。到目前为止,我已经有了一个精灵四处移动(还没有动画),还有3个平台可以玩“Jetpac”类型的游戏(老ZX Spectrum游戏-我相信如果你用谷歌搜索它,你可以在flash框中玩)

现在我要解决的问题是如何实现碰撞检测,这样精灵就可以在平台上行走了。我认为这将是最大的工作,而且很容易继续下去。但如何实现与平台的碰撞检测

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

更多信息:

  • 角色类控制绘制精灵和使用Vector2位置变量(使用Vector2运动变量更新)更新精灵
  • 平台类控制平台的绘图(共有3个),因此plat1、plat2和plat3都是平台类型
  • 平台的所有侧面都需要完全坚固,但允许精灵在上面行走

有什么帮助吗?

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

对边界框使用。然后,可以使用将平台边界框与角色边界框进行比较

保持性能的基础:

如果你有很多平台的大关卡,如果你将所有平台与角色进行比较,你的游戏可能会变慢。例如,您可以使用该技术来避免这种情况。AABB的基本原理是沿着x轴和y轴对边界框进行排序,从而获得BBs的大致位置

最后但并非最不重要的一点:


请看。

您是否考虑过在游戏中使用物理引擎?对于一个简单的platformer来说,这可能有点过头了,但是你可以很容易地添加额外的物理效果

我可以建议您研究的2D物理引擎包括:

  • Box2D,具有本机XNA端口(请参阅)
  • 花栗鼠,曾经有一个到XNA的端口,但它似乎已经失踪了

是-这是一场伟大的比赛,但却被忽视和低估。我看还没有答案。如果这样的话,你可以随时尝试在gamedev上发布。你读过这个问题吗:我已经研究了intersects方法,但是我需要一些帮助来弄清楚:
if(character.bounds.intersects(plat1.bounds){//do something}
什么是//do something?基本上,如果角色正在移动并突然与某物相交,请阻止它移动。您不应该期望在这里有一个完整的解决方案,因为您是开发人员。不过,我确实推荐platformer教程。到目前为止,我已经尝试过:`if(player.characterBounds.intersects)(plat1.platformBounds)){player.motion.Y=0;collision=true;}else collision=false;player.Update(碰撞)59首先,检查是否有碰撞,然后决定是否要将新位置应用于播放器,这取决于是否检测到碰撞。此外,我在代码中看到的是,在没有碰撞的情况下,您没有重置播放器的运动,因此播放器可能不会移动…我已经解决了部分问题-我没有sn没有更新角色边界,但现在它可以识别碰撞。只需纠正玩家的位置,这样他就不会进入平台的一半!而且我没有发布玩家。更新过程,更新了.X运动,所以玩家可以左右移动,但不能垂直移动,这是我不想使用ph的想法物理引擎-我想自己编写尽可能多的程序,这是我唯一不知道的事情,但这是最重要的事情之一