細胞の動きの続き。前回は、出現位置と方向を設定できるようにした。
今回は、細胞が自分に寄ってくる追尾の動きについて。
といっても、すでに標準スプライト機能の勉強を始めた時に作った、某キューブなプログラムでも使っている、es_aim命令で簡単に実現できた。
coro3.hatenablog.jp
細胞を最初に動かすのは、es_adir命令で実行。そのスプライト番号を調べた状態で、es_aim命令を実行すると、動作が上書きされる。
だが、フレームごとに毎回es_aim命令を使ってしまうと、とんでもなく凶悪な追従エネミーになってしまうので、細胞が新たに出現するタイミングで、自機の方向に追尾して動くようにした。
面倒なのでw画面内に存在する細胞は、一斉に追尾するように、ループで処理を作った。
ただし、膨らんだ細胞まで追尾させると、吸着せず、クリアできなくなくなるので、一度も膨らんでない細胞だけを追尾させた。
こう書くと処理が大変そうだなと思うのだが、これまたes_type命令で設定できるタイプ番号があれば簡単だった。
以前のエントリーで、細胞の段階ごとに別々のタイプ番号を割り当てたと書いた。
未膨張の細胞:4
膨張した細胞:8
吸着した細胞:16
細胞のスプライトは、200番から割り当てて表示しているので、200から順にループさせる。
es_find命令でタイプ番号が4のスプライトが存在すれば、対象をピックアップ出来たことになる。
うん。標準スプライト機能、便利だぞ。
さらに、細胞のスプライトには、ユーザで設定できるESI_OPTIONに、追尾するかのフラグ、追尾する回数をそれぞれセットしている。
対象をピックアップして、追尾するフラグが1で、かつ追尾回数が1以上の時だけ処理するようにした。
処理には、こんな感じ。
;細胞の追尾処理(細胞出現のタイミングで動かす) if stage_cell_tra=1 { ;追尾フラグが1の時のみ n=200:pt=0 repeat es_find n,4,n ;タイプ4を対象にする(膨らませたら移動方向は固定) if n=-1 : break es_get opt,n,ESI_OPTION ;細胞スプライトに設定された追尾回数を取得 tranum=get_spOpt(opt,TRA_NUM) ;追尾回数が1以上なら、現在の自機の方向に追尾 if tranum>0 { tranum-- es_aim n,px,py,stage_cell_sp ;自機の座標に向かって移動する ;減算した追尾回数をユーザ定義に戻す opt=set_spOpt(opt,TRA_NUM,tranum) es_setp n,ESI_OPTION,opt } n+ loop }
前回の出現方向と、今回の追尾する動きを組み合わせることで、ステージのバリエーションを作りやすくなった。