ミニDTL.xna “ゲームはイチニチ30分まで!” 第11回
ミニDTL.xnaその11です。
8/31に配信した分です。前回に引き続いて3D化を進めました。
ステージの座標系をちゃんと作る
これまではSpriteBatchによる2D描画だけだったので、何も考えず、画面の座標系をそのままゲームの座標系にしていました。
つまり左上が0, 0で、自機が前に進むとPosition.Yは減っていました。一方、このゲームの自機にはScrollPositionというプロパティがあるのですが、これは自機が前に進むと増えていました。いい加減ですね。

画面設計
で、こういうものを描きました。上が1Pにとってのステージの奥です。今後は、1PはPosition.YおよびScrollPositionが増加するように進みます。2Pは逆です。
設計にあわせて書き直し
上記にあわせて、ステージの大半を書き直します。それだけだとつまらないので、前回Fighterに組み込んだ3D周りの記述をコピペして、全クラス書き直してみました。

全部三角形
ゲーム要素が全部3Dレンダリングになったことで、左右画面ごとに共通のカメラ(ViewMatrix)を使ってシーンを描画できるようになりました。
ゲーム要素の描画を始める前に
- Matrix view = Matrix.CreateLookAt(
- new Vector3(0, fighters[0].ScrollPosition, 1000),
- new Vector3(0, fighters[0].ScrollPosition, 0),
- Vector3.Up
- );
で、このviewを使ってゲーム要素をレンダリングすれば1P視点。
その後viewを作り直して各ゲーム要素をもう一度描画すれば2P視点になります。
- Matrix view = Matrix.CreateLookAt(
- new Vector3(0, fighters[1].ScrollPosition, 1000),
- new Vector3(0, fighters[1].ScrollPosition, 0),
- Vector3.Down
- );
ViewPortも併用しているので、各ゲーム要素が左右分割を気にする必要はなくなりました。おお美しい。
続きます。
タグ: DeskTopLive, desktoplivexna, MiniDTL, XNA
2009 年 9 月 8 日 12:07 AM
[...] ミニDTL.xna “ゲームはイチニチ30分まで!” 第11回 [...]