所以我让我的代码处理这个问题,更多的是关于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);
}
应该清楚为什么它现在"神奇地工作",它只是无条件地绘制。