「読み込み中」画面で何が起きているのでしょうか?


19

ファイルからロードされるすべてのグラフィックスのインスタンスをメモリに作成する必要がありますか?これを処理する最良の方法は何ですか?読み込み画面でこれらのグラフィックインスタンスを作成し、後で参照する何らかのアセットマネージャーが必要なのでしょうか?

ゲームにプリロードする必要がある一般的なものは何ですか?どのくらいプリロードする必要がありますか?

何らかのプログレスバーを表示する価値はありますか?ロード時間を短くするにはどうすればよいですか?ロード画面はどのように見えるべきですか?

ロード画面の良い例は何ですか?コード例はありますか?

具体的には、私のゲームはAndriod(Java /モバイル)向けですが、自由に回答を汎用化してください。


2
これは特にあなたが求めているものではないことを知っていますが、読み込み画面で何が起こるべきかについての私のアドバイスは次のとおりです。:)ちょっとしたストーリー(カットシーンなど)、ミニゲーム、または可能な限り既にメニューを表示して、プレイヤーを楽しませます。
バートヴァンヒューケロム

回答:


13

プリロードする典型的なものは、リアルタイムで必要なものです。クリップマップやメガテクスチャなどの概念を保存します(アイデアは必要な部分をロードし、世界中を動き回ってそれを繰り返し更新することです)、レベル/エリア/何でも必要なものすべてを保持したいと思うでしょうディスクではなくメモリ内。IOは遅いので、角を曲がって表示しようとしているときにテクスチャをロードしたくありません。そして、すべてとは、テクスチャ、サウンド、メッシュ、メタデータ...すべてを意味します。

進行状況バーを表示できる場合(つまり、負荷ステップのパーセンテージへの正確なマッピングがある場合)、必ず表示します。そうでない場合は、少なくとも短いテキストメッセージや読み込みインジケーターなどの何かを表示します。これは各ステップの後に更新され、少なくとも何かが起こっていることを伝えることができます。

すぐに必要ではないことがわかっている何かがある場合は、それをバックグラウンドでロードし、早すぎる必要がある場合はゲームを停止できます(素晴らしいことではありませんが、めったに起こらないことを確認してください)。これにより、ロード時間を短縮できます。Androidの開発についてはあまり知りません。または、デバイスがゲームと並行して処理するのが多すぎるかどうかはわかりませんが、通常はCPUがかなり軽いので、大きな問題はありません。


19

「網状スプライン」である必要があります


2
母、素敵なリファレンス:)
ブライアンデニー

これは明らかに冗談ですが、ロード中にプレイヤーを占領し続ける素晴らしい例を参照するために+1されます。ナンセンステキストを追加する以上の労力を必要としないこのような単純な手法。「Do n't Starve」はこれをうまくやるゲームのもう1つの例であり、偶然にも「網状」にも関係しています(dont-starve-game.wikia.com/wiki/World_Generation_Screen
twiz

3

1つの読み込み画面とインスタントレベルの移行または複数の読み込みのどちらを使用するかによって異なります。
後者の方がメモリ上で優れていると思います。
何かのようなもの:
//First loading screen
Load menu layouts or whatever
Load GUI assets
Show something to pass the time
Switch to menu

//In between levels
Remove any graphics specific to the last level - get rid of something that isn't going to reappear like a boss.
Load level graphics that haven't already been loaded
Again, show progress or something to pass the time

読み込み中は、黒い画面が表示されないようにしてください。またはそのことについては、静的な画面。多くの場合、アプリの起動時にしばらくの間静的な画像を見ましたが、すぐにクラッシュしたと思いました。
プレイヤーを関与させるための良い方法は、ゲーム内のシーンの背景をうまく描画するか、ストーリー展開のリファレンスを作成することです。静的な「読み込み中」でない限り、パーセンテージ付き/なしの読み込みバー。そして、おそらくいくつかの情報。


1
しかし、Peteのために、パーセンテージでアニメーション化されたローディングバーがある場合、90%の時間で10%に留まってから100%にジャンプするのではなく、徐々に正確に上昇するようにします。パーセンテージでないロードアニメーションがある場合は、少なくともロードをポーリングするように作成します。この方法で、何らかの理由でロードがクラッシュしたときに停止できます。独自のスレッドでロードアニメーションをアニメーション化するゲームが多すぎます。ロードスレッドがクラッシュすると、アニメーションが正常に再生されます。これは、ロードアニメーションの目的に反します。
カイ

そこで完全に同意できます。それがそのように跳ぶならば、私はそれがうまくやったとは思わない。
共産主義のダック

2

