“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

128.HSPでゲームを作ろう:シューティングゲームっぽい何か その5

細胞を出現させて、ショットとの当たり判定を行って、拡大して爆発させる(消す)ところまでできたので、次は、アイデアの核となる、細胞の吸着処理を作る。

イデアとかたいそうなことを書いたけど、プロトタイプで作った某キューブラッシュと同じ。
細胞が1段階でも膨らんだら、画面の端に来た時に、吸着する。(止まる)
吸着した後は、ショットが当たっても膨張も破壊もできなくする。
そして、別の吸着済みの細胞と接触したら、そこに吸着する。

この処理を簡単に実装するために、細胞の状態によって、3つのタイプ番号を割り当てるようにした。

 未膨張の細胞:4
 膨張した細胞:8
 吸着した細胞:16

ショットとの当たり判定は、es_checkを、4+8+16のタイプ番号とで行い、衝突していたスプライトのタイプ番号に応じて、処理内容を分岐させた。
こんな感じ。

ショットのスプライトを消す
if タイプ番号=4
 細胞を膨張する処理
 タイプ番号を8に変更
if タイプ番号=8
 if 細胞の膨張が最大だったら
  爆発の処理
 else
  細胞膨張の処理
(タイプ16は、当たっても膨らませないので、ショットのスプライトを消すだけ)

吸着する処理は、膨張した細胞となる、タイプ番号8のスプライトを総当たりでes_findで探して、各スプライトの座標が画面の端の座標になっているかで判定した。
タイプ番号8のスプライトをes_findで探したときに、合わせてes_checkで、吸着した細胞のタイプ番号16との当たり判定もチェックした。
これで、吸着する処理を行うための、前処理ができた。

実際に吸着させるとはどうすればいいか。
まずは、タイプ番号を吸着した細胞を表す16に変更する。次は移動を止めなくてはならない。
判定した地点で止まって、表示させ続けることなのだが、細胞はes_adirで動かしているので、解除すればいいのだが、方法がわからず。
es_aposで、X,Yともに移動量を0にすれば、その場に止まったので良しにしたw*1

あとはキャラパターンの変更。
スプライトを自動的にアニメーションするようにes_patanimで、パターン定義したのだが、吸着した後もアニメしてしまうと目が痛いw
なので、アニメーションも止めたいが、これまた方法がわからない。
結局、アニメしない細胞のスプライトパターンも、es_patで定義しておき、es_chrで、パターン番号を差し替えた。
これで、細胞同士の吸着処理もできた。

    n=200
    repeat
      es_find n,8,n ;タイプ8(1段階でも膨張した細胞)を対象にする
      if n=-1 : break
      es_check cellco,n,16 ;吸着済みの細胞との当たり判定
      es_getpos n,cx,cy,0
  
      ;端に到達するか、他の細胞に接触したら吸着
      if cx<=0 or cy<=0 or cx>=800 or cy>=600 or cellco>0 {
        es_type n,16 ;吸着したらタイプ16にする
        es_apos n,0,0 ;細胞の動きを止める
        es_chr n,100 ;細胞のスプライトパターンをアニメしないものに変更
      }
      n+
    loop

*1:のちに、HSP掲示板で質問して、es_adirで移動スピードを0%にすることにした。