誘導レーザー

 蛇型キャラの応用として、誘導レーザーを作ります。

蛇型キャラ

 1.全体の移動

 ここでは、単純明快に丸を複数並べてレーザーっぽく見せたいと思います。上の画像のように、丸を並べただけでも結構線っぽく見えます。蛇型キャラのような履歴の変数といったものは使わず、単に先頭の丸が移動したら移動する前の座標を2番目の丸の新たな座標とし、2番目の丸の移動前の座標を3番目の丸の新たな座標とし・・・というふうにします。

丸の移動

 丸の中心の座標を配列変数laser_x , laser_yに入れることにすると(0番の要素が先頭です)、先頭以外のn番目の丸の移動は、
  laser_x.n=laser_x.(n-1)
  laser_y.n=laser_y.(n-1)
 となります。

 2.先頭部の移動

 レーザーが敵から発射されて自機に向かうものとします。先頭の丸が移動するたびに、丸から見た自機の角度を計算し、その方向を向くように現在の角度を少しずつ増やしたり減らしたりして、最終的には自機に向かうようにします。

角度の修正

 上の図で、反時計回りを角度の正の方向とします。自機の方向の角度とレーザーの角度の差が180度以下の時はレーザーの角度を増やし、それより大きい時は減らすようにすると、速く自機の方に向けます。

角度の修正

 自機の方向の角度とレーザーの角度の差をr、1度に増やす(あるいは減らす)角度をdrとします。rがどんどん小さくなっていくと、やがてrよりdrの方が大きくなります。すると、drを引いてマイナス方向に行きすぎ、drを足してプラス方向に行きすぎ、を繰り返してぶるぶる震えることになります。ですから、drがrより大きい時はdrではなくrを足す(あるいは引く)とよいでしょう。drが十分に小さければ気にするほどでもないですが。

 ある程度の回数角度の修正をしたら、もうそれ以上角度を変えないようにするといいです。でないといつまでも自機を追いかけ回すことになります。また、自機に当たった場合もそれ以上角度を変えないようにするといいと思います。でないとぐるりと回ってまた当たろうとするからです。それまでまっすぐ進んでいたのに、不自然に曲がってしまうことになります。

 1度に移動する長さ(速度)ですが、徐々に速くするなり等速度のままとするなり、自分の作りたいものに合わせて決めればいいと思います。


[サンプルプログラムをダウンロード] (HSP Ver2.61+hspext.dll+hmm.dll用)
[サンプルプログラムをダウンロード] (HSP Ver3用)
 敵が自機に向けて誘導レーザーを撃ちます。


HSP Ver3の補足
・atan , sin , cosの角度の定義
 HSP Ver3の角度の定義(どっちの方向が0度で、どっち回りが正なのか)は、以下のようなプログラムで調べられます。
	screen 0,640,480,0

	pi=3.14159	; 円周率

*Main_Loop
	await 16
	mx=mousex:my=mousey
	dx=mx-320:dy=my-240
	redraw 0
	color 0,0,0
	boxf 0,0,639,479
	pos 0,0
	color 255,255,255
	r=atan(dy,dx)
	mes r/(pi*2)*360
	mes sin(r)
	mes cos(r)
	color 255,255,255
	line 320,240,mx,my
	redraw 1
	goto *Main_Loop
 X軸のプラス方向が0で時計回りが正、−πからπまでの値となっています。単位はラジアンで、0が0度、2πが360度に相当します。

[目次へ][前へ][次へ] inserted by FC2 system