iPhoneおよびAndroidプラットフォームでは、すべてのテクスチャとサウンドをロードする必要があります。iphone 2G、3G、またはG1のような古い携帯電話では、テクスチャとサウンドの読み込みが非常に遅くなります。ゲームではできません。


2

他の人が言ったように、再生を開始する前にレベルのすべてのデータをロードできれば、パフォーマンスが大幅に向上します。ゲームプレイ中にアセットをロードすることは、フレーム時間のヒッチの一般的な原因です。

読み込み画面で行う一般的なことは、静的な背景画像、非常にシンプルなレベル、再生方法に関するいくつかのヒントとコツ、クイックアニメーションなどです。

APBの読み込み画面は次のとおりです。かなりおかしい。:) http://www.youtube.com/watch?v=p5STix1t_1E&feature=related

ロード画面にプログレスバーを表示するための擬似コードを次に示します。



LoadScreen::Init()
{
  mAssetsToLoad.add("Background.png");
  mAssetsToLoad.add("Player.png");
}

LoadScreen::Update()
{
  mProgress += 1;
  mAssetManager.load(mAssetsToLoad.top());
  mAssetsToLoad.pop();

  if mAssetsToLoad.empty()
    mDone = true;
}


LoadScreen::Draw()
{
  for( int i = 0; i != mProgress; ++i)
  {
     Vector2 pos(i*mProgressPartTexture.Width, 100);
     DrawProgressBarPart(pos, mProgressPartTexture);
  }
}

ええと、!=の使用を強制されました。これは、<


1
うわー、APBの読み込み画面は本当にクールに見えます:)
ブライアンデニー

<pre> <code>タグを使用する代わりに4つのスペースを使用してコードをインデントすると、フォーマットを壊さずに!=の代わりに<を使用できます。
mmyers

mmyers、ええ、しかしそれはお尻の大きな痛みです。カスタムコードタグだけが存在しないのはなぜですか?
-Srekel

1

読み込み画面は、ほとんど何でも隠すために使用できます。アセットのロード、接続に必要な接続(tcpなど)、マップへのゲームオブジェクトの入力、初期化。

私が物事に取り組む傾向があるのは、ある種のアセットマネージャー(またはサウンド、グラフィックスなどの各アセットタイプのマネージャー)を用意し、使用するものをメモリにロードさせることです。それから、あなたのゲームにマネージャーから参照を引き出すだけです。

進行状況バーの表示、プリロードする内容の決定などは、プロジェクト、ロード時間、好みに依存しているようです。進行状況バーは、正確であり、負荷が大きい場合に便利です(待機時間を知るのは便利です)。

そうは言っても、Android搭載の携帯電話では、独自のカスタムで上品なロード画面を備えたアプリを好む傾向があります。バーは必要ありませんが、アニメーションはユーザーにプログラムが機能していることを伝えます。Androidには、使用できるデフォルトのバーがあり、それでうまくいくと思います。

興味を引くかもしれないSOの質問を次に示します。


1

品質管理要件を備えたプラットフォーム(X360、PS3、DSなど)では、読み込み画面(または実際には数秒以上静止している画面)で何らかのアニメーションを表示する必要があることに注意してください)。

これは、実際にはロードに時間がかかるだけであるにもかかわらず、ユーザーがゲームがクラッシュしたと考える可能性があるためです。これが要件ではない場合でも、私は確かにそれをお勧めします。

どんな形式のアニメーションでも構いませんが、単純なプログレスバーは最適ではない場合があります。ロードの大きなステップにより、プログレスバーがしばらく動かなくなる可能性があります。つまり、画面はバーはまったくありません。進行状況インジケーターに加えて、回転アイコンのような継続的に移動する画像を表示する方が良いでしょう。


1
もちろん、ローダーが非同期でロードしている場合は、進行状況をポーリングしてパーセンテージをより正確に更新できるようにする必要があります。そのようにして、プレイヤーは、もしそれがパーセンテージで動けなくなるならば、実際に何か間違っていることを知っています。また、他の場所で述べたように、ロードスレッドがまだ実行中であるかどうかを実際に確認せずにアニメーションを更新しないでください。
カイ

1

Conquestの読み込み画面については、ミッションの説明(ゲームの種類、ミッションのストーリーライン)、およびコマンドに関する基本的なヘルプを少し説明しました。

バックグラウンドで、サウンドをロードしていました。グラフィックはすべてオンデマンドで読み込まれ、ゲームではかなりうまく機能しているように見えましたが、音は弱かったので、ミッションに必要なすべての音をプリロードしました。読み込み/開始ボタンはすべてが読み込まれるまで無効になっていますが、アニメーションの種類はありません(追加するのが良いことです)。

これは最初のゲームであるため、まだ多くのことを学んでいますが、これまでのところうまくいきました。

征服のロード画面

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.