XNA Game Studio Express beta 2

XNAの beta 2 が出ました。まだ使ってませんが、以下のブログを読んでみたところ、Update や Draw の順序が制御できるようになったのが大きな点だと思います。せっかくなので和訳メモを取っておきました。

元ネタ
http://blogs.msdn.com/xna/archive/2006/11/01/beta-2-changes-part-i.aspx

Designers

デザイナブルなゲームとゲームコンポーネントはサポートされません。Xbox上でのことを考えた場合、取り去ることが妥当だと考えました。しかし、ゲームコンポーネント自体が無くなったわけではなく、直接コードを編集することしかできなくなっただけです。

Game

ゲームはほとんど変わってません。

  • Starting イベントと OnStarting メソッドがなくなりました。
  • Starting の代わりに Initialize が追加されました。依存関係のチェックと、非グラフィックスコンテンツのロードはここで行ってください。
  • LoadGraphicsContent と UnloadGraphicsContent が追加されました。これによって GraphicsDevice などからくるイベントを見る必要がなくなりました。これらのメソッドは適切なタイミングで呼び出されます。
  • BeginRun と EndRun が追加されました。これらは protected virtual なのでオーバーライドすることができ、最初に一度だけ実行されるような初期化や、終了時のハイスコア保存などができます。
  • Update と Draw が GameTime という引数を取るようになりました。GameTime を使ってメソッドが呼び出されたタイミングを知ることができます。
  • Game から時間に関係したプロパティがなくなりました。GameTime がこれらの情報を提供するため、Game からは必要なくなったからです。
  • BeginDraw と EndDraw が追加されました。これらはデバイスを管理するために Game によって使われます。BeginDraw はデバイスが使用可能な状態かどうかを検証します。もしそうでなければ、Draw は呼ばれません。これによってベータにあった EnsureDevice が不要になりました。EndDraw は Present を呼び出します。これらのメソッドはオーバーライドすることができますが、普通はその必要はありません。
  • UpdateComponents と DrawComponents がなくなりました。かわりにbase.Update と base.Draw を呼び出してください。

GameComponents

上で説明した通り、GameComponents はなくなってはいません。ベータの時の意見を反映し、より良くなりました。

  • IGameComponent インターフェイスが追加されました。これは Game.Components に入れるために要求される最低限の実装です。このインターフェイスは初期化フックを提供します。
  • IUpdateable インターフェイスが追加されました。これによって描画を必要としない"ロジック オンリー"なコンポーネントが作れます。
  • IUpdateable インターフェイスを通した Enabled が追加されました。これによってプログラムでコンポーネントのオン・オフを制御できます。
  • IUpdateable インターフェイスを通した UpdateOrder が追加されました。これによってコンポーネントのアップデート順序を制御できます。
  • IDrawable インターフェイスが追加されました。これによってアップデートと独立した描画が可能となりました。
  • IDrawable インターフェイスを通した DrawOrder が追加されました。これによって描画順序が制御できます。
  • IGameComponent と IUpdateable のデフォルト実装が GameComponent によって提供されます。これによって何かが描画されることはありません。
  • GameComponent から派生し、IDrawableをサポートした DrawableGameComponent が追加されました。さらにコンポーネントが IGraphicsDeviceService サービスへ問い合わせることが不要になりました。GraphicsDevice プロパティが提供され、Game と同様に LoadGraphicsContent と UnloadGraphicsContent が提供されます。

ここでの大きな変更はロジックと、ロジック+ビジュアルの実装を提供することで、コンポーネントのレイヤリングができるようになったことです。ほとんどの場合、GameComponent か DrawableGameComponent を継承するだけで済むでしょう。

GraphicsDevice Management

ベータ版では GraphicsDevice の作成や管理をする GraphicsComponent というコンポーネントがありましたが、これは GraphicsDeviceManager となり、コンポーネントではなくなりました。機能はあまり変わっていません。

Summary

ここまでの説明でアプリケーションモデル、変更点、モチベーションなどが理解していただけたかと思います。