移植の際「Windowsフォームアプリケーション」の新規プロジェクトから制作を開始する
自作のプロジェクトに以下の3つのファイルをコピーする
  • GraphicsDeviceControl.cs
  • GraphicsDeviceService.cs
  • ServiceContainer.cs

プロジェクト内でXNAフレームワークを利用するため以下のアセンブリを参照設定に加える
  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics

これらに加えテクスチャやフォントを扱うための
①コンテンツフォルダ(空のコンテンツプロジェクト) 名前は「Content」推奨
②Windowsゲームライブラリのプロジェクト 名前は「ContentLibrary」推奨
が必要になる。

これらに ②に「コンテンツ参照を追加」して①を指定する。 同時に自作のプロジェクトの参照設定に「参照の追加」で②を指定する。
これによりWinformのプロジェクトでありながらXNAのコンテンツ参照の様な動作が行えるようになる
新たに作成したテクスチャやフォント、モデルなどの必要なゲームアセットは①に保存してcontent.Load<T>で読み込む

<補足>
プロジェクト名の途中変更などは設定関係が崩れIDEの動作が不安定になるので厳禁(少なくとも現時点のスキルでは・・・)
どうしても、コンテンツディレクトリが認識されない状況が続くなら初めからやり直すように

自作のXNAが動くコントロールは「GraphicsDeviceControl」を継承して作成できる

作成直後はビジュアルスタジオのIDEがプログラム本体をWinFormのコントロールとして認識していないので
一度コンパイルを通し認識させてからWinformデザイナーの機能を使って配置作業すると良い
(認識すると歯車のアイコンが付いたパーツとしてツールボックス内に追加表示されるようになる)
再配置や場所の移動は基本的にビジュアルスタジオの非推奨な利用らしく非常に動作が怪しいので
再起動も織り交ぜながら作業すると良い

継承するとServices、GraphicsDevice のふたつのプロパティが利用できるようになる
また、Initialize()、Draw()メソッドをオーバライドする必要がある

雛形として以下のような形で利用すると良い。名前空間とXNA、WinFormのクラス名の競合などに注意してusingする事

namespace WindowsFormsXNA
{
   class XNAentry : GraphicsDeviceControl
   {
       ContentManager content;
       SpriteBatch spriteBatch;
       SpriteFont font;

       protected override void Initialize()
       {
           content = new ContentManager(Services, "Content");
           spriteBatch = new SpriteBatch(GraphicsDevice);
           font = content.Load<SpriteFont>("hudFont");
       }

       protected override void Dispose(bool disposing)
       {
           if (disposing)
           {
               content.Unload();
           }

           base.Dispose(disposing);
       }

       protected override void Draw()
       {
           GraphicsDevice.Clear(Color.Red);

           spriteBatch.Begin();
           spriteBatch.DrawString(font, "Test", Vector2.Zero, Color.White);
           spriteBatch.End();
       }
   }
}
最終更新:2012年08月12日 17:23