【问题标题】:Slick2D: getTileProperty returns true when it shouldn'tSlick2D:getTileProperty 在不应该返回 true 时
【发布时间】: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


【解决方案1】:

我认为您遇到此问题是因为您更新了 if 语句之外的图形

尝试在if中移动下面的:

sprite = down; 
sprite.update(delta);

但是我想其中之一将精灵的脸朝下,因此不应该在里面。

【讨论】:

  • 两者都不能在 if 之外。第一个是因为它设置了精灵方向图像,第二个是它在角色动画之外是否始终播放,而不仅仅是在移动时
  • 你能检查 value.equals("true") 没有 "" 所以 value.equals(true)
猜你喜欢
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多