2D Game Developer TutorialをSilverlight+XNAに移植する
このポストでは、XNA Frameworkのみで解説されているhttps://create.msdn.com/en-US/education/tutorial/2dgame/getting_started をWindows Phone 7 Silverlight + XNAに移植する方法を解説します。
先ず、Windpws Phone 7 Silverlght + XNA プロジェクトテンプレートを使い、新しくプロジェクトを作成します。
Tutrialに書かれている手順で、新規にクラスを追加して作業を行う時はほぼそのまま手順に従ってコーディングを行ってください。
Creating a player:
Gam1.csはGamePage.xaml.csと読み替えてください。
GraphicsDeviceのメソッド、プロパティにアクセスしている部分は、一旦以下のコードでGraphicsDeviceのインスタンスを作成し、そのインスタンスのメソッド、プロパティにアクセスするように変えます。
GraphicsDevice graphicsDevice = SharedGraphicsDeviceManager.Current.GraphicsDevice;
次にContentです。こちらは、プロジェクトを生成して、GamePage.xaml.csが作られた時に、自動的にGamePageクラスにcontentManagerというメンバー変数が生成されています。このメンバー変数に置き換えればOKです。
Tutorialでは、Initialize()、LoadContent()というメソッドが出てきますが、このメソッドは生成されていないので、GamePageクラスにprivate void Initialize()、private void LoadContent()メソッドを追加し、このメソッドをコールするステートメントを、OnNavigateTo()メソッドの
// TODO: ここで this.content を使用してゲーム コンテンツを読み込みます
LoadContent();
Initialize();
と書いておきましょう。そして、それぞれのメソッドに処理を書いていきます。
TutorialのUpdate()、Draw()メソッドは、GamePage.xaml.csのOnUpdate()、OnDraw()にそれぞれ対応します。対応するメソッドに処理を追加していきましょう。
Taking Player Input:
4番目のコードブロック、及びこれ威光の説明に、
private void UpdatePlayer(GameTime gameTime)
{
というコードが度々出てきますが、Silverlight+XNAでは、gameTimeという変数は見つかりません。これは、以下のように変更を加えます。
private void UpdatePlayer(TimeSpan elapsedGameTime)
{
Tutorialには、UpdateXXXというメソッドが多数出てきます。これらのメソッド群は、GamePageクラスのOnUpdate()で呼ばれています。OnUpdate()メソッドはeというイベント引数が用意されています。この中にElapsedTimeというプロパティがあるので、それを使ってコールするように記述します。
UpdatePlayer(e.ElapsedTime);
こんな感じ。
Adding Enemies:
今度は9番目のコードブロックにgameTime.TotalGameTimeというプロパティへのアクセスが出てきます。これも、OnUpdateのe引数に入っているTotalTimeというプロパティが相当しているので、GameTime gameTime引数をTimeSpan totalGameTimeに変更します。既にelapsedGameTime引数が追加されているメソッドは、その引数はそのままで、新たにtotalGameTime引数を加えます。
以上でポイントは全て紹介しました。Tutorialに出てくるコードを説明したポイントを元に愚直に修正していけば、Silverlight+XNAでTutorialが動くようになります。
Tutorialのコードを実際に動かすには、Texture画像やサウンドファイルが必要です。これらは、Tutorialからファイル一式をダウンロードして、その中に入っているpngファイル、mp3、wavファイルをSilverlight+XNAが自動的に作成するProjectNameLibContentプロジェクトのフォルダーにPNG画像ファイルはそのまま、MP3、WAVファイルはSoundというフォルダーを作成してそこにコピーし、既存のファイルの追加でプロジェクトに追加してください。
Tutorialで紹介されているコードは非常に簡単であるにも関わらず、なかなかにきれいで反応が良いそれなりにCoolなゲームが出来上がるので、ゲーム開発の練習として是非トライしてみてください。