我正在使用 Java 制作游戏。
目前,我有几节课。重要的是:
- LevelBuilder 类,在调用它的默认构造函数时,将创建一个具有所需组件的 jframe,然后运行一个游戏循环线程,该线程将使用后台缓冲区更新甚至 1/20 秒。
- 另一个类是 MainMenu 类,我希望在其中包含 main 方法并在 JFrame 中显示我的 Logo 。
最后,我想让 MainMenu 在 JFrame 上绘制一个启动屏幕,然后 5 秒后让 LevelBuilder 在原始 JFrame 内绘制,而不创建新的 JFrame。
抱歉,如果这是一个基本问题,我刚刚开始学习 Java。
最佳答案
那么,可以通过 list 将启动屏幕简单地添加到您的 jar 中。
问题是默认情况下它只会在 Swing 应用程序加载时显示。因此,第二次(第三次、第四次等)执行显示闪屏速度很快,因为 JVM 和 GUI 使用的类等已经加载。
在我的游戏中,为了创建停留时间更长的飞溅效果,我有以下两种方法:
/**
* 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()
表示,如果没有提供启动画面,即您没有在 list 中添加启动画面,它将返回 false。
我还推荐阅读 How to Create a Splash Screen如果您还没有。
另请参阅其他类似的答案/问题:Make splash screen with progress bar like Eclipse
关于java - 如何编写启动画面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186662/