Windows Phoneのアプリケーション開発では、Silverligntをベースとする方法のほかに、XNA Game Studio(XNA Framework)をベースにする方法があります。Silverlightベースの開発はイベント駆動型ですが、XNAベースの開発は「ループ駆動型」とでも呼ぶべきもので、プログラミングのスタイルが異なります。XNAベースのサンプルプログラムも一つ紹介しておきましょう。

最低限必要なコードが記述済みのクラスを利用

 リスト1は、「Windows Phone Game (4.0)」テンプレートで「WindowsPhoneGame1」という名前のプロジェクトを作り、Game1.csを書き換えたものです。(1)に、このプログラムの主要なクラスであるGame1クラスがあります。Game1クラスには最初から、最低限必要なコードが記述されており、何も変更しなくても実行できます(青い画面が表示されます)。コードを追加するときは、Game1クラスのメンバー変数を追加したり、あらかじめ用意されたメソッド群に処理を追加したりします。

 メソッド群を概観しておきましょう。(3)はGame1クラスのコンストラクタ、(7)は初期化を行うInitializeメソッド、(9)はフォント、画像、音声などのコンテンツ(content)を読み込むLoadContentメソッド、(11)はコンテンツを破棄するUnloadContentメソッド、(12)は更新処理を行うUpdateメソッド、(13)は画面を描くDrawメソッドです。

図23●リスト1を動作させたところ
図23●リスト1を動作させたところ
[画像のクリックで拡大表示]

 今回は、図23のように、起動時にダイアログで文字列「こんにちは!」を表示し、「ok」ボタンを押すと「hello!」と文字列を描いたメイン画面を出すようにプログラミングをしてみましょう。

 まず、Solution Explorer(ソリューション エクスプローラー)で「WindowsPhoneGame1Content」を右クリックし、「Add」→「New Item」を選びます。「Add New Item」ダイアログで「Sprite Font」を選び、名前は自動的に付く「SpriteFont1」のままにして、「Add」ボタンを押します。画面に文字列を描くために、フォントを用意したわけです。

 今作ったフォントの情報は「SpriteFont1.spritefont」というXML(Extensible Markup Language)に格納されています。それを開き、20行目にあるフォントの大きさの行を、

<Size>30</Size>

としてください。図23右のように大きく表示するためです。

 リスト1のコードで、筆者が追加した部分を説明します。(2)では、Game1のメンバー変数として、フォントを保持するspriteFontという変数を宣言しています。(4)は、表示を縦長にするコードです(標準状態では横長です)。(5)で画面の幅を480画素に、(6)で画面の高さを800画素に変更します。

 (8)は、図23左のダイアログを表示するコードです。Microsoft.Xna.Framework.GamerServicesのGuideクラスが持つBeginShowMessageBoxメソッドを使っています。(10)では先ほど作ったSpriteFont1をspriteFontに読み込みます。描画はSpriteBatchのメソッドを使います。描画コードは、(14)のBeginメソッドと、(16)のEndメソッドの間に書く必要があります。(15)で、左上から右に50画素、下に20画素の位置に、「hello!」という文字列を描きます。

 UpdateメソッドとDrawメソッドは、可能であれば、1秒間に30回呼び出されます。(15)を

spriteBatch.DrawString(spriteFont, 
 DateTime.Now.ToString(),
 new Vector2(0, 20), Color.White);

と書き換えると、秒の表示が1秒ごとに変わり、Drawメソッドが何度も呼び出されていることを確認できるでしょう。