ミニDTL.xna “ゲームはイチニチ30分まで!” 第11回

by key

ミニDTL.xnaその11です。

8/31に配信した分です。前回に引き続いて3D化を進めました。


MiniDTL.xna (11)

ステージの座標系をちゃんと作る

これまではSpriteBatchによる2D描画だけだったので、何も考えず、画面の座標系をそのままゲームの座標系にしていました。

つまり左上が0, 0で、自機が前に進むとPosition.Yは減っていました。一方、このゲームの自機にはScrollPositionというプロパティがあるのですが、これは自機が前に進むと増えていました。いい加減ですね。

画面設計

画面設計

で、こういうものを描きました。上が1Pにとってのステージの奥です。今後は、1PはPosition.YおよびScrollPositionが増加するように進みます。2Pは逆です。

設計にあわせて書き直し

上記にあわせて、ステージの大半を書き直します。それだけだとつまらないので、前回Fighterに組み込んだ3D周りの記述をコピペして、全クラス書き直してみました。

全部三角形

全部三角形

ゲーム要素が全部3Dレンダリングになったことで、左右画面ごとに共通のカメラ(ViewMatrix)を使ってシーンを描画できるようになりました。

ゲーム要素の描画を始める前に

  1. Matrix view = Matrix.CreateLookAt(
  2.     new Vector3(0, fighters[0].ScrollPosition, 1000),
  3.     new Vector3(0, fighters[0].ScrollPosition, 0),
  4.     Vector3.Up
  5. );

で、このviewを使ってゲーム要素をレンダリングすれば1P視点。

その後viewを作り直して各ゲーム要素をもう一度描画すれば2P視点になります。

  1. Matrix view = Matrix.CreateLookAt(
  2.     new Vector3(0, fighters[1].ScrollPosition, 1000),
  3.     new Vector3(0, fighters[1].ScrollPosition, 0),
  4.     Vector3.Down
  5. );

ViewPortも併用しているので、各ゲーム要素が左右分割を気にする必要はなくなりました。おお美しい。

続きます。

タグ: , , ,

コメント / トラックバック 1 件

  1. XNA Today » ミニDTL.xna 第11回 より:

    [...] ミニDTL.xna “ゲームはイチニチ30分まで!” 第11回 [...]

コメントをどうぞ