自機移動と弾の発射

自機移動に関しては「奮闘記」で細かく解説しているので、ここでは省略させて頂きます。

自機弾を制御する要素として、
  1. 画面に表示できる最大数
  2. x軸座標
  3. y軸座標
  4. 画面上に表示されているかどうか(発射されてるかどうか)
最低限この4つが必要となってきます。これに付け加え、
  • x軸の移動量
  • y軸の移動量
といった要素も必要な場合もあります。これは発射する弾によって移動速度が違ったり、斜めに飛ぶ弾を制御する場合には必須です。サンプルの場合、一定速度でy軸方向にだけ飛ぶ弾なので、実は移動量の要素は必要が無いんですが、消しておくのを忘れたため残ってしまっています^^;

自機弾発射ルーチンでは、「弾の生成」、「弾の表示」、「弾の移動」などの処理を行っています。


	wmax=3			;自機弾最大数

	dim wx,wmax		;自機弾のx軸座標
	dim wy,wmax		;自機弾のy軸座標
	dim wf,wmax		;自機弾のOn/Off
	dim wyv,wmax		;自機弾のy軸移動距離・・・このサンプルの場合必要なし^^;

;■ 自機移動
*jikimove
	if mf>0 : stick pat,79
	shottime--						;・・・V'
	if mf>0 : if (pat&64>0)&(shottime<0) : shot=1		;・・・T
	xv=(pat>>2&1)-(pat&1)
	yv=(pat>>3&1)-(pat>>1&1)
	if mf>0 : mx=xv*move+mx : my=yv*move+my
	if mx<0		: mx=0
	if mx>590	: mx=590
	if my<0		: my=0
	if my>430	: my=430
	pos mx,my : gcopy 2,xv*50+50,0,50,50
return

;■ 自機弾発射
*weapon
	repeat wmax
		if (shot=1)&(wf.cnt<1) {			;・・・U
			wf.cnt=1
			wx.cnt=mx+12
			wy.cnt=my-40
			shot=0
			shottime=1			;・・・V
			snd 3
			}
		if wf.cnt<1 : continue			;・・・W
		pos wx.cnt,wy.cnt : gcopy 2,150,0,25,50
		wy.cnt=wy.cnt-40				;・・・X
		if wy.cnt<-50 : wf.cnt=0			;・・・Y
	loop
return

まずポイントになるのは 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から引く値などを変えてみて下さい。たくさん撃てるけど異様に遅い弾とか、全然連射ができないとか、いろんな調整ができます。自分が作ろうと思ってるゲームにあわせて調整しましょう。

前のページへ戻る 解剖記のメニューへ戻る 次のページへ進む