基于XNA平铺的碰撞

时间:2011-02-02 19:25:40

标签: xna 2d collision-detection tiles

我有一个64 x 64像素图块的瓷砖地图(10行,10列)我想检测移动单元与任何墙壁或物体之间的碰撞。如何在移动时将单位保持在瓷砖地图的中心,然后检测一个单位是否应该改变方向而不是很快更新他的位置,并将他扔出瓷砖的中心?

示例:如果TilePositionX = 3处有一个对象,并且TilePosition = 0且该对象使单位改变方向但始终保持居中。如果每次更新,单位都以XVelocity = 1.0f(这可能是任何速度)朝向物体前进。我是否必须检测单元的中心位置然后添加偏移量并检查我是否完全在瓷砖内?我无法解决我的问题。

2 个答案:

答案 0 :(得分:0)

我在类似的情况下所做的是计算出单位的目标目的地(以像素为单位),这是它正在移动的图块的中心,然后每次更新都会使单位更接近该目标。只有当单元位于瓷砖的中心时,它才会检查新目的地。

例如:单位A位于坐标(0,0)处,以像素为单位(32,32)(该图块的中心) A向tile(0,1)移动,因此新目标为(32,96)。每次更新单位都会向下移动(0,1)像素。一旦单位是(32,96),它是图块(0,1)的中心,它就可以决定它下一步要移动的位置。

答案 1 :(得分:0)

我在一些游戏中处理这个问题的方法是我保持了平铺和像素偏移,平铺始终保持一个实数I.E 1,2并且像素偏移根据方向移动为负正。当它超过图块的大小时,我们会将其重置为零并添加或减去相应的图块类型。从那里可以很容易地确定你是否正在击中你无法继续前进的瓷砖。