トップページへ
 その他
・リフト1   | 利用規約 | 使い方 | 操作方法 |
■説明
周期的な動きをするリフトを設置しました。自機が上に乗って
移動できます。リフト移動パターンは、上下、左右、斜め、円の
4つを用意しています。
■参考
マップパターン - パターンを増やす
イベント - 可動ブロック

■解説
リフトのプログラムフローは以下のようになっています。
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;





トップページへ