HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0212
Yu敵の射撃について5解決


Yu

リンク

2007/2/12(Mon) 17:50:32|NO.5622

こんにちは、STG作成中Yuです。
今回もまた分からないことがあり、作業が難航して来てしまったため、投稿させていただきました。
今回の質問は敵弾についてです。
敵が自機に向けて一発一発弾を撃つスクリプトは、殆ど某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

後、ゲームに使用する画像が不足しています。
ドット絵描けてちょっと手伝っても良いという方。
どうぞメール下さい・・・
他にも興味がある方がいらっしゃいましたらご連絡下さい。



この記事に返信する


うひょ

リンク

2007/2/12(Mon) 19:06:20|NO.5624

僕もそれを使って改造してるので変数の意味は分かりました(汗
自分も興味があったのでいろいろ試してみました。
内部的に実数で管理してます。


#const PI 3.14159 #define tyosei 0.174533 screen 0,340,430 zix=150 : ziy=300 //自機の座標 tekix=150 : tekiy=150 //敵の座標 tekitamakazu=1000 dim tekitamah,tekitamakazu //画面上の敵弾の有無を判定 ddim tekitamax,tekitamakazu //敵弾のx座標 ddim tekitamay,tekitamakazu //敵弾のy座標 ddim tekitamaxv,tekitamakazu //敵弾のx移動量 ddim tekitamayv,tekitamakazu //敵弾のy移動量 tekitamaxv1=0.0:tekitamayv1=0.0 tekitamaxv2=0.0:tekitamayv2=0.0 tekitamaxv3=0.0:tekitamayv3=0.0 //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 int(tekitamaxv3) mes int(tekitamayv3) mes "左" pos tekix,tekiy+22 mes int(tekitamaxv1) mes int(tekitamayv1) mes "真" pos tekix+22,tekiy+22 mes int(tekitamaxv2) mes int(tekitamayv2) mes "右" gosub *tekitama wait 1 : await 1 redraw 1 loop *tekitama repeat tekitamakazu if tekitamah.cnt=0 : continue tekitamax.cnt+=0.0+tekitamaxv.cnt tekitamay.cnt+=0.0+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 int(tekitamax.cnt),int(tekitamay.cnt) : mes "." loop return *tekishot kak = atan(ziy-tekiy-5,zix-tekix-3) ds=8 //敵弾の速度 repeat tekitamakazu if tekitamah.cnt>0 : continue tekitamah.cnt=1 tekitamax.cnt=0.0+tekix+3 : tekitamay.cnt=0.0+tekiy+5 tekitamaxv.cnt=cos(kak)*ds tekitamayv.cnt=sin(kak)*ds tekitamaxv1=tekitamaxv.cnt tekitamayv1=tekitamayv.cnt break loop repeat tekitamakazu if tekitamah.cnt>0 : continue tekitamah.cnt=1 tekitamax.cnt=0.0+tekix+3 : tekitamay.cnt=0.0+tekiy+5 tekitamaxv.cnt=cos(kak+tyosei)*ds tekitamayv.cnt=sin(kak+tyosei)*ds tekitamaxv2=tekitamaxv.cnt tekitamayv2=tekitamayv.cnt break loop repeat tekitamakazu if tekitamah.cnt>0 : continue tekitamah.cnt=1 tekitamax.cnt=0.0+tekix+3 : tekitamay.cnt=0.0+tekiy+5 tekitamaxv.cnt=cos(kak-tyosei)*ds tekitamayv.cnt=sin(kak-tyosei)*ds tekitamaxv3=tekitamaxv.cnt tekitamayv3=tekitamayv.cnt break loop return
#ちなみに、僕の改造した例です。 http://cgi41.plala.or.jp/~uhyo_/shootLzh.lzh
#画像は使わないで下さいね(汗



Yu

リンク

2007/2/12(Mon) 20:11:33|NO.5629

おー こんなに早く一番期待していた答えがかえってくるとは!
うひょさん、ありがとうございます!
いやぁ こういうのはプラグイン等を使わないと出来ないのかと悩んでいましたが、そんなことは無いのですね。
ところで、dimはddimに置き換えなければならないのでしょうか?
ddim この命令はあまり使わないのでよく分からないのですが、ddimの場所はdimでも変化が無いように思えます・・・



うひょ

リンク

2007/2/12(Mon) 21:00:00|NO.5632

ddimは実数型の配列を作る命令でdimは整数型です。
しかし、今回の場合は実は変わりません。
内部で実数型に変換されています(うろ覚え)。
とりあえず、一応明示の意味で。



Yu

リンク

2007/2/12(Mon) 22:33:20|NO.5639

なるほどぉ ddimは実数と、、、
よし、無事に今作成してるシューティングのスクリプトに組み込むことが出来ました。
改めてありがとうございました。
うひょさんが製作されたシューティングもなかなか本格ですねぇ
製作期間はどのくらいでしょうか?



うひょ

リンク

2007/2/13(Tue) 16:52:33|NO.5662

HSPを始めたときからたまにいじっているので
もうすでに1年くらいになってます。
まだまだ途中ですが(汗



ONION software Copyright 1997-2021(c) All rights reserved.