WikipediaでDirectXの項目を読んでいたら、Microsoft XNAのことが書かれていたので、ちょっと興味を持って調べてみる。
Managed DirectX 2.0の開発は中止され、Microsoft XNAに置き換えられることになった。
そうそう、すっかり忘れてた。Microsoft XNAについて調べなきゃ。
Microsoft XNA Game Studio 3.0の配布場所
Microsoft XNA Game Studio 3.0をインストールするには、Visual Studio 2008かVisual C# 2008 Express Edition が必要です。
ということで、インストール。
Xbozx360に作ったプログラムを転送する場合や、ネットワークゲームを作る場合にはWindows Firewallの設定を変更する必要がある。セットアップ時にやってくれる模様。
Visual Studioのヘルプの中に、 「XNA Game Studio 3.0」てな項目が増えました。
Visual Studio 2008 Express Editions – XNA Game Studio 入門 : XNA Game Studio で作るマインスイーパ
ここに、チュートリアルのようなものが記述されているので、サクッと試す。このドキュメントは、Visual Studio 2005などちょっと古い環境が想定されているが、大まかで、そんなにかわらんでしょう。
XBox360は持っていないので、そのあたりのことはすべてすっ飛ばしてやってみます。
XNA Framework 第01回
XNA Game StudioでXBoxのゲーム開発を始めよう
Windows Gameでプロジェクトを作るとこんな感じでできてきます。
Sample07
Direct XはそれぞれのデバイスをアクセスするためのAPI集みたいになってたけど、こいつは、Gameクラスなんてあって、ゲーム開発用のフレームワークみたいになっているのね。
Game.Update()は、Game.Target ElapsedTimeやGame.IsFixedTimeStepで呼び出されるタイミングがコントロールされるし、Draw()は、描画用でゲームでありがちの開いている時間は常にDrawが呼び出されるというパターンの模様。
Sample08
GameのコンストラクタでGraphicsDeviceManagerをnewして、Game.Drawでそいつを使って描画。
Sample09
テクスチャの初期化はGame.Initialize()でやってる。
Game.Draw()では、sprite = new SpriteBatch(graphics.GraphicsDevice);のsprite.Begin(), sprite.End()でくくった中のsprite.Draw()でテクスチャの描画。
Sample10
Sample09はテクスチャをファイルから読んでいるが、XBox360ではファイルからは読まない。これらのリソースは、プロジェクトに突っ込んで、「プロパティ」から「XNA Framework Content」をTrueにすると、リソースとしてビルドされ、ContentManagerクラスを使ってアクセスできる。
XNA Framework 第02回
2次元マインスイーパの作成を行おう
Sample01
*.spritefontというファイルを作成することで、フォントテクスチャをビルド時に作ってくれる。SripteFontクラスでアクセスできる。
Sample02
だからといって、日本語を全部やっちゃうと効率が良くないので、文字コードの範囲を指定しましょうってお話。
Sample03~Sample10
GamePad.GetState(*)でいろいろアクセスして、ゲームパッドの状態を調べる方法の説明。キーボードもマウスも同様。
さすがにイベントドリブンじゃなくて、Update()の中で状態をチェックする構造。
Sample11~Sample12
GameComponentクラスを使って、部品化する方法の説明。
全部をGameクラスの中で書いてたらそら、大変なことになりますわ。でも、そこまで用意されてるのね。
Sample13~Sample14
GameComponentクラスと、IDrawableから派生されたコンポーネントは描画機能を持つ。Visibleプロパティで表示非表示の切り替えも可能。
Sample15~Sample18
コンテンツパイプラインとインポータ、プロセッサ、コンパイラ、タイプライタ、タイプリーダの説明。
じぇんじぇんわかりませんでした。もっとちゃんと読まないとあきません。
XNA Framework 第03回
3次元マインスイーパを作ろう
Direct3Dまわりの話がここ。
エフェク
ト
頂点シェーダとピクセルシェーダはエフェクトでコントロールする。HLSLが使えるけど、BasicEffectクラスで基本となる機能は用意されている。
テクニック
使用する頂点シェーダとピクセルシェーダを定義するパスと呼ばれるオブジェクトのコンテナ。
座標変換
Effect.World、Effect.Viewでワールド座標、カメラ座標の
マトリクスを設定。
テクスチャ
テクスチャもエフェクトの一つ。
XNA Framework 第04回
XNA Game Studio 2.0に対応しよう
頂点バッファ
VertexBufferクラスで頂点バッファ。頂点ストリームなどもここ。
ビューポート
GraphicsDevice.Viewportで設定
透明度を反映させる
デバイスの描画に関連した設定の多くは、GraphicsDeviceクラスのRenderStateプロパティから行う。
XNA Framework 第05回
サービスを使おう
サインインとかゲーマープロファイルとかのプラットフォームが提供する基本的なサービスへのアクセスの仕方。昔でいうところのロビーとかそんなんかな?
サインインはWindows Live IDで。
データの保存は、Guide.BeginShowStorageDeviceSelector()でStorate.StorageDeviceクラスを取得して、書き出す
XNA Framework 第06回
通信機能を使おう
NetworkSessionクラスでセッションの作成、検索などを行い、Join()メソッドで参加する。Lobbyの状態とPlayingの状態がある。
セッションからは、抜けたり参加したりの状態が変化するとイベントが飛んでくる。
データはUDPで流れるけど、XNAフレームワークが信頼性を保証する。
NetworkSession.LocalGamersで現在のプレーヤーを取得。SendData()でデータを流す。ReceiveData()で受信。PacketWriter、PacketReaderでXNA Frameworkの基本クラスのシリアライズが可能。
こんだけ理解すれば、オンラインヘルプは十分に読めるかな