2D Java游戏 - 使用等距瓷砖进行碰撞检测

时间:2014-10-22 17:31:22

标签: java 2d collision tile

我无法弄清楚如何使用提供的方法实现碰撞检测 光滑2D。我创建了一个带有程序的地图" Tiled"因为Slick 2D支持你从那里得到的文件。 所以这就是我的游戏现在的样子:

它几乎包括基本(等距)背景,功能播放器和地图上某处的冰箱(要碰撞的对象)。 在Tiled中,您可以为放置的对象创建多个图层。 Grass位于第0层,冰箱位于第1层等。

所以这是众所周知的基本碰撞检测。

  1. 按下方向键
  2. 检查前面的下一个像素并检查此位置的图块
  3. 如果此位置的此图块具有图层ID 1(所有实体对象的图层),则不要移动
  4. Slick 2D提供了方法getTileID(xPos,yPos,layerIndex),它返回此tile的图层的int。在这种情况下是1。

    但是有我的问题:我不能只使用我的播放器的x和y坐标来获取getTileID(...) 因为这种方法要求x和y是这个地图模式中的坐标。

    http://i.imgur.com/uV4PzTN.png?1

    但玩家的x和y坐标以像素为单位。 因此,使用播放器的x和y检查getTileID(...)会导致outOfBoundsException,因为地图只有20 x 20个tile。但例如,玩家位于200,200位置。

    所以我必须以某种方式将玩家的坐标与地图的坐标相结合。 我现在已经知道如何做到这一点。玩家也应该与瓷砖碰撞。像这样:

    http://i.imgur.com/3gQlpH0.png?1

    我能得到的最好结果是,我说x是x / 32而y是y / 64(因为瓷砖的高度是32像素,宽度是64英寸)。所以palyer实际上以某种方式相撞但只是在地图上的其他地方。他碰撞的形状更像是反角,而不是等长的东西:/

    我从哪里开始?有任何帮助来源吗?我不知道如何实现这一目标。 感谢阅读和任何帮助:)

0 个答案:

没有答案