| 自機移動と弾の発射 | ||||
自機移動に関しては「奮闘記」で細かく解説しているので、ここでは省略させて頂きます。 自機弾を制御する要素として、
自機弾発射ルーチンでは、「弾の生成」、「弾の表示」、「弾の移動」などの処理を行っています。
まずポイントになるのは shot 変数です。これによって弾を発射するか否かの判定を行っています(T)。ちなみに自機のシールド( 変数mf )がなくなってしまった場合はこの判定を行わないようにし、ゲームオーバー直前の自機が爆発している時には弾を撃てないようにしています。 次に repeat 〜 loop 命令で、弾が発射できる場合( shot=1 )は使用されていない( = 画面に表示されていない = 変数wf が1ではない )要素番号を調べます(U)。そして、発射される位置を指定し、効果音を鳴らします(うるさいので切ってありますが^^;)。 次に、あまり連射できないようにするための制御を行います。(V)の変数shottime に代入する値を大きくすると、その分だけ連射ができなくなります。このサンプルの場合、前の弾を撃ってから2フレーム目に次の弾が撃てるようになります。毎フレーム shottime を減らす処理(V')を忘れないようにしましょう。 引き続いて、そのまま表示と移動の制御を行います。画面に表示されるべき弾( 変数wf =1 )を調べ(W)、gcopy 命令で画面に弾の画像をコピーします。 次に、弾の移動を行います(X)。この処理は本当は、画面に弾を表示をする前に行ったほうがいいかもしれません。というのはこのサンプルの場合、画面に表示をした後に座標を動かしているため、のちに行う当り判定の時、実際表示されている場所より先の場所でヒットしてしまうのです。画面の更新速度が速いのでほとんどわからないかもしれませんが、実は弾がまだ表示されているのにヒットした効果が表示されています。移動してから表示すれば、実際の座標と表示されている座標が一致するのでこのような現象は起きません。その場合、最初に表示する位置( my-40 )を若干調整しましょう。 最後に、画面の上端から見えなくなったときに消す処理を行います(Y)。これを忘れてると次から弾が撃てなくなります^^; 試しに、wmaxの値や、shottimeの値、Xでwy.cntから引く値などを変えてみて下さい。たくさん撃てるけど異様に遅い弾とか、全然連射ができないとか、いろんな調整ができます。自分が作ろうと思ってるゲームにあわせて調整しましょう。
|