ゲームを作ってみました。ゲームを直接起動すると、ゲーム ロジックとペイントが正常に機能します。しかし、メニューからゲームを開始すると、空の 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();
}