Java 否则,如果循环不工作?
嘿,我正在为android做一个游戏循环,但当我检查碰撞时,它没有检测到。我正在使用这个if-else循环,当我尝试调试时,我发现它只检查第一条语句,然后跳过所有其他语句。提前谢谢Java 否则,如果循环不工作?,java,android,if-statement,Java,Android,If Statement,嘿,我正在为android做一个游戏循环,但当我检查碰撞时,它没有检测到。我正在使用这个if-else循环,当我尝试调试时,我发现它只检查第一条语句,然后跳过所有其他语句。提前谢谢 mx = g.ttx; my = g.tty; int width=g.getrW(); int Height=g.getrH(); if (mx + (width / 2) - 22 < x + radius && my < y + radi
mx = g.ttx;
my = g.tty;
int width=g.getrW();
int Height=g.getrH();
if (mx + (width / 2) - 22 < x + radius && my < y + radius) {
if (mx +( width / 2) - 70 > x && my + Height > y) {
gameOver = true;
m.start();
}
} else if (mx + 26 < x + radius && my + 26 < y + radius) {
if (mx + width - 45 > x && (my + Height - 45) > y) {
gameOver = true;
m.start();
}
} else if (mx + (width / 2) - 30 < x + radius && my + 10 < y + radius) {
if (mx + width - 74 > x && my - 20 + Height > y) {
gameOver = true;
m.start();
}
}
mx=g.ttx;
my=g.tty;
int width=g.getrW();
int Height=g.getrH();
如果(mx+(宽度/2)-22x和my+高度>y){
gameOver=true;
m、 start();
}
}否则如果(mx+26x&(my+高度-45)>y){
gameOver=true;
m、 start();
}
}如果(mx+(宽度/2)-30x&&my-20+高度>y){
gameOver=true;
m、 start();
}
}
如果我理解你的问题,那么我相信你的数学有点不对劲,我想你想要的是
int width = g.getrW();
int height = g.getrH();
int minX = (g.ttx - radius) - (width / 2);
int maxX = (g.ttx + radius) + (width / 2);
int minY = (g.tty - radius) - (height / 2);
int maxY = (g.tty + radius) + (height / 2);
if (x >= minX && x <= maxX && y >= minY && y <= maxY) {
gameOver = true;
m.start();
}
intwidth=g.getrW();
int height=g.getrH();
int minX=(g.ttx-半径)-(宽度/2);
int maxX=(g.ttx+半径)+(宽度/2);
int minY=(g.tty-半径)-(高度/2);
int maxY=(g.tty+半径)+(高度/2);
如果(x>=minX&&x=minY&&y您的代码中肯定有一个“bug”…一个逻辑bug。让我们减少您的语句“if/else”语句:
if (mx + (width / 2) - 22 < x + radius && my < y + radius) {
...
} else if (mx + 26 < x + radius && my + 26 < y + radius) {
...
} else if (mx + (width / 2) - 30 < x + radius && my + 10 < y + radius) {
...
}
if(mx+(宽度/2)-22
转换为:
if (mx + B - 22 < Rx && my < Ry) {
...
} else if (mx + 26 < Rx && my + 26 < Ry) {
...
} else if (mx + B - 30 < Rx && my + 10 < Ry) {
...
}
if(mx+B-22
因此,如果“my
因此,在您的第一个“if”语句中,如果逻辑的任一部分为false,则永远不会调用语句#3,也不太可能调用语句#2,具体取决于“宽度”
您可能在该逻辑中有问题,但我无法告诉您碰撞检测“应该”做什么。但我相信这回答了您的问题。g.getrW()和g.getrH()是否每次调用时都返回相同的值?如果是,可能最好在If之前调用它们,只是为了性能(您有可能减少6次方法调用),也可能使它更具可读性。您可以将else if
s与它们包含的嵌套if
s结合起来,可能会使事情更清楚,更易于调试。但是如果没有更多的上下文,就不能说更多了。您是否打算如果外部if
为真,但其内部if
为假,则剩余的外部de>if
s将被跳过?因为这里就是这样。如果它不是您想要的,您应该使用另一个&&
将每个内部if
与包含它的外部if
合并。是的,它们返回相同的值,它们是widt和Height@DavidWallace但是我用了{}在每一个ifmay之后…但是如果我这样做,我没有得到我想要的所有点,顺便说一句,谢谢bro@Anil我假设x和y是this.x和this.y?不,它们是位置,问题在于else如果:)@Anil否,嵌套if(s)像往常一样工作。if(a){if(b){}else如果(c){请注意,只有当a为真时,才测试b。如果a为真,则不测试c。另外,你所有的幻数都来自哪里?谢谢兄弟,我得到了它:)