XNAゲームループの更新と描画


7

ゲームのメソッドがどのように呼び出され、いつ呼び出されるかについて混乱しています。

だから私はシーケンスが次のとおりであることを読みました:

  1. 初期化
  2. LoadContent
  3. 更新
  4. ドロー
  5. UnloadContent

ここで、3と4はゲームループです。したがって、after Updateが呼び出さDrawれ、次にが呼び出され、次にUpdate、then Draw、then 、... ゲームループ(更新と描画)は1秒あたり60回実行されます。

そして、私はそれを別の場所に読みUpdateDraw異なる時間に呼び出すことができ、Update1時間前にもっとして呼び出すことができDraw等々 。

...そして最後に、メソッドがUnloadContent呼び出された後に呼び出されます。UpdateExit


1秒あたり60フレームは、isFixedTimeStepがtrueに設定されていることを前提としています。PCから最大のパフォーマンスを引き出す場合、または一般的なベンチマークを行う場合は、falseに設定できます。
ChrisC、2011

回答:


11

XNAがゲームループを実行する方法には、固定ステップと可変ステップの2つがあります。固定ステップを実行するようにゲームを設定すると、目標とするゲームの経過時間に基づいて、Updateメソッドが常に呼び出されます。したがって、コンピュータがどれほど高速であっても、常に同じ経過時間間隔でUpdateメソッドが呼び出されるため、説明したようにUpdateとDrawが連続して呼び出されます。ただし、ゲームの実行速度が遅い場合、XNAは「追いつく」ために、Drawメソッドの前にUpdateメソッドを複数回呼び出し始めます。

一方、可変ステップでは、ゲームの実行速度が遅い場合、「追いつく」ことや、Drawメソッドを呼び出す前に複数のUpdateメソッドを呼び出すことはありません。

編集:固定ステップと可変ステップを説明する素敵なフォームの投稿は、はるかに深みがあります。gamedev.net


6
(私にとって)それがどのように機能するかについての最良の説明はここにあります:GameTimeの理解-Shawn Hargreavesブログ
Richard Marskell-Drackir

ありがとう、でも16ミリの時はまだ分かりません。各呼び出しの間は、すべてのゲームループ、またはUpdate、Drawメソッドの順になります。
xdevel2000 2009

@ xdevel2000では、ゲームループはUpdateメソッドとDrawメソッドだけです。ただし、UpdateメソッドとDrawメソッド内で他のメソッドを呼び出すことができます。これらはすべてゲームループの一部になります。
クーパー

@Neeko、はい、あなたは私の質問に答えません!16ミリかどうかお願いします。各メソッドまたはすべてのゲームループ(更新および描画)用です。ありがとう。
xdevel2000 2011

@ xdevel2000 1年以上後にこれに答えて申し訳ありませんが、この質問に気づきました!16msは、1つのゲームループサイクル全体に対するものです。そのサイクル内で呼び出されるすべてのメソッドについてではありません。
クーパー

0

Windows用のゲームを作成していて、管理されていないコンテンツを読み込んでいる場合を除き、UnloadContentについて心配する必要はありません。SpriteBatchを使用して描画し、SoundEffectオブジェクトとSongオブジェクトを再生するだけの場合は、今のところUnloadContent()を忘れてください。

更新と描画の場合、XNAを使い始めるときは、XNA Frameworkが自動的に更新、描画、更新、描画の順に呼び出されることを覚えておいてください。例外はありますか?はい。あなたが始めているときにそれらについて心配する必要がありますか?いいえ、あなたがすでに経験豊富なゲーム開発者でない限り。もしそうなら、私の謝罪を受け入れます...

ゲームで固定時間ステップを使用している場合は、このループが時間ステップよりも速くならないように遅延します。Windows Phoneプロジェクトは、ゲームを30fpsに修正するコード行を追加します。まったく新しいWindowsゲームプロジェクトを作成してから、新しいWindows Phoneゲームプロジェクトを作成するだけで、そのことについて少し学ぶことができます。タイムステップを修正するWindows Phoneプロジェクトの1行のコードを探します。

ショーンハーグリーブスの投稿をご覧になるための上記のコメントに注目してください。実際、XNAフレームワークについて率直な開発者の話をしたい場合は、彼がソースです。投稿するには数年かかりますが、それは良いリソースです。


1
UnloadContentを少し拡張すると、Gameオブジェクトが提供するデフォルトのContentManagerに適用されることになります。ゲーム内のさまざまなコンテンツをロードして管理するための新しいContentManagerを自分で作成できますが、この場合は必要ありません。デフォルトのContentManagerは、ゲームの終了時に破棄され、コンテンツが自動的にアンロードされます。
ChrisC、2011

-2

順序を変更する方法はわかりませんが、UpdateとDrawは単なる関数なので、他の場所から呼び出すことができますが、これの使用法は考えられません。原則として、あなたが言ったように、更新、描画、更新、描画などを使用するだけです。

出口関数が呼び出された後にアンロードが呼び出されます。

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