【发布时间】:2021-05-04 09:02:21
【问题描述】:
我需要使用 Swing 用 Java 制作一个刽子手游戏。我在 Photoshop 中制作了我的刽子手人物,并使用完整图像作为背景层,然后使用 JlayeredPane 将其他组件放在顶部。但是,当我添加 JFrame 并打开窗口时,总会有一点延迟。我尝试创建一个按钮以在单击时在 JLayeredPane 上添加和删除,但这会导致更大的延迟。任何帮助将不胜感激。
public class Game_Screen extends JLayeredPane {
private JLabel hangman;
public Game_Screen() {
super();
super.setBounds(0, 0, 1920, 1080);
hangman = new JLabel(new ImageIcon(Game_Screen.class.getResource("/images/hangman10.jpg")));
hangman.setBounds(0, 0, 1920, 1080);
add(hangman, Integer.valueOf(0));
}
}
游戏中窗格之一的示例
public class Home_Screen extends Game_Screen {
private JLabel title;
private JLabel score;
private JButton start;
public Home_Screen() {
super();
title = new JLabel("HANGMAN");
title.setBounds(490, 170, 942, 217);
title.setFont(new Font("Press Start", Font.PLAIN, 100));
add(title, Integer.valueOf(1));
score = new JLabel("High Score: 0");
score.setBounds(635, 330, 470, 67);
score.setFont(new Font("Press Start", Font.PLAIN, 30));
add(score, Integer.valueOf(1));
start = new JButton("START");
start.setBounds(635,400,400,120);
start.setBorderPainted(false);
start.setFont(new Font("Press Start", Font.PLAIN, 60));
add(start, Integer.valueOf(1));
}
public void addStartButtonListener(ActionListener a) {
start.addActionListener(a);
}
}
JFrame 类
public class HangmanGame extends JFrame {
private Home_Screen home;
private Level_Screen level;
private Win_Screen win;
private Lose_Screen lose;
private Play_Screen play;
public HangmanGame() {
super("Hangman");
home = new Home_Screen();
level = new Level_Screen();
win = new Win_Screen();
lose = new Lose_Screen();
play = new Play_Screen();
add(home);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(1920,1080));
setLayout(null);
setVisible(true);
}
public Home_Screen getHomeScreen() {
return home;
}
public Level_Screen getLevelScreen() {
return level;
}
public Win_Screen getWinScreen() {
return win;
}
public Lose_Screen getLoseScreen() {
return lose;
}
public Play_Screen getPlayScreen() {
return play;
}
}
控制器类
public class Controller {
private HangmanGame game;
public Controller() {
//game = g;
game = new HangmanGame();
game.getHomeScreen().addStartButtonListener(new startButtonListener());
}
class startButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
game.remove(game.getHomeScreen());
game.add(game.getLevelScreen());
}
}
}
【问题讨论】:
-
我会使用
CardLayout在主屏幕/级别屏幕之间切换 -
我可以将布局添加到 JFrame 中吗?我也可以使用带有 LayeredPane 的布局作为组件吗?
-
CardLayout将被添加到主组件中,是的,JLayeredPane可以在布局管理器中使用。我个人的做法是制作一系列刽子手的图像,然后简单地将icon更改为JLabel,可能会更容易更简单 -
那我试试,谢谢。我确实有一系列刽子手图像,但我还没有添加它们,我只使用一个图像进行测试。使用 CardLayout 是否也有助于解决我遇到的延迟问题?
标签: java swing jlayeredpane