ここでブログをはじめてから未だに自分のプログラムを載せていないのですが、今回もお預けです。orz
ホントは実践的なプログラムを書いていきたいとは思っているのですが、一応 XNA の導入部分くらいはリソースとして残しておきたいので、今のようになっています。
ですが、導入部分の説明は今回で終わりです。結構いい加減に書いてきたんですが、これからゲームプログラミングをしようという方にだらだら内部的なものを書いても飽きてしまうので、今はこんなものでいいかなと思っています。詳しい部分はおいおい書いていく予定です。
では、今回は XNA プロジェクトを立ち上げたときに生成されるコードを見ていきたいと思います。非常に簡潔なコードしか書かれていないので、理解するのはそんなに大変ではないと思います。というか説明する私が楽です。(^_^;)
Windows Game プロジェクトを作成後、ソリューションエクスプローラーを見ると(たぶん Visual Studio の右端にあると思います)、下のようなファイル等があると思います。プログラムは「Program.cs」と「Game1.cs」に書かれており、他のファイルなどについては、とりあえずそのままにしてかまいません。

ではまず「Program.cs」ファイルを見てみましょう。下は私が勝手に日本語でコメント書いています。
using System;
namespace WindowsGame1
{
///
/// プログラム開始クラス
///
static class Program
{
///
/// アプリケーションエントリーポイント
///
static void Main(string[] args)
{
// ゲームメインクラス作成
using (Game1 game = new Game1())
{
// ゲーム開始
game.Run();
}
}
}
}
(
コード色づけめんどくさっ!(×△×))
っというのは置いといて、このファイルの「Main」というメソッドからプログラムがスタートします。(C# の構文は各自本などを見て覚えておいてくださいね(^^))
で、このメソッドの中で、「Game1」というクラスのインスタンスを生成していますが、これが次のファイルで説明するゲームのメインフレームプログラム(クラス)になります。ちなみに「Game1」という名前は、リファクタを使用して好きな名前に変更してかまいません。
「game.Run」で実際にゲームをスタートさせます。
Program.cs ファイルに関してはこれだけです。このファイルのコードを書き換えることはあまりないと思いますので、基本的にこのままでOKです。
では、「Game1.cs」ファイルを見てみます。…と思い、全コード書いてみたら以外に長かったので省略 orz
とりあえず、各フィールドと、メソッドの簡単な説明を書いていきます。詳しいことはそのうちに…。
★GraphicsDeviceManager
グラフィクスデバイス管理クラスです。画面に描画するためには「GraphicsDevice」というデバイスクラスを使用するのですが、それに関連したデータを管理するクラスです。
主に初期化あたりで使用することが多いです。
★ContentManager
コンテンツ管理クラス。画像、音声、3Dデータなどの外部リソースを管理するクラスです。一度読み込んだりソースを続けて使用する際には、再読込せず既存のデータの参照だけを返すようにしたり、いらなくなったりソースを一度に破棄してくれたりと、それなりに便利なクラスです。
◆Game1() (コンストラクタ)
コンストラクタです。GraphicsDeviceManager や ContentManager を作成します。デバイスの設定はここで行ってしまいます。
◆Initialize()
初期化処理を行うメソッドです。設定データの読込など、初期化に関する処理を記述する場所です。
このメソッドはゲームが始まる前に一度だけ呼ばれます。
◆LoadGraphicsContent(bool loadAllContent)
グラフィクスコンテンツの読み込み処理を行うメソッドです。といっても音声リソースなどもここで読み込むこともあります。loadAllContent のフラグによって「自動管理リソース」「手動管理リソース」の読み込みを切り分けることが出来ます。
このメソッドはゲームが始にまる前一度だけ呼ばれますが、Windows では、デバイスの仕様上リソースを維持できない状態になることがあるので、再作成する必要があるたびに呼ばれます。
◆UnloadGraphicsContent(bool unloadAllContent)
グラフィクスコンテンツの破棄処理を行うメソッドです。基本的には読み込んだ全てのリソースを破棄する場所ですが、unloadAllContent のフラグによって「手動管理リソース」を破棄する処理を書くこともあります。
このメソッドはゲームが終了するときに一度だけ呼ばれますが、Windows では、デバイスの仕様上リソースを維持できない状態になることがあるので、そのリソースを破棄する必要があるたびに呼ばれます。
◆Update(GameTime gameTime)
描画以外のデータ更新等の処理を行うメソッドです。描画以外の処理は基本的にこちらに書きます。ゲーム状態の更新、入力、音声などの処理は、こちらに当てはまります。
このメソッドは、ゲームが実行されている間、絶え間なく呼ばれます。
◆Draw(GameTime gameTime)
描画処理を行うメソッドです。その名の通り描画処理はこちらに書きます。用は見た目の演出を書く部分です。逆に Update はそれを実現するための裏方といってもいいでしょう。
このメソッドは、ゲームが実行されている間、絶え間なく呼ばれます。
と、簡単に説明してみましたが、勢いで書いてしまったのと、省略のし過ぎで理解しにくい内容になってしまいました(^^;)。後で実際のプログラムを作成するときにその都度書いていきます。
一応、日本語コメント付きのプロジェクトを置いておきます。
startxna.zip
さて、XNA 導入編は終わりです。次回からは………………何をしましょうか?(^^;)
何かやってほしいゲームプログラムネタとか募集中です。無ければ、少し基本的な部分の説明をやっていこうかと思っています。