在update()方法中重置boolean和int值的问题

时间:2014-09-08 23:32:55

标签: java int boolean updates side-scroller

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

的布尔变量
onScreen

并且每次游戏开始时都设置为true。我还有一个名为

的int变量
onScreenTime

在游戏开始时设置为180。这些用于在屏幕上描绘文本“准备Wave X”一段时间。由于onScreenTime为180,而fps为60,因此文本仅显示2秒钟。经过2秒后,onScreen设置为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()(每秒60次)时onScreenTime减1,如果等于0,则onScreen = 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()是一种为每个级别创建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));
        }
    }
}

我是形象,敌人H和敌人W = 30,而10是生命。这将在以后改变。我的问题是,一旦文本“准备波: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.

2 个答案:

答案 0 :(得分:0)

不应该这部分:

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

同时重置onScreenTime:

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

答案 1 :(得分:0)

尝试更改

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

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

竞争条件可能导致onScreenTime低于零,导致难以跟踪问题。

将onScreenTime重置为180将(很可能)使您当前的问题消失。

BTW:

  

由于onScreenTime为180,而fps为60,因此文本仅为   显示2秒钟。

我希望它是3秒:180/60 =?