gpt4 book ai didi

Java - 即使调用方法,JPanel 也不绘制

转载 作者:行者123 更新时间:2023-12-02 06:57:49 25 4
gpt4 key购买 nike

我尝试创建一个游戏。如果我直接启动游戏,游戏逻辑和绘画工作正常。但是从菜单启动游戏后,JPanel 是空的。为什么?

直接开始游戏:

有一个名为 gameLoop() 的“不定式”循环,它会在游戏结束后停止。

public class Window extends JFrame {
public Window() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setTitle("Shop-Lifter");
setFocusable(true);
setVisible(true);
}

public static void main(String[] args) {
Window window = new Window();
GameCore gameCore = new GameCore(level);

window.setSize(gameCore.size);
window.add(gameCore);
gameCore.requestFocus();
gameCore.gameLoop();
window.dispose();
}
}

gameCore中有一个方法“paint”

@Override
public void paint(Graphics g) {
super.paint(g);
graphicsHendler.paint(g);
}

但我尝试创建一个“菜单”,您可以在其中选择一个级别。所以我创建一个 Window 对象,添加带有 2 个按钮的 JPanel。单击按钮后,游戏应该开始。但JFrame中只有灰色的JPanel。 GameLoop() 正在运行但未绘制。如果我不通过 gameCore.gameLoop(); 启动游戏,则会在创建对象后调用一次 paint()

创建游戏菜单:

public class Window extends JFrame {

public Window() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setTitle("Shop-Lifter");
setFocusable(true);
setVisible(true);
}

public static void main(String[] args) {
Window window = new Window();
WelcomeScreen levelChooser = new WelcomeScreen();
window.setSize(levelChooser.getPreferredSize());
window.add(levelChooser);
}
}

开始游戏的按钮方法:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
Window w = new Window();
GameCore gc = new GameCore(LevelLoader.loadLevel("ll1.lvl"));

w.setPreferredSize(gc.size);
w.add(gc);
w.requestFocus();
w.pack();
gc.gameLoop();
}

最佳答案

很可能gc.gameLoop()方法是一个阻塞调用,它会阻塞事件调度线程 (EDT)。如果是这种情况,您应该在单独的线程中执行此操作。另一种方法是使用主动渲染。

请参阅以下链接:

关于Java - 即使调用方法,JPanel 也不绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17072835/

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