1MS サブウエポンを作ろう


2018年 6月1日
 
 
 今回はいただいたコメントに基づいてサブウエポン(複武装、特殊攻撃)要素をつけたいと思います。
 
 
 その前にコメントいただいた方、発見と返事が送れて済みませんでした。

 ブログ開設以来、長い事コメント 0が常態だったので、確認する習慣が無いとか、確認する方法とかよく分からなかったので。
 以後は確認するようにします。

 コメントありがとうございました。
 
 
 さてサブウエポンですが、例として折角エクセリオンを挙げてもらったのもあり、とりあえずそれっぽくしてみました。

 バルカン、クリックで一定数発射、弾数制限有り。

 弾数の増やし方は色々方法はありますが、とりあえず今回はエクセリオン方式で敵を倒したら一定数増えます。
 
 
 それと前回のソースにバグがありました。

repeat eb ; 敵との当たり判定
 if ef(cnt)=0 : break

 continue(次を繰り返せ)と書かなくてはいけない所を break(終了しろ)と書いたために、その f(フラグ)の敵が 0なら以降当たり判定がなくなるという。

 つまり少し謎のすり抜けがあったかもしれません。

 ブログの表記は直しますが、ゲームは HTML編集しなければいけないし、めんどうなのでそのままにします(今回のは直ってます)


 
 
 今回は問題が発生して、画面がちらつく。

 表示の量が多いのか、計算が多いのか、別の理由なのかイマイチ分からないのでその検証は次回以降にする。

 ただ自分の意見としては素直に JAVAとか他の言語やった方が良いとは思う、スペック的にもプロで仕事目指すにしても。

 HSPは、まあ使い方次第ではあるけど、あくまでも入門だと割り切った方が良いだろうね。

 少なくともこれでブラウザ用の STGみたいな動きのあるものを、というのは少し無謀かもしれない。
(スマホでもちらついたので別の原因かもしれない、PCのウインドウ起動なら問題無い
 それと普通の HSPと HSPdishの webGL要するにブラウザ版とまた違うので注意
 そしてアンドロイドアプリとして作るのとも違う、これはブラウザ版なのだ
 どの道総じてブラウザは重い)

 まあ、もうちょっとやってみないと何とも言えないかな。
 
 
 今回はスマホ用にクリック発射を実装したけど、ただボタン押すだけじゃ無くて、放してる常態から一定フレーム内押してもう一度放したら発射。

 長押しでは発射されない仕組みになってる。
 
 
 後はサブウエポンのバルカンは 1フレームに 3発同時発射、最初の位置を 0~2回分後退させておく、という手法をとった。

 ただ 1フレームのスピードと計算は前回と同じなので、単に 1フレームに同時3発発射というだけの事になってる。

 つまり今回はまだスピード 20 × 3回で計算をしてるが、次は 60 × 1回で、線との当たり判定をしたいとは思ってる。
 
 
 それと集弾率をランダム座標では無くて、ランダムラジアン(円周率)にした。

 ただしメインショットは着弾点の特定が難しかったので、止めにしてそのままにしてる。
 
 
 それでは今回のソース、バルカンの要素が増えてる、変数とか処理とかはショットや敵とほとんど同じ。

 ← バルカン

 
 

プログラム解説

入力判定

repeat 1 ; バルカンの入力判定
 if k=256 : kf=1 : kc+ : break ; 押している
 if kf=0 : break ; 一度も押してない

 kf=0 ; 押しフラグリセット
 if kc>2 : kc=0 : break ; 2フレーム以上押していた
 if vc>0 and vn=0 : vn+=vnb ; 発射要求数
 kc=0
loop

 この前に stick k という命令が実行されていて、kの変数にキー入力の値が入る。
 k=256はマウスの左クリックと、スマホのタッチという意味。

 kf=そのキーを押してるか、0=押してない、1=押してる。

 kf=1の時、kcを +する、kc=何フレームキーを押してるかのカウント。

 再び kf=0になった時、つまりボタンを放した時 kcが 2フレーム以下なら特殊攻撃発動、それ以上押しっ放しなら照準を動かしているものと見る。

 要するにポンと押した時だけ発動するようなプログラム。

 vc=残弾数、vn=発射数、発射中の変化はしないようにしてる。

 
 
バルカン

 ソースの内容はショットと敵とほとんど同じ。

 ショットのソースをコピペして sを vに書き換え、改造して作った。
 
 
repeat vkc : cnt2=cnt ; 1フレームに発射される数
 始めに vkc発分同時発射する。
 
 

rd=double(-(vu/2)+rnd(vu+1))/100.0 ; 揺れ幅(ラジアン)
 rad=atan(xn,yn)+rd ; 距離xyから角度を求める

 ラジアン(向き)に + -する形で弾道の揺らぎを変化させる。
 vu=ゆれ幅。
 
 

repeat cnt2
 vx(vcn)-=vdx(vcn) ; 始点座標をバックさせておくx
 vy(vcn)-=vdy(vcn) ; 始点座標をバックさせておくy
loop

 1発目は 0回、2発目は 1回分、3発目は2回分、あらかじめバックさせておく。
 
 
repeat vkc ; vkc回移動

 結局今回はまだ 1フレームに3回動かしている。

コメントを残す

メールアドレスが公開されることはありません。