リフトのプログラムフローは以下のようになっています。
A〜Dまで順を追って説明します。

A. リフトの番号読み出し
サンプルゲーム中にはリフトが5つありますが、5つのリフトについて、
行動パターンを決めます。このパターンを示す変数がpatternです。
ID_Read()というメソッドを呼び出すことで、リフトの番号が得られるようになっています。
ID_Read()内部では、すべてのオブジェクトを読み込み、ナンバリングを行っています。
if (ID_Read()==1) pattern=1;
if (ID_Read()==2) pattern=2;
if (ID_Read()==3) pattern=3;
if (ID_Read()==4) pattern=2;
if (ID_Read()==5) pattern=4;
B. 角度初期設定
周期的運動をさせるためにsin,cosを使って動かしますが、角度の初期値が
必要になるので設定をします。変数patternに応じて角度を決めます。
角度を変更すると、軌道は同じになりますが、動き方が変化します。
1回転360度を軌道にするので、終了角度は初期角度に360を足しこみます。
if (pattern==1) start_ang=-180;
if (pattern==2) start_ang=-90;
if (pattern==3) start_ang= 90;
if (pattern==4) start_ang=180;
end_ang=start_ang+360;
C. リフトを動かす
vx,vyのどれを周期的に動かすかで運動の方法が変わります。
パターン1 : vxだけを周期的に動かす → 横往復運動
パターン2 : vyだけを周期的に動かす → 縦往復運動
パターン3 : vx,vyを両方動かす(片方sin、片方cos) → 円運動
パターン4 : vx,vyを両方動かす(両方ともsin) → 斜め往復運動
if (pattern==1) {vx= cos(i); }
if (pattern==2) {vy= cos(i); }
if (pattern==3) {vx= sin(i);vy =cos(i);}
if (pattern==4) {vx= cos(i);vy=-cos(i);}
x+=vx; y+=vy;
D. 自機がリフト上に乗ったときの処理
基本的には イベント - 可動ブロックのプログラムを流用し、
自機が上に乗れるようにします。自機がリフトを横から押しても動かないように
変更が加えてあります。→ onLift_chk()
あとは、以下の3点を付け加えます。
・自機の動きをリフトの動きに追従させる。
・リフトに乗ったまま横のブロックに衝突した場合、それ以上進まないようにする。
・リフトに乗ったまま上のブロックに衝突した場合、自機を消去する。
onLift_chk();
if ($Mychar.onLift==1 && $Mychar.wX==0){
if (getkey(37)==0 && getkey(39)==0) $Mychar.vx=vx;
$Mychar.WallHit_chk();
if ($Mychar.wX!= 0) $Mychar.x-=$Mychar.vx;
if ($Mychar.wY==-1 && vy<0) $Mychar.die();
$Mychar.y+=y-before_y;
}
before_y=y;
|
|
|
|