Box2D を物理エンジンとして使用して、Android 用の 2D 水中アクション RPG を開発しています。主に、壁、岩、その他の生き物で構成される環境内での衝突検出、衝突応答、およびゲーム内キャラクターの動きです。
Box2D を使用してキャラクター アニメーションを実装するための 2 つの異なるアプローチを試しましたが、どちらにも問題が見つかりました。私は Box2D と物理エンジンに不慣れなので、これらのことをどのように行うのが最善かについての推奨事項をいただければ幸いです。
私がやろうとしているアニメーションの例は次のとおりです。
魚は別の魚を攻撃したいので、次のことを行います:
1) ターゲットに向かって高速で移動します
2) ターゲットの生き物から噛みつきます
3) 向きを変えて逃げ、攻撃が始まった場所に戻ります
4) 向きを変えてターゲットに向かいます,別の攻撃に備える
私が試した2つのアプローチは次のとおりです。
A)攻撃者に ( body.applyForce()を使用して) 力を加えて攻撃者をターゲットに向けて動かし、衝突後に別の力で再び攻撃者を元に戻します
問題:
* 攻撃者は頻繁にターゲットに命中し、跳ね返り、疾走します。すごいスピードで戻ってきて、どこでも壁に跳ね返ります。速度は、ターゲットに影響を与える場所、ターゲットの質量などに応じて、かなりランダムです。アニメーションが壊れて、ひどく見えます.
* 物理世界で特定のアニメーションをシミュレートしてリアルに見せるために、攻撃者にどのような力をいつ適用する必要があるかを理解するのは非常に困難です。
B)攻撃者の位置を ( body.setTransform()を使用して) 直接設定して、攻撃者を正しい位置に移動します。
問題点:
* 位置を直接設定すると、攻撃者は壁や他のクリーチャーとの衝突を無視できるため、壁に引っかかることがよくあります。
* プレイヤーが攻撃している場合、プレイヤーが画面の中央にとどまるように、プレイヤーの移動に合わせてワールドの原点を更新します。これは、アニメーションを開始するときを除いて、画面をアニメーションに追従させたくないため、うまく機能しますが、Box2D の力をオーバーライドしているため、私にはわかりませんが、既存の速度の動きのコンポーネントのみです/位置を設定したときの速度。確かにこれを行うことは可能ですが、難しいです-おそらく何か明らかなものが欠けています。
衝突を監視する必要がありますか? 衝突応答をオーバーライドしますか?? 他の何か?
では、この問題にどのようにアプローチすることをお勧めしますか?