2016-05-25 8 views
1

私は(あなたがゲーム、アニメーション会社のロゴを起動すると)スプラッシュ画面を作成するための最良の方法は何であるか疑問に思って。 After Effectsで.mp4スプラッシュ画面を作成しましたが、libgdxで表示する方法が見つかりません。スプラッシュ画面を作成する最善の方法は何ですか? .mp4ファイルを使用して再生できますか?Libgdx |スプラッシュ画面を作成するには?

+0

.mp4アニメーションはどのくらいですか?それは数秒か長いアニメーションですか? – AkashBhave

+0

@AkashBhave約10秒、30 fpsです。 – Wyatt

+0

情報ありがとう!私の答えを今追加する。 – AkashBhave

答えて

5

は、スプラッシュスクリーンを作るのは非常に奇妙な方法で、おそらくそれを行うには、「最良の」方法として受け入れられるべきではありません。スプラッシュ画面の目的は、ゲームやアプリがバックグラウンドで読み込まれている間に一時的に何かを表示することです。読み込むアセットがたくさんある場合は、遅いデバイスでアプリを準備するのに最大10秒かかる可能性があります。受け入れ答えは、非同期的に資産を読み込むについて全く何も言っていない、と単純なカウンタが「ゲームコード」に進む前に存在していることを考えると、1はすべてがすでにロードされた後、このスプラッシュ画面がのみ表示されることを想定することができ、そうでない場合があるでしょう資産がロードされていることを保証せず、そうでなければクラッシュします。

個人的には、スプラッシュ画面を作成する「最良の」方法は、できるだけ早く表示することです。アプリをクリックして開くときは、1秒未満で行うことをお勧めします。これを行う方法は、あなたのスプラッシュ画面を表示する必要があるだけAsset SをロードするためにAssetManagerを使用することです。次に、スプ​​ラッシュ画面が表示/アニメーション表示されている間に、AssetManagerに残りのコアコンポーネントを読み込むように指示します。終了したら、メインアプリに進みます。

このhereに関連するもう少し詳細な回答を掲載しました。libGDX WikiAssetManagerにはかなり詳細なガイドがあります。

ここでのキーはassetManager.update()です。これは2つのことを行います。 1の場合、AssetManagerには​​アイテムのキューがロードされ、2の場合は完了するとtrueが返されます。したがって、スプラッシュ画面が一定時間表示されていることを確認したい場合は、このようなことを行います。

public void render(float delta){ 
    //code to render splash here 

    //check if assets are loaded and time greater than 10 seconds 
    if(assetManager.update() && TimeUtils.timeSinceMillis(startTime) > 10000){ 
     app.setScreen(new MainScreen()); 
    } 
} 

また、libGDX Animationをお持ちの場合は、次のようになります。

if(assetManager.update() && animation.isAnimationFinished(startTime)){..} 
0

新しいアクティビティを作成せずにスプラッシュスクリーンを実装するための非常に簡単な方法があります。あなたのスプラッシュスクリーンのための時間を設定する方法は、あなたのアプリが最初に現在の時刻に方法(create()で)を開始だったときから違いを取ることです。あなたのクラスで直接開始時刻の変数を宣言します。

long startTime; 

あなたは時間がTimeUtils.millis()を使用して経過得ることができます。そのようなあなたのcreate()メソッドにこのコードを入れてください:

@Override 
public void create() { 
    // Initialize all your other variables here 
    startTime = TimeUtils.millis(); 
} 

次に(すべての時間を実行している)あなたのrender()方法では、経過時間を確認するためのコードを追加します。ここに例があります:

@Override 
public void render() { 
    if(TimeUtils.millis() - startTime != 10000) { 
     // 10 seconds haven't passed yet 
     batch.begin(); 
     // Creates a white background 
     Gdx.gl.glClearColor(1f, 1f, 1f, 1); 
     // Draw your animation here 
     batch.end(); 
    } else { 
     // Put real game code here 
    } 
} 

上記のコードは、基本的に10秒が経過していないかどうかを確認します。そうであれば、あなたのアニメーションを表示します。そうでない場合は、画面がロードされた後にすべての通常のコードを入力します。

残念ながら、Libgdxに.mp4ファイルを直接表示する方法はありません。これはあなたのアプリの問題かもしれません。 1つの解決方法は、thisウェブサイトを使用して.mp4ファイルを.gif(動画ファイル)に変換することです。 this .gifスプリッタを使用して、それらのフレームをすべて多くのイメージファイルに抽出できます。ビデオからフレームを抽出する別の方法がある場合は、その方法を使用してください。いったんやったら、すべての画像をループしてアニメーションを作成します。

Texture[] textures = new Texture[NUMBER_OF_FRAMES]; 
for(Texture t : textures) { 
    batch.draw(t, 
      Gdx.graphics.getWidth()/2 - t.getWidth()/2, 
      Gdx.graphics.getHeight()/2 - t.getHeight()/2); 
} 

もちろん、あなたは常にだけで表示する方がはるかに簡単である1枚の静止画像を、使用することができ、そして、あなたのrender()方法でそれを置く:ここでは何ができるかです。あなたの方法にかかわらず、この回答が役立つことを願っています!私は@AkashBhaveで受け入れ答えを言っている

+0

アニメーションをスプライトにレンダリングすることを考えましたが、アニメーションにサウンドがあります。それはスプライトがたくさんあります(30fps * 10秒= 300 1920 x 1080画像)。 – Wyatt

+0

イメージがたくさんあると言ったときに意味するものが得られますが、実際にそれを行う唯一の方法です。あなたはビデオをダウンスケーリングしてfpsを下げることができますが、それはそれです。しかし、サウンドについては、それを.mp3ファイルに変換してスプライトレンダリングと一緒に再生することができます。ここにサウンドドキュメントへのリンクがあります:https://github.com/libgdx/libgdx/wiki/Sound-effects – AkashBhave

+0

はい、あなたは正しいと思います。助けてくれてありがとう! – Wyatt

関連する問題