黒の時代

弾幕風ph3初心者による弾幕風講座。まだ難しいことは出来ませんが、質問要望あればコメントにどうぞ。

NO.8 敵を動かしてみよう(忘れていたわけじゃない←)

敵を動かすの忘れてました。
いえ、忘れてたわけじゃありません。めんどくさかっただけです。

我らがテンプレにはすでに@Initializeに
ObjMove_SetDestAtFrame(objEnemy, cx, 130, 60);
ってあると思います。コイツで動かします。

あ、ちなみにobjEnemyは我々が勝手に名前をつけた変数ですよ。

スクリプトの最初で
let objEnemy;って宣言して、
@InitializeでobjEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS);
ってボス敵のIDを代入してますね。

ここらへんも0.x系との違いですね。0.x系はボスはボス専用の関数で動かしていましたが、ph3では一般のオブジェクト用の関数で動かしていきます。ちょっとめんどくさい感じがしますが、敵を数体出せるようにするための仕様変更だそうです。

代入無しの宣言を最初に行っている理由は、
代入が行えるのはボスを作成する@Initializeだけだけど、ここでletで宣言してしまうと、objEnemyって変数がグローバルなものでなくなってしまう = @Initialize内でしか使えなくなってしまうからですね。

さて東方のボスキャラは、固有の動きをするものを除いては、
自機がボスより右にいる→右に動く
自機がボスより左にいる→左に動く
って感じで周期的に動きますね。

それともうひとつ条件が。ボスが画面端近くに居る場合は、ちょっと中央に戻ります。

この4種類の分類をif文で作ってみましょう。まずは自分で考えてみてください。






…画面端の条件の方が、自機とボスの相対位置の条件より優位にありますよね。そこに気をつけて組みます。
画面端の座標は、左が0で右がGetStgFrameWidth()です。exと同じようにスクリプトの最初でlet rightx = GetStgFrameWidth;とか書いておいてもいいと思います。

if(GetStgFrameWidth-ex<60) {左にちょっと動く}
else if (GetPlayerX>ex) {右に動く}
if(ex<60) {右にちょっと動く}
else if (GetPlayerX>ex) {左に動く}

が答えです。60は適当。

ObjMove_SetDestAtSpeed
ObjMove_SetDestAtFrame
ObjMove_SetDestAtWeight

3種類あるので、用途に応じて使ってみてください。

今回はこれだけです。

>>目次:no.0