我准备编写一个小游戏。我有我的主要课程MenuFrame
,我称之为我的Gui
课程来吸引我的游戏。
MenuFrame.java:
public class MenuFrame extends JFrame implements ActionListener {
private JButton start;
public static void main(String[] args) {
MenuFrame mainframe = new MenuFrame("Menu");
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainframe.setSize(600, 400);
mainframe.setLayout(null);
mainframe.setVisible(true);
}
public MenuFrame(String title) {
super(title);
start = new JButton("Start game");
start.setBounds(220, 60, 160, 40);
start.addActionListener(this);
add(start);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == start) {
game(hauptSpiel);
}
}
public static void game() {
JFrame game = new JFrame;
game.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
game.setUndecorated(true);
game.setResizable(false);
game.setSize(480, 800);
game.setLocation(1920/2-480/2, 1080/2-800/2);
game.setVisible(true);
game.add(new Gui());
}
}
正如您所看到的,我从我的Gui()
虚空中打电话给我的班级game()
在我的Gui
课程中,我做了一些绘画。
该课程看起来有点像这样:
public class Gui extends JPanel implements ActionListener {
public Gui() {
setFocusable(true);
ImageIcon i = new ImageIcon(background.jpg);
background = i.getImage();
ImageIcon b = new ImageIcon("ball.png");
ball = b.getImage();
}
public void paint(Graphics g) {
Graphics2D f2 = (Graphics2D)g;
f2.drawImage(background, 0, 0, null);
f2.drawImage(ball, 0, 600, null);
}
}
为了清晰和易于理解,我删除了我的游戏逻辑。
但是,如果游戏结束,我想将game()
JFrame
部署到MenuFrame
班级。
有没有办法干净顺利?
答案 0 :(得分:0)
我能想到两种方法来做到这一点。我自己还是比较陌生,但我自己也遇到过这种情况。这就是我如何做到的(我个人喜欢选项2,但不知道这是否是一种可接受的OOP技术)
自上而下:垃圾收集MO
1)在MenuFrame中有一个定期调用的方法,并在GUI /游戏对象中检查一个指示对象是否完成的布尔值。如果是真的,请将其丢弃。
自下而上:主动儿童MO
2)在MenuFrame中有一个方法来处理作为参数发送给它的对象。从#34;游戏"内部呼叫所述方法将自己作为参数传递。该方法可以是静态的以清除实例问题。如果安全性是一个问题(不要随意丢弃对象),请指定如果调用所述方法,则“儿童游戏”#34;处置。有点像吸气剂/定位器方法,它限制了可以处理的可能性。
请分享您的想法。