【问题标题】:returning false gets true and vise versa返回 false 变为 true,反之亦然
【发布时间】:2015-05-27 10:20:47
【问题描述】:

我的一种方法有一个非常奇怪的行为。

 boolean checkMapObjects(Vector2 enemypos, Vector2 playerpos) {
    MapLayers layers = map.getLayers();
    for (int i = 0; i < layers.getCount(); i++) {
        MapLayer layer = layers.get(i);
        if (layer.getName().contains("collision")) {
            for (MapObject obj : layer.getObjects()) {
                Rectangle rect = ((RectangleMapObject) obj).getRectangle();
                float[] vects = {rect.getX(), rect.getY(), rect.getX(), rect.getY() + rect.height,
                        rect.getX() + rect.width, rect.getY() + rect.height, rect.getX() + rect.width, rect.getY()};

                if (Intersector.intersectLinePolygon(enemypos, playerpos, new Polygon(vects)))
                    return true;
            }
        }
    }
    return false;
}

首先:该函数还使用最后一个 return 语句,但这不是主要问题。真正让我吃惊的是该函数反转了返回值。 如果我从像这样的其他函数调用它

boolean wtf=checkMapObjects(enemypos, playerpos);

wtf 将始终是应该返回的值的倒数。 谁能告诉我为什么?
只是为了测试,我尝试返回 true 而不是 false,但值再次反转

【问题讨论】:

  • 你的 if 语句可能有问题。
  • 您应该调试以了解究竟发生了什么。慢慢地通过它并检查所有条件。
  • @noone 我确实调试过它。这样做时,wtf 总是从 checkMapObjects 的最后一次返回中获取逆值。
  • @Murat K.:不知道你的意思是在最后一次返回和返回值与 wtf 的关联是否为 no if 语句之间
  • @Aeglasin 我不知道。使用调试器看看会发生什么。

标签: java libgdx


【解决方案1】:

而不是检查方法,尝试在你的方法forloop中打印Intersector.intersectLinePolygon(enemypos, playerpos, new Polygon(vects))

我猜它返回 false。

boolean currentIntersection=Intersector.intersectLinePolygon(enemypos, playerpos, new Polygon(vects))

【讨论】:

    【解决方案2】:

    找到了,敌人撞墙了……因为我需要使用Segement而不是line^^

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2015-10-03
      • 2013-09-18
      • 1970-01-01
      相关资源
      最近更新 更多