我的代码
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame("Flappy bird");
frame.setSize(1200, 800);
FlappyBird game = new FlappyBird();
frame.getContentPane().setBackground(Color.YELLOW);
frame.add(game);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
while (true) {
game.moveBall();
game.gameOver();
game.moveRect();
game.repaint();
Thread.sleep(14);
}
}
为什么frame.getContentPane().setBackground(Color.YELLOW);
无效?
我试图重新排列顺序,比如在框架可见后设置颜色。
答案 0 :(得分:2)
它可以正常工作,但是您无法看到背景颜色,因为您的FlappyBird
实例是在它上面绘制的。你可以通过用如下的空画布替换你的游戏类来轻松验证这一点:
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame("Flappy bird");
frame.setSize(1200, 800);
//FlappyBird game = new FlappyBird();
Canvas game = new Canvas();
frame.getContentPane().setBackground(Color.YELLOW);
frame.add(game);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
// while (true) {
// game.moveBall();
// game.gameOver();
// game.moveRect();
// game.repaint();
// Thread.sleep(14);
// }
}
您可以尝试两件事:
game
://frame.getContentPane().setBackground(Color.YELLOW);
game.setBackground(Color.YELLOW);
game.setOpaque(false);
答案 1 :(得分:0)
删除与游戏相关的行,我能够以预期的黄色结果运行它。问题必须在while循环中
while (true) {
game.moveBall();
game.gameOver();
game.moveRect();
game.repaint();
Thread.sleep(14);
}
或
frame.add(game);
如果没有FlappyBird类,就不可能确切地说出造成问题的原因,但根据方法名称,我会看看repaint()。