我正在 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/