WisdomSoft - for your serial experiences.

Windows Phone での起動

Windows Phone アプリケーションのアセンブリは Windows 用の実行ファイルとは異なり、エントリーポイントを持たない DLL ファイルとしてビルドされます。そのため Main() メソッドを持ちません。Windows Phone 向けの XNA Framework ゲームの起動について解説します。

Windows Phone 用ゲームを実行する

Windows Phone のアプリケーションは EXE 形式の実行ファイルのようなエントリーポイントを持ちません。実際にコンパイルすると確認できますが Windows Phone アプリケーションはフレームワークによって呼び出される DLL 形式のライブラリとしてビルドされます。従って Windows PC ゲームや Xbox 360 ゲームのように Main() メソッドを宣言する必要がありません。

コード1
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 実行結果

コード1は単に画面を単色で塗りつぶすだけの XNA Framework ゲームのサンプルです。正しくビルドできれば、出力フォルダに DLL ファイルが生成されています。実際に Windows Phone デバイスに配置されるのは、同フォルダに生成されている DLL を含むタイトルストレージのデータを ZIP 形式でアーカイブ化した XAP という拡張子のファイルです。

図1 生成されたDLL
図1 生成されたDLL

アプリケーションを起動したときに読み込む DLL ファイル(図1では WindowsPhoneGame1.dll)の情報は AppManifest.xaml に記述されています。WMAppManifest.xml ファイルには、アプリケーション名やアプリケーションがアクセスするデバイスの機能などに関する設定が記述されています。

ただし、このままでは Windows PC や Xbox 360 用ゲームとコードを共有できません。Windows Phone ゲームで Main() メソッドが含まれていても害はありませんが、通常は条件コンパイルを用いて Windows PC 及び Xbox 360 用プロジェクトであれば Main() メソッドをコンパイルし、そうでなければコンパイルしないように記述します。

コード2
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 ゲームとしてもビルドできます。