ミニDTL.xna “ゲームはイチニチ30分まで!” 第2回
その後外出したので記事が遅くなってしまいましたが、昨日に引き続きミニDTL.xnaをやりました。
今回の内容は以下の通り。
Xbox 360のゲームパッドで画像を動かせるようにする
Xbox 360の有線コントローラは、Windows機につなぐだけで普通に使えます。
書き換えたコードは、前回Updateメソッド中で三角関数を使った部分を
- gamePadState = GamePad.GetState(PlayerIndex.One);
- syoboPos.X += gamePadState.ThumbSticks.Left.X * 10.0f;
- syoboPos.Y -= gamePadState.ThumbSticks.Left.Y * 10.0f;
たったこれだけ。簡単ですね。gamePadState変数はGamePadState型で宣言しておきます。
最初両方 += にしていたのですが、入力のY方向と2DスクリーンのY方向が逆らしく、上下反対の動きになってしまいました。そのためYだけ -= にしてあります。
自弾の絵を描く
例によってペイントで描きました。ちなみに僕はFireworksが大好きなのですが、ミニDTL.xnaを見た人が真似しやすいように、なるべく標準搭載のソフトで進めようと思います。
というのはタテマエで、良いツールを使うと絵が描けないのがばれるからです。
と思ったら、Vistaのペイントって透過画像作れないんですね。ギャー。
自弾クラスを作る
ソリューションエクスプローラで[追加]-[既存の項目]でクラスを選んでShot.csを作ります。
- namespace MiniDTL {
- class Shot {
- private static Texture2D texture;
- public Vector2 Position;
- public Shot() {
- }
- public void Update(GameTime gameTime) {
- Position.Y -= 15.0f;
- }
- public void Draw(SpriteBatch spriteBatch, GameTime gameTime) {
- spriteBatch.Draw(texture, Position, Color.White);
- }
- public static void LoadContent(ContentManager content) {
- texture = content.Load<Texture2D>("shot");
- }
- }
- }
MとかVとか、こまけぇこたぁいいんだよ!!(AA略) 30分しかないしね。
usingほにゃららは、Game1.csのをまるっと持ってきて問題ないです。
自弾クラスのContent読み込み
Game1クラスのLoadContentメソッド中で
- Shot.LoadContent(Content);
さっき作ったShotのLoadContentを呼びます。
自弾の配列を用意
Shot型を格納するListを作ります。ジェネリクスというやつですね。AS3の人はVector.<Shot>だと思ってください。
- List<Shot> shots;
しばらくC#を触っていなかったので、Shot[] shots;とか普通に配列を使おうとしておりました。こんな僕でもゲーム作れるよ!
Initializeメソッド中で忘れずにインスタンス作ります。
- shots = new List<Shot>();
というか、実際これを忘れてて2回もNull Reference Exceptionを出しました。ゆるい。
ボタンが押されたら自弾を出す
Updateメソッド中に
- if (gamePadState.Buttons.A == ButtonState.Pressed) {
- Shot shot = new Shot();
- shot.Position.X = syoboPos.X;
- shot.Position.Y = syoboPos.Y;
- shots.Add(shot);
- }
新しいShotインスタンスを作って、自機の座標に合わせて、Listに追加しています。
自弾を更新する
Updateメソッド中に
- foreach (Shot shot in shots) {
- shot.Update(gameTime);
- }
後はShotクラスに任せます。今のところ15.0f上に移動させています。
自弾を描画する
Drawメソッド中に
- foreach (Shot shot in shots) {
- shot.Draw(spriteBatch, gameTime);
- }
こちらも同じく、後はShotクラスに任せています。
ちょうどここで30分経過。
毎回新しいShotインスタンスを作る上に、画面から出てもListには残り続けるので、もう少し丁寧に作る必要がありますが、ざっくりこんな感じで自機が弾を撃てるようになりました。
今回の感想ですが、30分あればもう少し多くのことができると思ってたのですが、言語+環境に慣れないとこんなものかも。9/12のイベント本番までにゲームの形になりますように。
あとSaqooshaさんがlivestream procasterが良いよと教えてくれたので、次回試してみようと思います。ありがとー!
タグ: DeskTopLive, desktoplivexna, MiniDTL, XNA
2009 年 8 月 22 日 1:53 AM
[...] ミニDTL.xna “ゲームはイチニチ30分まで!” 第2回 [...]