0

私はJavaを使ってゲームを作っています。

現在、いくつかのクラスがあります。重要なものは次のとおりです。

  • LevelBuilderクラスは、デフォルトのコンストラクターが呼び出されると、必要なコンポーネントを含むjframeを作成し、バックバッファーを使用して1/20秒でも更新するゲームループスレッドを実行します。
  • もう1つのクラスは、mainメソッドをJFrameに表示するためのMainMenuクラスです。

最後に、MainMenuにスプラッシュ画面をJFrameに描画させ、5秒後にLevelBuilderに新しいJFrameを作成せずに元のJFrame内に描画させたいと思います。

基本的な質問であれば申し訳ありませんが、私はJavaを学び始めたばかりです。

4

1 に答える 1

3

スプラッシュスクリーンは、マニフェストを介してjarに簡単に追加できます。

問題は、デフォルトでは、Swingアプリの読み込みにかかる時間だけ表示されることです。したがって、2回目(3回目、4回目など)の実行では、GUIで使用されるJVMやクラスなどがすでにロードされているため、スプラッシュ画面が高速に表示されます。

より長くとどまるスプラッシュを作成するための私のゲームでは、次の2つの方法がありました。

/**
 * 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が返されることに注意してください。

また、まだ読んでいない場合は、スプラッシュ画面を作成する方法を読むことをお勧めします。

この他の同様の回答/質問も参照してください:Eclipseのようなプログレスバーでスプラッシュ画面を作成します

于 2013-03-03T17:47:53.493 に答える