シューティングゲームを作成するとき、自機や敵がビーム(弾)を撃つタイミングを決めます。
連射を可能とするならボタンをボチボチ押せば良いですが、敵キャラは連射させたかったり、画面上に1発だけ表示したい場合など、状況に応じて変える必要があります。

敵スプライトがビームを撃つには、大まかに以下のような手順になります。

 

1)乱数で撃つタイミングを決める

2)ビームを撃つとき、敵スプライトのX軸とY軸の位置をビームのスプライトに教える(変数を作る)

3)ビームのスプライトに、動作スタートのメッセージを送る

4)ビームを動かす

 

今日の講義中、「ビームが途中で消えてしまう」現象が発生しました。下のプログラムを見ると、ゲーム画面上、赤点線の部分でビームが消えるバグが発生します。

2015-06-27_Beginner02

 

「原因は何だろう・・・?」と生徒が悩み始めます。

2015-06-27_Beginner01

 

原因の考え方として、幾つか思い当たるところが無いか考えます。

1)ビームが発射されるx軸・y軸のチェック。

2)ビームが発射されるとき、乱数が思い通りの乱数になっているか。

3)想定したタイミングで発射しているか?

 

調べたところ 1) と 2) は問題無く、3) のタイミングが正しくないことが分かりました。敵ビームのスプライトが、画面一番端まで到達しない状態で「発射」されるので、敵ビームのスプライトが最初の位置へ強制的に戻されていたのです。そこで、発射する前に判断を1つ追加します。「ビームの位置が、画面一番下まで到達しているか」

2015-06-27_Beginner03

※「端に触れた」にすると、左右の壁に触れた状態で発射することがあるので、今回は使いません。

 

これで、敵スプライトがビームを撃つタイミングが正しく設定できました。

「ヒントを元に辿り着く」ことで、迷ったとに判断すべき項目を洗い出すトレーニングも兼ねています。