嵌套的 if 语句在 for 循环 [JAVA/LibGDX] 中



所以我让我的代码处理这个问题,更多的是关于Java的问题,以及为什么它以我的方式工作VS。这是我编写的原始代码。

private void renderGUIExtraLives (SpriteBatch batch){
float x = GUIcamera.viewportWidth - 50 - Constants.LIVES_START * 50;
float y = -15;
for (int i = 0; i < Constants.LIVES_START; i++) {
if (worldController.lives <= i) {
batch.setColor(0.5f, 0.5f, 0.5f, 0.5f);
batch.draw(Assets.instance.bunny.head, x + i * 50, y, 50, 50, 120, 100, 0.35f, -0.35f, 0);
batch.setColor(1, 1, 1, 1);
}
}
}

这不起作用,它没有抛出任何错误,但它没有将生命吸引到屏幕上,我所做的只是删除 if 语句的大括号,如下所示:

private void renderGUIExtraLives (SpriteBatch batch){
float x = GUIcamera.viewportWidth - 50 - Constants.LIVES_START * 50;
float y = -15;
for (int i = 0; i < Constants.LIVES_START; i++) {
if (worldController.lives <= i) 
batch.setColor(0.5f, 0.5f, 0.5f, 0.5f);
batch.draw(Assets.instance.bunny.head, x + i * 50, y, 50, 50, 120, 100, 0.35f, -0.35f, 0);
batch.setColor(1, 1, 1, 1);
}
}

现在神奇地它起作用了,有人可以解释为什么在我从嵌套的 if 语句中删除大括号后它有效吗?我将不胜感激,如果有人在 Stack 上有指向类似问题或答案的链接,那么有关此主题的任何讨论都将很高兴阅读。

您的缩进是错误的和误导性的。如果删除if后面的大括号,则仅有条件地执行下一条语句。这意味着代码基本上是:

for (int i = 0; i < Constants.LIVES_START; i++) {
if (worldController.lives <= i) 
batch.setColor(0.5f, 0.5f, 0.5f, 0.5f);
batch.draw(Assets.instance.bunny.head, x + i * 50, y, 50, 50, 120, 100, 0.35f, -0.35f, 0);
batch.setColor(1, 1, 1, 1);
}

应该清楚为什么它现在"神奇地工作",它只是无条件地绘制。

最新更新