Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 否则,如果循环不工作?_Java_Android_If Statement - Fatal编程技术网

Java 否则,如果循环不工作?

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

嘿,我正在为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 + 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。另外,你所有的幻数都来自哪里?谢谢兄弟,我得到了它:)