Windowsストア アプリ 作り方解説 XNA編 第3回 ~Update、Drawメソッドを置き換える~

マイクロソフトの田中達彦です。
本連載では、Windows Phone 7用のXNAで開発したShoot EvoというゲームをWindowsストア アプリとして移植したときのポイントを紹介します。
本連載では、C#とXAMLを使用して同様のアプリを作っていきます。

[XNAのUpdateとDrawメソッド]
C#などで作成したアプリは、イベントドリブンでプログラムが動きます。
ユーザーが何か操作したときなどに発生するイベントに対して、プログラムを用意するのです。
XNAはイベントドリブンではなく、1/30秒ごとに特定のメソッドが呼ばれるので、その中にコードを書いていきます。
1/30秒ごとに呼ばれるメソッドには、UpdateメソッドとDrawメソッドの2つがあります。
Updateメソッドは各種フィールド等の値の更新を行うためのメソッドで、Drawメソッドは描画を行うためのメソッドです。

[タイマーを使用した呼び出し]
WinRTには、XNAのようなUpdateメソッドとDrawメソッドがないので、DispatcherTimerというタイマーを使用してUpdateとDrawの代わりにします。
まずは、以下の黄色でマーカーしている部分のようにTimerというフィールドを用意します。

public sealed partial class MainPage : Page
{
    DispatcherTimer Timer = new DispatcherTimer();

次に、コンストラクタの中で、何秒ごとにタイマーによるイベントを発生させるかを定義し、イベントハンドラーを設定します。
ここでは、33ミリ秒ごとにイベントが発生するように設定します。
この値は、ほぼ1/30秒ごとに相当します。

以下の黄色くマーカーした部分を入力する途中で、2行目の += を入力した直後にTabキーを2回押します。
Tabキーを押すことで、イベントハンドラーが自動的に生成されます。
最後の3行めのStartメソッドの呼び出しで、タイマーをスタートさせます。

public MainPage()
{
    this.InitializeComponent();

    Timer.Interval = new TimeSpan(0, 0, 0, 0, 33);
    Timer.Tick += Timer_Tick;
    Timer.Start();
}

上記の += を入力したときに自動的に生成されたTimer_Tickイベントハンドラーに、以下のようにUpdateとDrawに該当する部分を用意します。

void Timer_Tick(object sender, object e)
{
    // Update

    // Draw

}

Updateメソッドはそのままコピーして、次回以降の連載で説明する方法でXNAのコードからストア アプリのコードに移植できます。
Drawメソッドは、XNAとストア アプリの画面描画の方法が全然違うため、ストア アプリに即したやり方に変更します。この方法も次回以降の連載で説明します。

[前後の記事]
第2回 : Windows PhoneのXNAとWindowsストア アプリの違い
第4回 : キャラクターの描画
番外1 : Shoot Evo リリース1を公開
番外2 : Shoot Evoのソースコード / プロジェクト ファイルを公開

マイクロソフト
田中達彦