Windowsストア アプリ 作り方解説 XNA編 第2回 ~Windows PhoneのXNAとWindowsストア アプリの違い~

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

[XNAにあってWindowsストア アプリにないもの]
Windows PhoneのXNAにあって、Windowsストア アプリを作るときのAPIであるWinRTにないものがいくつかあります。
画面描画に関する実装方法も違います。
元のXNAのアプリで使用していて、Windowsストア アプリでそのまま動かない部分を列挙しました。

a. 表示させる画像やキャラクターの扱い
XNAでは、Texture2Dクラスを使用して画像を保持し、表示させています。

b. Initialize、LoadContent、Updata、Drawの各メソッド
XNAでは、これらのメソッド内で必要な処理を行います。

c. 座標の管理
XNAでは、Vector2クラスを使用して2次元の座標を管理しています。
WinRTでは、2次元の座標を保持させるために、代わりにPointクラスを使用できます。

d. 文字列の扱い
XNAでは、SpriteFontクラスを使用して文字列の保持し、表示させています。

e. タッチパネルの状態の検知
XNAでは、TouchPanel.ReadGesture()を使用してフリックなどのジェスチャーの状況を検知できます。

f. 衝突判定
XNAでは、RectangleクラスのIntersectsメソッドを使用して衝突判定を行えます。
WinRTでは、RectクラスのIntersectメソッドを代わりに使用できます。

g. 分離ストレージへの情報の読み書き
XNAとWinRTでは、分離ストレージへの読み書きの方法が違います。

ざっとこれらの部分を変更すれば、Shoot EvoをWindows 8上で動かせるようになります。
実際に移植をしたところ、これらの部分は3時間程度で終わりました。

[Windowsストア アプリにあって、Windows Phone 7のXNAにないもの]
Windows Phone 7のXNAにはない機能で、Windowsストア アプリを作るときに対応させないといけないものもあります。
対応させないといけない項目を列挙しました。

A. 異なる解像度への対応
Windows Phone 7は800x480の解像度しかありませんでしたが、Windows 8は1024x768、1366x768、2560x1440など、様々な解像度があります。

B. スナップへの対応
Windows 8にはスナップと呼ぶアプリを2つ同時に実行できる機能があります。
このスナップに対応させる必要があります。

移植に時間がかかるのはこちらのほうで、まだ移植作業の途中です。
次回以降は、個別の項目をどのように移植していったかを説明していきます。

[前後の記事]
第1回 : オリジナルのWindows Phone 7 アプリ (ソースコード掲載)
第3回 : Update、Drawメソッドを置き換える
番外1 : Shoot Evo リリース1を公開
番外2 : Shoot Evoのソースコード / プロジェクト ファイルを公開

マイクロソフト
田中達彦