java - if 语句似乎运行了一些代码,但不是全部在 java 中

标签 java

我正在 libgdx 中使用 box2d 制作 2d 平台游戏。下面是我的一个敌人的更新方法。它是“Enemy”类的扩展,这也是“super.update”所指的。我希望敌人在玩家位于其后方或远处时奔跑,并在玩家靠近其前方或前方时停止射击。

我尝试通过最初设置速度(velocity.x)[取决于敌人的方向]来实现这一点,然后设置是否射击。

我现在遇到的问题是,当玩家在敌人身后时,敌人不会逃跑。正如你所看到的,我打印了很多字符串到控制台来查看velocity.x何时变回0。根据控制台,它发生在最后一对if/else语句中,这些语句应该检查距离有多远玩家所在的位置以及敌人跑向的方向。但是,这些语句中的控制台字符串(即“向左射击”或“向右射击”的控制台字符串)不会被打印出来。尽管如此,更改velocity.x 的行必须运行,因为它的值根据下一行中的字符串输出而变化。顶部的 if 语句(检查方向)也必须运行,因为这些语句中的控制台输出被打印,并且表示速度的输出表示正确的速度(2 或 -2)。

这是怎么回事? IDE 似乎只运行 if 语句中的一行。这是不可能的,所以我在这里错过了什么?

感谢您的帮助。

public void update (float dt, Player player){
    super.update(dt, player);
    if (b2body.isActive()){
        System.out.println(b2body.getPosition().x - player.b2body.getPosition().x);
        System.out.println("After Enemy code: " + velocity.x);
        if (getRunningRight()) {
            System.out.println("Right");
            velocity.x = 2;
        }
        else if (!getRunningRight()) {
            System.out.println("Left");
            velocity.x = -2; 
        }
        System.out.println("After checking direction: " + velocity.x);

        if ((b2body.getPosition().x - player.b2body.getPosition().x <= 2 &&
                b2body.getPosition().x - player.b2body.getPosition().x >= 0) && !getRunningRight()){
            velocity.x = 0;
            System.out.println("Shoot left");
        }
        else if ((b2body.getPosition().x - player.b2body.getPosition().x >= -2 &&
                b2body.getPosition().x - player.b2body.getPosition().x < 0) && getRunningRight()){
            System.out.println("Shoot right");
            velocity.x = 0;
        }
        System.out.println("After shooting: " + velocity.x);
    }
}

最佳答案

在第一组 if 中,您在确定 getRunningRight() 为 false 后对其进行评估(通过最初的 if code> 失败),因此无需再次评估。

如果您认为自己在第二个区 block 中做了同样的事情,那么您就没有;内部 if 中的表达式与第一个表达式并不相反。也就是说,(A && B) && C 不是 (!A && !B) && !C 的反义词。因此,这两个表达式都有可能为假。

关于java - if 语句似乎运行了一些代码,但不是全部在 java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41230653/

相关文章:

Java 停止方法更改传递给它的变量

java - 如何打印数组中出现次数最多的 5 个数字?

java - 是否可以打包通用类?

java - 没有 hibernate-validator 依赖的 Spring Boot 应用程序

java - KARATE:打印语句不会使用 log4j2 写入控制台

Java 进程卡在 IOUtils 上。疑似死锁

java - java中字符串缓冲区的问题

java - hibernate、stackoverflow 与特定实体映射

java - apache.commons.lang3.DateUtils.setMonths 十二月

java - 泛型 - 如何传递对象数组