如何写一个闪屏?

时间:2013-03-03 14:22:02

标签: java swing jframe

我正在使用Java制作游戏。

目前,我有几节课。重要的是:

  • LevelBuilder类,在调用默认构造函数的情况下,将创建一个包含所需组件的jframe,然后运行一个游戏循环线程,该线程将使用后备缓冲区更新1/20秒。
  • 另一个类是MainMenu类,我希望在JFrame中显示主要方法并显示我的徽标。

最后我想让MainMenu为JFrame绘制一个启动画面,然后在5秒后将LevelBuilder绘制到原始JFrame中,而不创建新的.JFrame。

很抱歉,如果这是一个基本问题,我刚开始学习Java。

1 个答案:

答案 0 :(得分:3)

通过清单可以简单地将启动画面添加到您的jar中。

问题是默认情况下,只有在加载Swing应用程序时它才会显示。因此,第二个(第3个第4个等)执行显示快速启动画面,因为已经加载了GUI使用的JVM和类等。

在我的游戏中创造一个持续时间更长的飞溅我有这两种方法:

/**
 * This will render the splash for longer than just loading components
 *
 * @return true if there is a splash screen file supplied (set via java or
 * manifest) or false if not
 * @throws IllegalStateException
 */
private boolean showSplash() throws IllegalStateException {
    final SplashScreen splash = SplashScreen.getSplashScreen();
    if (splash == null) {
        return false;
    }
    Graphics2D g = splash.createGraphics();
    if (g == null) {
        return false;
    }
    for (int i = 0; i < 100; i++) {//loop 100 times and sleep 50 thus 100x50=5000milis=5seconds
        renderSplashFrame(g);
        splash.update();
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
        }
    }
    splash.close();
    return true;
}

private void renderSplashFrame(Graphics2D g2d) {
    //draw anyhting else here
}

将被称为:

JFrame frame=...;

 ...

//show splash
if (!showSplash()) {
     JOptionPane.showMessageDialog(null, "SplashScreen could not be shown!", "Splash Error: 0x003", JOptionPane.ERROR_MESSAGE);
 }

// set JFrame visible
frame.setVisible(true);
frame.toFront();

请注意,showSplash()表示如果没有提供启动画面,它将返回false,即您尚未向清单添加一个。

如果你还没有,我也建议你阅读How to Create a Splash Screen

另见其他类似的答案/问题:Make splash screen with progress bar like Eclipse