我正在制作一个游戏,在其中创建一个JFrame,在该JFrame中初始化所有游戏对象,并且在框架内是一个新的JPanel,其中是paintComponent。游戏结束后,我希望游戏自动重启,创建新对象并将JPanel中所有内容的位置重置为开始状态,但同时使用相同的整体JFrame。
我有一个start方法,该方法在用于启动游戏的main方法中的当前类的新对象(称为Runner)上被调用:
private void start() {
/*initialized game elements here */
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
JPanel panel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
/* Drew objects here */
};
panel.setPreferredSize(new Dimension(800,600));
frame.add(panel);
frame.pack();
frame.setVisible(true);
mapKeyStrokesToActions(panel);
/* Timer */
timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
updateGame();
panel.repaint();
}
});
timer.start();
}
在尝试重置游戏时,此代码最接近工作状态:
if(gameOver()) {
frame.getContentPane().removeAll();
runner.start();
}
但是,在重置JFrame之后,任何映射到操作的击键均无效。我认为我的操作方式不正确,但是我不知道怎么做。
此外,我之前从未在这里问过问题,所以我不确定是否给出了足够的示例代码或说明,如果不够,我可以添加更多内容。