Windows Phone での起動
Windows Phone 用ゲームを実行する
Windows Phone のアプリケーションは EXE 形式の実行ファイルのようなエントリーポイントを持ちません。実際にコンパイルすると確認できますが Windows Phone アプリケーションはフレームワークによって呼び出される DLL 形式のライブラリとしてビルドされます。従って Windows PC ゲームや Xbox 360 ゲームのように Main() メソッドを宣言する必要がありません。
using Microsoft.Xna.Framework; public class TestGame : Game { private GraphicsDeviceManager graphicsDeviceManager; public TestGame() { graphicsDeviceManager = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } }
コード1は単に画面を単色で塗りつぶすだけの XNA Framework ゲームのサンプルです。正しくビルドできれば、出力フォルダに DLL ファイルが生成されています。実際に Windows Phone デバイスに配置されるのは、同フォルダに生成されている DLL を含むタイトルストレージのデータを ZIP 形式でアーカイブ化した XAP という拡張子のファイルです。
アプリケーションを起動したときに読み込む DLL ファイル(図1では WindowsPhoneGame1.dll)の情報は AppManifest.xaml に記述されています。WMAppManifest.xml ファイルには、アプリケーション名やアプリケーションがアクセスするデバイスの機能などに関する設定が記述されています。
ただし、このままでは Windows PC や Xbox 360 用ゲームとコードを共有できません。Windows Phone ゲームで Main() メソッドが含まれていても害はありませんが、通常は条件コンパイルを用いて Windows PC 及び Xbox 360 用プロジェクトであれば Main() メソッドをコンパイルし、そうでなければコンパイルしないように記述します。
using Microsoft.Xna.Framework; public class TestGame : Game { #if WINDOWS || XBOX public static void Main(string[] args) { using (Game game = new TestGame()) game.Run(); } #endif private GraphicsDeviceManager graphicsDeviceManager; public TestGame() { graphicsDeviceManager = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); base.Draw(gameTime); } }
コード2はコード1と同じですが Main() メソッドを含んでいます。このコードであれば Windows Phono ゲームとしても Winows PC や Xbox 360 ゲームとしてもビルドできます。