問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
1 名前:flash初心者 日付:2012/05/22(火)15:29:13 ID:Cv5V1RbQ2RON
はじめまして、いつも参考にさせていただいてます。
自分はアクションゲームを作っています。
リフト(動く足場)に合わせて乗っているキャラクターも動くようにしたいんですが
いい方法はありませんかね?
キャラクターにリフトの移動量を足す考え方を思いついたんですが上下移動がぎこちないです…。
Flashというよりアルゴリズムの問題ですが一応環境はCS5のAS2.0で考えています。
よろしくお願いします。
2 日付:2012/05/26(土)23:49:06 ID:WanNqiphAFSQ
>キャラクターにリフトの移動量を足す考え方を思いついたんですが

自分もこのやり方ですね。

1.先に足場を移動する。移動前の位置を残しておく。

2.プレイヤーを移動する。

3.「プレイヤー」と「"移動前"の足場」と当たり判定を計算する。

4.当たっていれば、「"移動前"の足場」の上に「プレイヤー」がちょうど乗るように、「プレイヤー」を上方向に補正。

5.さらに、「足場の移動量」を「プレイヤー」の座標に加算する。これで「移動後の足場」に「プレイヤー」がちょうど乗っている。

6.「プレイヤー」と「"移動後"の足場」との当たり判定を計算する。(足場に押されたかチェック用)

7.横同士が接触していれば「足場」から押しのけるように「プレイヤー」を横方向に補正。


>上下移動がぎこちないです…。

処理順が重要になるので、
プレイヤーの処理と足場の処理順序が逆だと
1フレームズレが発生してガタガタするかもしれないですね。
3 名前:flash初心者 日付:2012/05/29(火)11:22:36 ID:Cv5V1RbQ2RON File:[ 0.gif ]
回答ありがとうございます。
なるほど、更新する順番と「前」と「後」の判定が大事なんですね。
帰ったら試してみます(^^

もうひとつ質問よろしいでしょうか。回転する足場も実装したいんですがうまく表現するにはどうすればいいのでしょうか?
http://hakuhin.jp/as/collision.html#COLLISION_00
のページで説明している「レイ」を使えばいけると思うのですが、回転した時の頂点位置の取り方が思いつきません。
また角度のよってずり落ちる動きも付けたいです。よろしくお願いします。
4 日付:2012/05/29(火)13:16:06 ID:WanNqiphAFSQ
回転する足場については、
基本的な考え方は、>>2 と同じで
「移動前の足場の線分データ」と「プレイヤー」とで当たり判定があれば、
「移動前の足場」から「移動後の足場」までに行った姿勢の変化(差分)をプレイヤーにも反映させます。
行列を駆使することになると思います。

坂道のすべり落ちですが、
プレイヤーは常に重力の影響があるので、下方向の移動量に、毎フレーム好きな定数を加算しておきます。
後は、交差判定があったときにどんな処理をするかで決まります。

滑るようなベクトルの変換
http://hakuhin.jp/as/vector.html#VECTOR_04

交差していたときの移動量ベクトルを、滑りベクトルに変換して
そのまま移動量として利用すると加速するように滑っていきます。

交差していたときに、めり込んだ距離分のベクトルを、
滑りベクトルに変換して、プレイヤーの座標に加算するとより物理的になります。

「斜めの床」や「斜めの天井」で垂直ジャンプを繰り返した場合、
アクションゲームによっては、横方向の位置は変化しない事があります。
位置補正はベクトルで行わずに、敢えて上下方向に対して行うという場合もあります。

急な坂道で横方向に歩き出した場合、通常は重力が弱過ぎて空中に浮きます。
どんな急斜でも必ず地面を歩かせたい場合は、敢えて下方向を調べて
地面があれば吸着させるという処理が必要な場合もあります。
このスレッドについて
質問の状態 :
未解決
投稿開始日 :
2012/05/22(火)15:29:13
投稿終了日 :
2012/06/05(火)13:16:41
投稿者 :
flash初心者
レス総数 :
4
スレッド番号 :
93
MondoCollectionSystem ver.0x00020000 by Hakuhin