今回もまた分からないことがあり、作業が難航して来てしまったため、投稿させていただきました。
今回の質問は敵弾についてです。
敵が自機に向けて一発一発弾を撃つスクリプトは、殆ど某HSP講座からのパクリですが、作成することが出来ました。
そして色々な敵を作成して行くにつれ、射撃パターンも増やしたいなぁ と言う事で、
数パターン試作したのですが、どれも中途半端なところで完成せず、息詰まってしまいました。
そして、下のスクリプトは3WAY弾発射の試作なのですが、
自機を軸に広がる2個の弾は、斜めになるにつれ、弾の移動速度が速くなり、真横になると全く広がらなくなってしまいます・・・
原因はなんとなくわかるのですが、解決出来ませんでした。
理想は、自機と敵との位置や距離がどうであろうと、敵が自機に向けて撃つ3発の弾は、垂直から撃った時の様に、均等な間隔で広がり、同じ速度であることです。
何方か改善お願いします。
後、敵弾の速度を上げずに、敵弾の飛べる方向を増やし、狙いを精密にするにはどうすればいいでしょうか?
良かったらお考えください。
えぇと、操作はカーソルキーで自機の移動、スペースで敵から弾発射。
数字は3発の弾のxとyの移動距離です。
自機の射撃、各々の辺り判定は有りません。
screen 0,340,430 zix=150 : ziy=300 //自機の座標 tekix=150 : tekiy=150 //敵の座標 tekitamakazu=1000 dim tekitamah,tekitamakazu //画面上の敵弾の有無を判定 dim tekitamax,tekitamakazu //敵弾のx座標 dim tekitamay,tekitamakazu //敵弾のy座標 dim calc,900 repeat 900 temp=cnt : calc.cnt=temp*temp loop repeat redraw 0 color 0,0,0:boxf color 255,255,255 stick pad,15 if pad&1 : zix-7 if pad&2 : ziy-7 if pad&4 : zix+7 if pad&8 : ziy+7 if pad&16 : gosub *tekishot pos zix,ziy mes "● ←自機" color 255,0,0 pos tekix-2,tekiy mes "● ←敵" pos tekix-44,tekiy+22 mes "x" mes "y" pos tekix-22,tekiy+22 mes tekitamaxv3 mes tekitamayv3 mes "左" pos tekix,tekiy+22 mes tekitamaxv1 // 敵弾のx軸の移動距離 mes tekitamayv1 // 敵弾のy軸の移動距離 mes "真" pos tekix+22,tekiy+22 mes tekitamaxv2 mes tekitamayv2 mes "右" gosub *tekitama wait 1 : await 1 redraw 1 loop *tekitama repeat tekitamakazu if tekitamah.cnt=0 : continue tekitamax.cnt+=tekitamaxv.cnt tekitamay.cnt+=tekitamayv.cnt if tekitamay.cnt>=500 : tekitamah.cnt=0 if tekitamay.cnt<=-10 : tekitamah.cnt=0 if tekitamax.cnt>=500 : tekitamah.cnt=0 if tekitamax.cnt<=-10 : tekitamah.cnt=0 color 255,0,0 pos tekitamax.cnt,tekitamay.cnt : mes "." loop return *tekishot dx=zix-tekix : px=dx : if dx<0 : dx=0-dx dy=ziy-tekiy : py=dy : if dy<0 : dy=0-dy dst=(dx*dx)+(dy*dy) edx=tekix+3 : edy=tekiy+5 repeat 900 if dst<calc.cnt : dst=cnt : break loop repeat tekitamakazu if tekitamah.cnt>0 : continue tekitamah.cnt=1 tekitamax.cnt=edx : tekitamay.cnt=edy ds=8 //敵弾の速度 tekitamaxv.cnt=px*ds/dst tekitamayv.cnt=py*ds/dst tekitamaxv1=tekitamaxv.cnt tekitamayv1=tekitamayv.cnt break loop dx=zix-tekix : px=dx : if dx<0 : dx=0-dx dy=ziy-tekiy : py=dy : if dy<0 : dy=0-dy dst=(dx*dx)+(dy*dy) edx=tekix+3 : edy=tekiy+5 repeat 900 if dst<calc.cnt : dst=cnt : break loop repeat tekitamakazu if tekitamah.cnt>0 : continue tekitamah.cnt=1 tekitamax.cnt=edx : tekitamay.cnt=edy ds=8 //敵弾の速度 tekitamaxv.cnt=px*ds/dst tekitamayv.cnt=py*ds/dst tekitamaxv.cnt++ //角度調整 tekitamaxv2=tekitamaxv.cnt tekitamayv2=tekitamayv.cnt break loop dx=zix-tekix : px=dx : if dx<0 : dx=0-dx dy=ziy-tekiy : py=dy : if dy<0 : dy=0-dy dst=(dx*dx)+(dy*dy) edx=tekix+3 : edy=tekiy+5 repeat 900 if dst<calc.cnt : dst=cnt : break loop repeat tekitamakazu if tekitamah.cnt>0 : continue tekitamah.cnt=1 tekitamax.cnt=edx : tekitamay.cnt=edy ds=8 //敵弾の速度 tekitamaxv.cnt=px*ds/dst tekitamayv.cnt=py*ds/dst tekitamaxv.cnt-- //角度調整 tekitamaxv3=tekitamaxv.cnt tekitamayv3=tekitamayv.cnt break loop return
後、ゲームに使用する画像が不足しています。
ドット絵描けてちょっと手伝っても良いという方。
どうぞメール下さい・・・
他にも興味がある方がいらっしゃいましたらご連絡下さい。