WisdomSoft - for your serial experiences.

ゲームを開始する

最初の XNA アプリケーションを開発する方法を解説します。XNA Framework ゲームは Game クラスのインスタンスを生成するところから始まります。

空のゲームを作成する

XNA Framework ゲームの基本的な起動工程を理解するために、XNA Game Studio のプロジェクトテンプレートで自動的に生成されたソースコードをすべて削除し、何も書かれていない空の C# ソースコードを新規に追加してください。Main() メソッドからフルスクラッチでサンプルコードを書きます。

XNA アプリケーションを起動するには、最初に Microsoft.Xna.Framework.Game クラスを利用します。 この Game クラスのインスタンスが 1 つのゲームタイトルそのものを表します。

Microsoft.Xna.Framework.Game クラス
public class Game : IDisposable

ゲームを実行するには、このクラスをインスタンス化する必要があります。このクラスのコンストラクタは、パラメータを受け取りません。

Game クラスのコンストラクタ
public Game ()

Game クラスのオブジェクトを生成することができれば Run() メソッドを呼び出してゲームを開始することができます。

Game クラス Run() メソッド
public void Run ()

Run() メソッドを呼び出すとゲームが起動し、内部でゲームを管理するためのループ処理が開始されます。これは Windows の一般的なアプリケーションにおけるメッセージループに相当する処理が内部で行わることを意味します。Run() メソッドはゲームが終了されるまで制御を返しません。

Game クラスは IDisposable インタフェースを実装しており、グラフィックデバイスやネットワークなど、内部で保有するネイティブのリソースを Dispose() メソッドで解放する仕組みになっています。ゲームが終了して Game オブジェクトが不要になった時点で Dispose() メソッドを呼び出してください。

コード1
using Microsoft.Xna.Framework;

class Test
{
    static void Main(string[] args)
    {
        Game game = new Game();
        game.Run();
        game.Dispose();
    }
}
実行結果
コード1 実行結果

上記のプログラムを Windows 用にコンパイルして実行すると、何も表示しないゲームウィンドウが表示されます。Game クラス自身は描画も何も行わない空のゲームなので、この状態では何もしません。

Game クラスは IDisposable を実装しているので using 文で解放することもできます。using 文を用いると埋め込み文を抜けたタイミングで自動的に usingu 文に指定した IDisposable オブジェクトの Dispose() メソッドが呼び出されます。

コード2
using Microsoft.Xna.Framework;

class Test
{
    static void Main(string[] args)
    {
        using (Game game = new Game())
            game.Run();
    }
}

コード2の実行結果はコード1と同じです。C# 言語で記述するのであれば using 文を用いる形の方が、より現代的で礼儀正しいコードであると考えられます。

Xbox360 上でウィンドウを表示することが考えられないように、XNA Framework はプラットフォームに依存しない API として設計されているため Windows に依存するウィンドウの操作方法は提供していません。Game クラスの Run() メソッドは 1 つのゲームタイトルの実行を意味します。Windows プラットフォーム上では、ゲームの表示先としてウィンドウが作られます。