テクニック集/動く床の作り方

Last-modified: 2011-12-08 (木) 13:23:52

アクションゲームでよくある「移動していて、自機が乗ると一緒に移動する床」の作り方です。

※追記:回転する床を追加しました。
※追記:下からすり抜けられる"坂道"を追加しました。

サンプルファイル

  • movingfloor.mfa
    ※回転する床・下からすり抜けられる"坂道"のサンプルも含まれています。
    ※自機の動作にPlatform Movement objectを使用しています。

用意するもの

movingfloor1.png
青色のアクティブオブジェクトが動く床です。パス動作で行ったり来たりする動作を組んでいます。
動作はバウンスボールなど他の動作でも構いません。
赤色のオブジェクトが自機、その下の黄色のオブジェクトは自機の足元に置いて動く床との判定をさせる物です(理由は後述)。

作り方

イベントの肝はこの部分です。
movingfloor2.png
10行目の常に実行では、現在の床のX,Y座標から、下の11行目の常に実行で取得した床のX,Y座標の値を引いています。
これで「(現在のX,Y座標) - (1フレーム後のX,Y座標)」という式になり、床の移動量を求めることが出来ます。
あとは、自機が床に乗っている間、自機の座標を床の移動量分だけ移動させれば、床の移動に合わせて自機も移動するようになります。

回転する床

回転する床は動く床よりも簡単です。自機が床に乗っている間、一定方向に強制的に座標移動させれば良いだけです(ベルトコンベアなどの表現にも使えるでしょう)。
床は見た目上回っていれば良いだけなので、イベントで角度を変えるなりアニメーションさせるなりで。

下からすり抜けられる坂道

Platform Movement objectで「下からすり抜けられる"坂道"」を組む場合、通常の平面の下からすり抜けられる地形と同じように組むと、乗った坂道を登ろうとすると下に落ちてしまいます。

通常の坂道(下からすり抜けられない坂道)であれば正常に坂を登ることが出来るので、少々ややこしいですが、下からすり抜けられる坂道に乗っている間は一時的に通常の坂道に切り替えるようにして対処しました。
詳しくはサンプルを参照。

※現在の問題
自機の移動速度が速いと切り替え判定を抜けてしまって坂に乗れません。

注意

  • 座標移動時に自機が動く床に乗っているかどうかの判定について、Platform Movement objectに設定しているオブジェクトと床とを直接判定させると、乗っている間に徐々にずれていってしまいます。
    自機の足元に判定用のオブジェクトを付けて、それと床の判定をするようにしましょう。
    自機が動く床に着地するイベントは通常の地面との接地と同様に必要です。
  • そのままでは左右からぶつかるとめり込んでしまいます。
    自機の上左右にも判定を付けて、それらと重なると押し出されるようにして対処します。
    詳しくはサンプルを参照。

コメント

  • これ、メッチャ知りたかったので助かります。 -- 2010-04-17 (土) 00:51:07
  • 下や横から接触するとめりこみます (T-T -- 2011-01-24 (月) 21:22:15
  • プレイヤーの左右に判定オブジェクトを付け、それと地形が重なると押し出されるようにしましょう -- ASD? 2011-01-25 (火) 15:42:58
  • X("プレイヤー")+と-ということですね? -- 2011-01-31 (月) 09:42:03