gpt4 book ai didi

java - 在 update() 方法中重置 boolean 值和 int 值时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:34:44 26 4
gpt4 key购买 nike

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

onScreen

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

的 int 变量
onScreenTime

游戏开始时设置为 180。这些用于在屏幕上描绘文本“准备第 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() 时 onScreenTime 都会减少 1(每秒 60 次),如果它等于 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);
}

当前等级决定了敌人、他们绘制的图像、一次在屏幕上绘制的数量以及它们生成的频率。 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是图像,敌人H和敌人W = 30,10是生命。稍后会改变这一点。我的问题是,一旦文本“Prepare for 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(score > 500) 而不是 == 500。

最佳答案

尝试改变

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

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

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

将 onScreenTime 重置回 180(很可能)会让您当前的问题消失。

顺便说一句:

Since onScreenTime is 180, and the fps is 60, the text is only displayed for 2 seconds.

我预计它是 3 秒:180/60=?

关于java - 在 update() 方法中重置 boolean 值和 int 值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25734643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com