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

by key

ミニDTL.xnaその12です。

9/1に配信した分です。今回は、敵キャラの種類の追加と、自機のモデリングを行いました。


MiniDTL.xna (12)

敵の種類を作る

ずーっと飾り気のない敵1種類だったので、新しい敵を追加してみました。

まず今まで具体クラスだったEnemyを敵の基底クラスにして、今までの敵をEnemyCクラスにしました。

また新たにEnemyのサブクラスであるEnemyAを作り、色を黒にして、弾を撃つ際の間隔を無くしてみると

新しい敵テスト

新しい敵テスト

凶悪な敵ができました。

プログラム自体は、ほぼコピペの作業しかしていないので割愛。

一点、ポリモーフィズムで呼ばれる基底クラスのメソッドにはvirtualをつける必要があることを忘れていて、Drawのオーバーライドでてこずりました。ActionScript秒です。

DoGAを使ってモデルデータを作る

DoGAは3DCGの入門用のソフトです。簡単なモデラーDoGA-L1のサンプルライブラリが便利なので利用してみましょう。

DoGA L1で自機を作る

DoGA L1で自機を作る

[パーツ]-[パーツ追加]を押すとサンプルライブラリが出てくるので、まずは自機っぽい形を選んで配置します。これだけ。

自機できた

自機できた

ファイルメニューから[エクスポート]-[Direct3D データ出力(三角形化)]で出力。拡大率を聞かれますが、この状態では見当が付かないのでそのままでOKです。ファイル名はFighter.xとしました。

VisualStudioに戻り、まずソリューションエクスプローラのContentからもう使わないFighter.pngを取り除きます。その後追加→既存の項目を追加で先ほどのモデルを選択。

読み込んで表示するコードを書きます。

まず変数宣言。Model型一つに収まります。

  1. private static Model model;

次にモデル読み込み。

  1. public static void LoadContent() {
  2.     model = Game.Content.Load<Model>("Fighter");
  3. }

最後に描画。

  1. public override Draw(GameTime gameTime) {
  2.     foreach (ModelMesh mesh in model.Meshes) {
  3.         foreach (BasicEffect effect in mesh.Effects) {
  4.             effect.EnableDefaultLighting();
  5.             effect.Projection = screenInfo.ProjectionMatrix;
  6.             effect.View = screenInfo.ViewMatrix;
  7.             effect.World =
  8.                 Matrix.CreateRotationY(item.Roll) *
  9.                 Matrix.CreateTranslation(item.Position.X, item.Position.Y, 0);
  10.         }
  11.         mesh.Draw();
  12.     }
  13. }

思ったより簡単です。

が、実行しても何も表示されません。モデルが小さすぎたようなので、拡大します。

Contentに追加したFighter.Xを選択してプロパティを表示します。

Content ProcessorのサブアイテムにScaleがあるので適宜大きい値にします。

また、表示したモデルの向きが気に入らないときは* Axis Rotationで回転することもできます。

これらを適切に調整して実行。

自機が出た

自機が出た

無事、自機の3Dモデルが出ました。よく見たら裏表なので全然無事ではないですが。

続きます。

タグ: , , ,

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

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

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

コメントをどうぞ