オノデラの研究日記 in わんくま

思いついたネタを気ままに書いていくブログ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  209  : 記事  5  : コメント  5966  : トラックバック  40

ニュース

プロフィール

  • ●おのでら
    宮城県在住
    主に業務向けソフトを製作

Twitter

ニュース

主なリンク

XNA 関連リンク

アイテム

ゲーマーカード

その他

記事カテゴリ

書庫

日記カテゴリ

  ここでブログをはじめてから未だに自分のプログラムを載せていないのですが、今回もお預けです。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 導入編は終わりです。次回からは………………何をしましょうか?(^^;)

 何かやってほしいゲームプログラムネタとか募集中です。無ければ、少し基本的な部分の説明をやっていこうかと思っています。

投稿日時 : 2007年1月15日 23:24

コメント

# re: XNA の基本コード 2007/01/16 14:29 黒龍
> (コード色づけめんどくさっ!(×△×))
もしかしてオール手作業??だとしたら確かにめんどくさいですね。変換ツールなど探してみてはいかがでしょうか?
(私はSourceConverterを使っています)

# re: XNA の基本コード 2007/01/16 15:24 えムナウ
私が使っているのは CopySourceAsHTML for VS2005 です。


# re: XNA の基本コード 2007/01/16 18:21 オノデラ
 黒龍さん
> もしかしてオール手作業??だとしたら確かにめんどくさいですね。変換ツールなど探してみてはいかがでしょうか?
> (私はSourceConverterを使っています)

 シンプルなソフトでいいですね。ためしに使ってみたらうまくいったので、これ使ってみたいと思います。


 えムナウさん
> 私が使っているのは CopySourceAsHTML for VS2005 です。

 インストールして使ってみましたが、HTMLコピーするときに例外が発生してだめでした。評価版だからですかね?(VS2005 Team Suite)

 後で Standard で試してみます。

Post Feedback

タイトル
名前
Url:
コメント