如果语句似乎在java

时间:2016-12-19 20:40:44

标签: java

我正在使用box2d在libgdx中创建一个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);
    }
}

1 个答案:

答案 0 :(得分:3)

在您的第一组if中,您在确定它将为假(最初getRunningRight()失败后)后评估if,因此无需再次评估它。

如果你认为你在第二个街区做同样的事情,那你就不是;内部if中的表达式与第一个中的表达式不同。也就是说,(A&amp;&amp; B)&amp;&amp; C (!A&amp;&amp;!B)&amp;&amp; !ç的。因此,两个表达式都可能是错误的。