【发布时间】:2014-04-24 11:36:11
【问题描述】:
我正在尝试对我一直在制作的测试游戏实施一些碰撞检测。 我使用 TiledMap 创建地图并将其中一个图块上的属性设置为 blocked=true 然后在第 0 层上绘制该图块。
然后我使用以下代码检查该图块是否存在于玩家移动的方向上
if (input.isKeyDown(Input.KEY_DOWN)) {
sprite = down;
sprite.update(delta);
int tileID = map.map.getTileId((int) x / map.map.getTileWidth(), (int) y / map.map.getTileHeight() + 1, 0);
String value = map.map.getTileProperty(tileID, "blocked", "false");
if (value.equals("true")) {
y += delta * 0.1f;
System.out.println("Tile ID: " + (int) (x / map.map.getTileWidth()) + ", " + (int) (y / map.map.getTileHeight() + 1) + " Try to walk down. Tile value below the player is:" + value);
}
}
每个方向都重复此操作。
我遇到的问题是它正在为不正确的瓷砖拾取被阻止的属性 您可以通过this video 更好地理解。黄色瓷砖是碰撞/阻挡瓷砖。
【问题讨论】:
-
只是出于好奇,您的地图的原点在哪里?根据视频,您可能正在检查您身后而不是您面前的积木(您在积木上加 1,也许您应该减一)。我建议的另一件事可能是弄清楚你的解释冲突来自哪里。 x 和 y 是精灵顶部的中间还是身体的中心?
-
地图原点始终为 0,0;但这不是问题。原点在哪里绘制?绘制图像上的 0,0 在哪里?或者更具体地说,您在哪个象限工作?
-
原点在左上角。
-
好的,你能发布你的运动的完整代码吗?所有的 if 语句?我想我得到了一个合理的答案,但我需要看看那个代码。
标签: java collision-detection slick2d