Java 在update()方法中重置布尔值和int值时出现问题

Java 在update()方法中重置布尔值和int值时出现问题,java,int,boolean,updates,side-scroller,Java,Int,Boolean,Updates,Side Scroller,在我的游戏中,我使用一个名为 onScreen 每次游戏开始时,它都设置为真。我还有一个int变量,叫做 onScreenTime 游戏开始时设置为180。这些用于在一定时间内在屏幕上描绘文本“为X波做好准备”。由于onScreenTime为180,fps为60,因此文本仅显示2秒钟。2秒后,屏幕设置为false,游戏继续。守则: if (onScreen){ g.setFont(new Font("Geneva", Font.BOLD, 50)); g.se

在我的游戏中,我使用一个名为

onScreen
每次游戏开始时,它都设置为真。我还有一个int变量,叫做

onScreenTime
游戏开始时设置为180。这些用于在一定时间内在屏幕上描绘文本“为X波做好准备”。由于onScreenTime为180,fps为60,因此文本仅显示2秒钟。2秒后,屏幕设置为false,游戏继续。守则:

if (onScreen){
        g.setFont(new Font("Geneva", Font.BOLD, 50));
        g.setColor(Color.BLACK);
        g.drawString("Prepare for wave: " + currentLevel,400,500);
}
仅当onScreen=true时才在屏幕上绘制文本。下面的代码位于update()方法中,用于处理到目前为止提到的两个变量:

onScreenTime--;
    if (onScreenTime == 0){
        onScreen = false;
}
基本上,每次调用update()时,屏幕时间都会减少1(每秒60次),如果它等于0,则屏幕时间=false。然后在同一个update()方法中,我有两个if语句,它们应该是非常自解释的:

if (score > 500){
        currentLevel = 2;
        onScreen = true;
        onScreenTime = 180;
}
if (score > 1000){
        currentLevel = 3;
        onScreen = true;
        onScreenTime = 180;
}
最后,在相同的update()方法中

if (currentLevel == 1 && onScreen == false){
        wave(2,enemyP,100);
}
if (currentLevel == 2 && onScreen == false){
        wave(3,enemyP1,90);
}
if (currentLevel == 3 && onScreen == false){
        wave(3,enemyP2,80);
}
currentLevel决定敌人、他们绘制的图像、一次在屏幕上绘制的数量以及他们产卵的频率。wave()是为每个级别创建波浪的方法。其代表是:

public void wave(int amount, Image i, int seconds){
    for (int x = amount; x > 0; x--){
        if (frameCount % seconds == 0){
            Random r = new Random();
            int randX = r.nextInt(width - 20)+10;
            army.add(new EnemyShip(randX,(int)(Math.random()*100)-300,enemyH,enemyW,i,10));
        }
    }
}
i是图像,enemyH和enemyW=30,10是生命。这将在以后改变。我的问题是,一旦文本“为wave:2做准备”出现,它就不会消失。第一个“准备波浪:1”可以正常工作并消失,但第二个不能,因此不会产生任何敌人

编辑: 正如评论中指出的,我写了2秒,应该是3秒。 编辑: 我将以前的方法更改为:

if (onScreenTime <= 0){
        onScreen = false;
        onScreenTime = 180;
}
if (score == 500){
        currentLevel = 2;
        onScreen = true;
        onScreenTime = 180;
}
if (score == 1000){
        currentLevel = 3;
        onScreen = true;
        onScreenTime = 180;
}

每击中一次,得分就增加20分。我相信问题是我把它设置为if(分数>500),而不是==500

这部分不应该:

onScreenTime--;
if (onScreenTime == 0){
    onScreen = false;
}
同时重置屏幕时间:

onScreenTime--;
if (onScreenTime <= 0){
    onScreen = false;
    onScreenTime = 180;
}
屏幕时间--;
如果(屏幕时间尝试更改

onScreenTime--;
if (onScreenTime == 0){
    onScreen = false;
}

屏幕时间--;

如果(在屏幕上)添加了该部件,但问题仍然存在:(这可能是一个愚蠢的问题,但你确定你达到了第三级所需的1000分吗?是的。为了测试的目的,我将它改为100分,当我达到时,问题仍然存在。@archangel如果你可以,编辑你的答案并公布问题所在,我很好奇。我在第二次编辑中为问题添加了代码,它显示了所有的问题。)我改变了。如上所述,我改变了它,但它并没有解决问题。文本仍然留在屏幕上。是的,我的意思是3秒xD我的完整更新方法的badA帖子现在可能很有趣。这将不是必要的,因为我发现了问题。
onScreenTime--;
if (onScreenTime <= 0){
    onScreen = false;
    onScreenTime = 180;
}