3

Box2D を物理エンジンとして使用して、Android 用の 2D 水中アクション RPG を開発しています。主に、壁、岩、その他の生き物で構成される環境内での衝突検出、衝突応答、およびゲーム内キャラクターの動きです。

Box2D を使用してキャラクター アニメーションを実装するための 2 つの異なるアプローチを試しましたが、どちらにも問題が見つかりました。私は Box2D と物理エンジンに不慣れなので、これらのことをどのように行うのが最善かについての推奨事項をいただければ幸いです。

私がやろうとしているアニメーションの例は次のとおりです。

魚は別の魚を攻撃したいので、次のことを行います:
1) ターゲットに向かって高速で移動します
2) ターゲットの生き物から噛みつきます
3) 向きを変えて逃げ、攻撃が始まった場所に戻ります
4) 向きを変えてターゲットに向かいます,別の攻撃に備える

私が試した2つのアプローチは次のとおりです。

A)攻撃者に ( body.applyForce()を使用して) 力を加えて攻撃者をターゲットに向けて動かし、衝突後に別の力で再び攻撃者を元に戻します
問題:
* 攻撃者は頻繁にターゲットに命中し、跳ね返り、疾走します。すごいスピードで戻ってきて、どこでも壁に跳ね返ります。速度は、ターゲットに影響を与える場所、ターゲットの質量などに応じて、かなりランダムです。アニメーションが壊れて、ひどく見えます.
* 物理世界で特定のアニメーションをシミュレートしてリアルに見せるために、攻撃者にどのような力をいつ適用する必要があるかを理解するのは非常に困難です。

B)攻撃者の位置を ( body.setTransform()を使用して) 直接設定して、攻撃者を正しい位置に移動します。
問題点:
* 位置を直接設定すると、攻撃者は壁や他のクリーチャーとの衝突を無視できるため、壁に引っかかることがよくあります。
* プレイヤーが攻撃している場合、プレイヤーが画面の中央にとどまるように、プレイヤーの移動に合わせてワールドの原点を更新します。これは、アニメーションを開始するときを除いて、画面をアニメーションに追従させたくないため、うまく機能しますが、Box2D の力をオーバーライドしているため、私にはわかりませんが、既存の速度の動きのコンポーネントのみです/位置を設定したときの速度。確かにこれを行うことは可能ですが、難しいです-おそらく何か明らかなものが欠けています。

衝突を監視する必要がありますか? 衝突応答をオーバーライドしますか?? 他の何か?

では、この問題にどのようにアプローチすることをお勧めしますか?

4

1 に答える 1

0

私はFarseerでの作業にしか慣れていませんが、FarseerはBox2Dからのかなり直接的な移植であるため、この回答が引き続き役立つことを願っています.

力の適用とテレポートの次に、ボディの直線移動速度を設定することもできます。こうすることで、力を加えずに魚をプレイヤーに向けて動かすことができます。魚の体から衝突イベントをキャプチャし、魚がプレイヤーに当たったかどうかを各イベントで比較し、プレイヤーとの衝突イベントで false/NoCollision を設定して、跳ね返らないようにする必要があります。ここで、魚の体がプレイヤーの体との衝突を無視するように設定し、固定ジョイントを使用して魚をプレイヤーにくっつけます。噛むアニメーションを再生できるようになりました。

バイト アニメーションの後、魚を離したいとします。逃げるアニメーションを開始し、ジョイントを取り外して、魚をプレイヤーの体の端にテレポートします (衝突しないようにします)。その後、魚とプレイヤーの体との間の衝突を再度有効にし、魚をプレイヤーから遠ざけます (直線移動速度を再度設定するか、力による素敵な跳ね返り効果のために)。

于 2011-04-08T06:23:21.057 に答える