否则如果循环不工作?

时间:2014-11-13 01:53:34

标签: java android if-statement

嘿我正在为Android制作游戏循环,但是当我检查碰撞时它没有检测到。我正在使用这个if if循环,当我尝试调试时,我发现它只检查第一个语句,然后跳过所有其他语句。提前谢谢。

    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();
        }
      }

2 个答案:

答案 0 :(得分:1)

如果我理解你的问题,那么我相信你的数学有点不对,我想你想要的东西,

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();
}

答案 1 :(得分:0)

你的代码肯定有一个“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 + B - 22 < Rx && my < Ry) {
    ...
} else if (mx + 26 < Rx     && my + 26 < Ry) {
    ...
} else if (mx + B - 30 < Rx && my + 10 < Ry) {
    ...
}

因此,如果“my&lt; Ry”为“FALSE”,那么接下来的两个语句也是“FALSE”。 如果“mx + B - 22”为“FALSE”,则语句#3也为“FALSE”。如果“(width / 2)”大于“48”,则语句2也总是“FALSE”([mx + 48 - 22] == [mx + 26])。

因此,在您的第一个“if”语句中,如果逻辑的任一部分为false,则将永远不会调用语句#3,并且根据“width”,不可能调用语句#2。

你可能在这个逻辑上有问题,但我不能告诉你你应该做什么来进行碰撞检测。但我相信这会回答你的问题。