我尝试创建游戏。如果我直接开始游戏,游戏逻辑和绘画工作正常。但是从菜单开始游戏后有空的JPanel。为什么?Java - 即使方法被调用,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
@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();
}
问题是,???? –
为什么我从菜单开始游戏后没有画任何东西 – cepak
为什么你有两条主线?你应该@Override'paintComponent'而不是'paint'在摆动组件 – nachokk