gpt4 book ai didi

java - GUI 不更新简单游戏中的值

转载 作者:行者123 更新时间:2023-12-01 20:52:10 25 4
gpt4 key购买 nike

我正在使用 Swing 库制作一个简单的 2d 平台游戏,我试图在 GUI 中不断显示不同的值。这些值在第一个级别中更新并完美运行,但在下一个级别中它们保持不变。

GUI 代码:

public class MyView extends UserView {

Player player;

private Image background;
private Image newBackground;

public MyView(World world, Player player, int width, int height) {
super(world, width, height);
this.player = player;
this.background = new ImageIcon("data/rainy.gif").getImage()
.getScaledInstance(1000, 1000, 1000);
}

@Override
protected void paintForeground(Graphics2D g) {
g.drawString("Lives left: " + player.getLifeCount(), 650, 20);
g.drawString("Blue hearts picked: " + player.getBlueHeartCount(), 650, 30);
g.drawString("Time left: " + player.getTimeCounter(), 650, 50);
}
}

到达第二层时,player.getLifeCount()player.getBlueHeartCount()player.getTimeCounter() 卡住并停止更新。

以下是级别 1 和级别 2 的相关代码(未导入),其中值已更改:

public class Level1 extends GameLevel implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
if (getPlayer().heartPick) {
timer.stop();
} else if (player.getTimeCounter() <= 0) {
System.exit(0);
} else {
counter -= 1;
player.setTimeCounter(counter);
}
}

2 级代码:

public class Level2 extends GameLevel implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
// System.out.println("Action event!");
if (getPlayer().heartPick) {
timer.stop();
} else if (player.getTimeCounter() <= 0) {
System.exit(0);
} else {
counter -= 1;
player.setTimeCounter(counter);
}
}
}

下面是主类的相关代码:

public class Game {
private GameLevel world;

private MyView view;

private int level;

// timer
private Timer timer;

public Game(){

// make the world
level = 1;
world = new Level1();
world.populate(this);

// make a view
view = new MyView(world, world.getPlayer(), 800, 600);

// display the view in a frame
final JFrame frame = new JFrame("Event handling");

// start!
world.start();
}

// return world
public GameLevel getWorld() {
return world;
}

// the player in current level
public Player getPlayer() {
return world.getPlayer();
}

// Progress to next level
public void goNextLevel() {
world.stop();

switch (level) {
case 4:
System.exit(0);
case 2:
level++;

// get a new world
world = new Level2();

// fill world
world.populate(this);

// show the new world in the view
view.setWorld(world);

view.setBackground(2);
world.start();
break;

case 3:
level++;

//get new world
world = new Level3();

//fill world
world.populate(this);

// show the new world in the view
view.setWorld(world);

view.setBackground(3);
world.start();
break;

default:
level++;
break;

}
}
}

最佳答案

goNextLevel 中的 switch 语句是根据您将要进入的级别而不是当前所在的级别进行切换的。因此,当您处于第 1 级并点击 goNextLevel block 时,它会转到 default。您希望根据曾经的级别而不是将来的级别进行切换,因为您正在该语句中更新它。

关于java - GUI 不更新简单游戏中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169215/

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