我正在使用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);
}
}
答案 0 :(得分:3)
在您的第一组if
中,您在确定它将为假(最初getRunningRight()
失败后)后评估if
,因此无需再次评估它。
如果你认为你在第二个街区做同样的事情,那你就不是;内部if
中的表达式与第一个中的表达式不同。也就是说,(A&amp;&amp; B)&amp;&amp; C 与(!A&amp;&amp;!B)&amp;&amp; !ç的。因此,两个表达式都可能是错误的。