ミニDTL.xna “ゲームはイチニチ30分まで!” 第7回
ミニDTL.xnaその7です。
前回見た目の変化がなかったので、今回はそこを意識しました。
背景を付けました
640*480の背景画像(仮)を描きました。いままでで一番の力作です。
スクロールの実装を始めました
いままでどんなゲームを作るか考えておらず、まだあまり定まっていないのですが、少々やりたいことが出てきたので、深く考えず実装していきます。
Fighterクラスにfloat ScrollPositionを作り、毎フレーム増やしていきます。
このScrollPositionはWorld.Drawの引数として渡し、さらにその中で各要素のDrawにも渡されます。もちろんWorld.fighter1.ScrollPositionでも取得できるのですが、これは将来1フレームでWorldの複数の位置をDrawしたくなったときのための布石です。
背景をスクロール位置に応じて動かすように
そのまんまです。背景画像の2回の描画で画面を覆っています。
- Vector2 backgroundPos = new Vector2(0, scrollPosition % background.Height);
- spriteBatch.Draw(background, backgroundPos, Color.White);
- backgroundPos.Y -= background.Height;
- spriteBatch.Draw(background, backgroundPos, Color.White);
Rトリガーを引いている間はスクロールが早くなるように
急いで飛ぶことができます。面白いかどうかは作ってみないとなんとも。
- if (gamePadState.Triggers.Right > 0.5f) {
- ScrollPosition += 5;
- Position.Y -= 5;
- } else {
- ScrollPosition += 1;
- Position.Y -= 1;
- }
Positionをスクロールに応じて減らすことで、画面から取り残されないようにしています。
各要素のPositionがステージ中の座標を表すように
いままではFighter、EnemyなどのPositionはスクリーン中の座標を表していました。
今後はスクロールを導入するため、「ステージ中の座標」と「スクリーン中の座標」を分けるようにしました。以前からあったPositionプロパティはステージ中の座標を表します。描画に使うためのdrawDestの計算は、Positionと(Draw時に渡される)
scrollPosition引数から算出するようにしました。
全クラスに修正することで、弾の発射や当たり判定などの動作が正しく動くようになりました。
他、弾のライフタイムの設定や若干のリファクタリングを行って30分完了。
今日の感想
- 初めてゲーム内容にひねり(ちょっと変わったスクロールだけですが)を加えてみました。どんなゲームになるのかはあまり見えていません。
- 今回は20人以上の人が見てくれていました!PM11:00ごろに行ったのが良かったのかな。
ではまた!
タグ: DeskTopLive, desktoplivexna, MiniDTL, XNA

2009 年 8 月 29 日 12:26 AM
[...] ミニDTL.xna “ゲームはイチニチ30分まで!” 第7回 [...]