我正在研究一个蛇游戏项目。我有三个名为的文件:
Engine.java
GameBoard.java
Snake.java
我在这个项目中添加了两个JFrames
。在第一帧中有三个按钮:
play
rules
exit
当我们点击rules
按钮时,它会打开rules jframe
(它正常工作)。当我们点击play
按钮时,它应该运行蛇游戏。当我点击play
按钮实际开始游戏时,请建议我该怎么做。
这是我在play
按钮actionPerformed
方法中复制的代码:
JFrame frame = new JFrame("SnakeGame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
Canvas canvas = new Canvas();
canvas.setBackground(Color.black);
canvas.setPreferredSize(new Dimension(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE));
frame.add(canvas);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
new Engine(canvas).startGame();
答案 0 :(得分:1)
在“播放”按钮中添加ActionListener
,调用相应的启动方法。
答案 1 :(得分:0)
我不知道,如果我理解你的问题:你的Snake.java是一个GUI吗? 如果是这样,那么当您点击播放按钮时,将GUI的对象设为“Snake”:
JButton play = new JButton("play");
play.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
Snake play = new Snake();
}
});
希望有所帮助。
答案 2 :(得分:0)
你很顽固,你可能不会显示更多代码所以我猜你有线程问题。如果startGame
中的Engine
持有主游戏循环,则需要将其作为线程运行,因为用户界面和逻辑需要分开。
看起来像这样:
JFrame frame = new JFrame("SnakeGame");
Canvas gui = new Canvas();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.getContentPane().add(gui);
frame.setSize(GameBoard.MAP_SIZE * GameBoard.TILE_SIZE, GameBoard.MAP_SIZE * GameBoard.TILE_SIZE);
frame.setVisible(true);
Thread gameThread = new Thread(new Engine(gui));
gameThread.setPriority(Thread.MIN_PRIORITY);
gameThread.start();
在该示例中,Engine
实现了Runnable
。您可以在Java 2D: Hardware Accelerating - Part 2 - Buffer Strategies找到更多信息。