1

AS2 で高度な衝突検出を行う最善の方法は何だろうと思っています。バウンディング ボックスのことではありません。具体的には、何かと衝突したときにプレーヤーが一方向に移動するのをどのように止めるのですか?

トップダウン シューターを想像してみてください。基本的に、これに似たゲームで衝突検出がどのように達成されたかを探しています: http://ninjakiwi.com/Games/Action/Play/SAS-Zombie-Assault-2.html

プレーヤーが現在動いている方向(上、下、左、右)を追跡する配列があります。また、対応する変数が true の場合にプレーヤーが各方向に移動できるようにする 4 つの変数もあります。プレイヤーが衝突配列内のムービークリップと衝突すると、プレイヤーが移動する方向に関連する変数を false に設定して、オブジェクトと衝突したときに進んでいた方向に移動し続けることができないようにします。問題は、プレイヤーが斜め (2 方向) に移動していて、一方向に移動し続けることができるはずのものと衝突した場合に発生します。例:

ここに画像の説明を入力

プレーは上方向に移動できるはずですが、できません。

もう 1 つの問題は、プレーヤーが移動できるかどうかを決定する変数が、反対方向のキーが押されたときに true に戻されることです (つまり、反対方向に移動したため、左が押されたときに右に移動できる変数が true に設定されます)。方向)。したがって、前の例で、斜めに移動せずに単に右に移動した場合、オブジェクトに触れなくなるまで上に移動しながら右を押したままにすると、左のキーが押されていないため、右に移動できなくなります。 .

私は物事を複雑にしすぎているようですが、プレイヤーが一方向に移動するのを止めるすべての壁を個別に配置する以外に方法はありますか? (つまり、プレイヤーがこの壁に触れた場合、右への移動を停止します)。<--- この方法では、オブジェクトが回転したときにランダムに生成されたマップが許可されません。または、オブジェクトの回転に応じて数学を使用してこれを回避できる方法はありますか?

テストをヒットする最も簡単な方法は何ですか? :D

4

1 に答える 1

1

コードを投稿していないのでわかりにくいですが、衝突に間違った方法で反応しようとしている可能性があります。

壁に衝突した場合に移動を無効にするのではなく、壁に衝突した場合にプレーヤーを壁の外側に移動する必要があります。

基本的にやりたいことは次のとおりです。

  1. プレーヤーが最後のフレームにいた場所を追跡します。
  2. このフレームでプレイヤーが壁に衝突しているかどうかを確認します。
  3. 彼がいる場合は、衝突が発生する前に彼が壁のどちら側にいたかを把握するために、彼が最後のフレームのどこにいたかを確認します。この情報を使用して、プレーヤーが壁の面に触れるように位置を変更します。
于 2013-06-25T04:13:37.777 に答える