嘿我正在为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();
}
}
答案 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。
你可能在这个逻辑上有问题,但我不能告诉你你应该做什么来进行碰撞检测。但我相信这会回答你的问题。