基于2D平铺的碰撞检测

时间:2012-05-27 07:48:34

标签: c# xna 2d collision-detection

我一直在策划一个独立游戏项目。我会为你总结一下,所以我可以正确地回答这个问题。

完全使用最新版本的XNA通过Visual Studio完成。希望将它放在360和PC上,但我现在只是在寻找面向PC的解决方案。

这是一个2D侧滚动射击游戏(想想Metroidvania风格,甚至是Terraria)。它最终将包括一个游戏中的地图编辑器,地图是基于图块的(16x16)。将向上和向下滚动。我希望在开发地图编辑器中实现切片图层(开发地图编辑器的原因是它会严重倾向于内容焦点,所以会有很多地图)。

物理瓷砖非常简单,只有两种主要类型。块瓷砖,只是一个实心瓷砖,和角形瓷砖,是具有角色可以行走的倾斜的瓷砖。我正在考虑完全放弃有角度的瓷砖,但还不确定。

角色/ NPC的动作很简单。左右移动,跳跃,下降,飞行(有适当的物品/情况),传送。所有非常静态,没有必要的动态物理。只有基本的引力。当角色离开瓷砖的边缘时,它会下降。当它跳跃并且瓷砖位于其上方时,它会停止并且向下跌落。当它到达突出的瓷砖/墙壁时,除非它跳过或飞过,否则它不能进一步移动。所有基本的东西。

弹丸也会受到重力的影响,某些情况下可能会出现射弹在飞行途中被操纵,但不需要重物理的情况。一些射弹也会移动角色(想想一个简单的“推动”机制)。

所以这就是问题:我正处于开始进行运动和碰撞检测的阶段,但我无法让自己走上一条路。我需要用什么方法来确定角色,瓷砖和抛射物何时发生碰撞。鉴于我所说的我正在寻找的风格和我正在使用的基于磁贴的系统,我可以得到一些建议+链接到其他人在类似情况下使用的一些经过验证的真实碰撞检测方法吗? 我最需要的是灵感。

简单来说,我有几年的程序员经验,所以我不是一个新手:)

2 个答案:

答案 0 :(得分:2)

我正在研究一个GIS项目,我有一个类似的问题,我用QuadTrees解决了,看看这个link有一个很好的解释和例子。

答案 1 :(得分:0)

如果它是您所说的基于图块的地图,则图块将存储在二维数组中。因此,您可以通过地图数组中的x,y坐标快速访问切片。

我推荐四叉树只是简单地检查实体附近的瓷砖。

例如,您有一个向右移动(+ x方向)而不向上或向下移动的玩家实体。您可以碰撞的瓷砖数量只是几个瓷砖中的一个。特别是右边的瓷砖。如果你的移动速度足够快,也许更适合你。

仅检查相邻区块的上述解决方案是解决该问题的非常常见的方法,并且可以适用于许多用例。这比上面提到的四叉树查找更快更简单。

相关问题