我正在开发一个基于主 JFrame 的图形棋盘游戏程序。游戏板本身源自 JPanel。
当有人获胜时,我希望能够在整个窗口上显示“胜利屏幕”。我想我可以从一开始就成功显示的“欢迎屏幕”扩展这个想法。当这段代码运行时,欢迎屏幕出现,停留 2 秒,然后消失,游戏板出现并准备好玩。希望这些基本部分足以说明我如何设置它:
public class MyGame{
public static Board b; //Board extends JPanel
public static Window gameWindow; //Window extends JFrame
...
public static void main(String args[]) throws IOException{
...
gameWindow = new Window("My Game");
//DisplayScreen extends JPanel
DisplayScreen intro = new DisplayScreen("welcomeScreen.png");
gameWindow.setSize(960, 570);
gameWindow.add(intro);
gameWindow.setVisible(true);
wait(2); //just a function I wrote
...
b = new Board("board.png");
...
gameWindow.remove(intro);
gameWindow.add(b);
gameWindow.repaint();
gameWindow.setVisible(true);
...
}
...
}
诚然,它需要大量的试验和错误才能让它发挥作用。不过,就我的一生而言,我无法弄清楚如何在游戏后期的某个时刻临时放置胜利画面。我想我可以通过中心MyGame
班的一个函数来做到这一点(我在Window
班上和其他地方都试过,但没有成功)。就像是:
public static void VictoryScreen(){
DisplayScreen victoryScreen = new DisplayScreen("victoryScreen.jpg");
victoryScreen.setVisible(true);
gameWindow.add(victoryScreen);
}
不幸的是,这没有显示任何内容。我已经尝试了各种方式,,,add
等等setVisible
,validate
并查看了其他一些问题,但似乎没有任何效果。我还尝试将victoryScreen
声明放在初始欢迎屏幕旁边并将其设置为不可见(然后在我想显示它时设置为可见),但这只是在一开始就在所有内容上放置一个灰色面板。似乎在构造某些东西时,它会自动绘制。将电路板作为另一个 JPanel 层似乎很冒险,但我对 JSwing 知之甚少。
无论如何,我被难住了。关于使胜利屏幕(以及最终其他屏幕)按需要显示的程序的任何建议?
*编辑:这是我覆盖paintComponent
屏幕显示类的方式:
public void paintComponent(Graphics g){
//works fine for welcome screen
g.drawImage(screenImage, 0, 0, 960, 540, null);
repaint();
}