1

Flash Box2D の質問 (しかし、「フラッシュ」の部分は関係ないと思います)

キャラクターであるオブジェクトAと地面であるオブジェクトBがあるとします。

キャラクターが地面に触れたときだけ歩くことができるとします。

オブジェクトが別のオブジェクトに触れたときに検出できるボックス 2D コンタクト リスナーがあるため、これを使用して、キャラクターが地面に触れたときにリッスンできます。しかし、キャラクターが地面を離れたかどうかをどのように知ることができますか?

読んでくれてありがとう。

4

5 に答える 5

4

キャラクターであるオブジェクトAと地面であるオブジェクトBがあるとします。

キャラクターが地面に触れたときにのみ歩くことができると仮定します。

オブジェクトAがobjectAと呼ばれるb2Bodyであり、objectBがobjectBと呼ばれる別のb2Bodyであり、ワールドがm_worldと呼ばれると仮定します。objectBが地面である場合、密度は0であり、静的になります。objectAがobjectBの上にあるかどうかを確認する場合は、2つのオプションがあります。本体自体、つまりbox2d単位測定(1メートル= 30ピクセル)を使用するか、userDataプロパティで設定されたカスタムクリップへの参照を使用します。

2番目を使用する利点は、通常のピクセル単位を使用することです。登録ポイントが0,0ではなく中央にあることを念頭に置いてください。

したがって、更新ループ(m_world.Stepを呼び出す)では、次のようになります。

if((objectA.m_userData.y + objectA.m_userData.height*.5) < (objectB.m_userData.y-objectB.m_userData.height*.5)) trace('objectA is above ground');
else trace('objectB is on the ground');

コメントを読んで、もう一度更新してください。

ステージ上の要素からx、y、width、heightを取得するflash用のjsflコマンドを書き始め、box2dコードを生成しました。私はこの単純なゲームを作るためにそれを使用しました: http : //www.disturbmedia.com/games/breakfast他の誰かがすでにかなり一貫した何かを作ったので、私は車輪を再発明する必要がないようです。Carlos Ulloaがbox2dについても少し話したLFPUGから戻ったところ、彼はこのことを指摘しました。

http://www.sideroller.com/wck/

必要なものである、より複雑な形状定義の座標配列を生成するようです。ある意味、これはあなたの特定の質問に対する完全な答えではありませんが、それは注意深いステップです。

あなたの説明から、ゲームは本当に面白いように聞こえます。最新情報をお届けします:)

于 2009-04-12T21:47:27.477 に答える
2

私はあなたがこれを探していたと思います:

override public function EndContact(contact:b2Contact):void
        {
            if (contact.GetFixtureA().GetBody().GetUserData() != null)
            {
于 2011-10-28T14:01:16.673 に答える
1

あなたが質問して以来、box2dのバージョンが変わったと確信しています。

現在、地面の衝突を確認する一般的な方法は、衝突の「法線」の方向を確認することです。

上向きの場合は、先に進み、ヒーローが接地していると想定して、歩行を許可します.

あなたの質問の他の部分に答えるために

BeginContact と EndContact があります。

私は多くの場合、ヒーローに var grounded:Boolean 変数を保存して追跡し、ジャンプするときに手動で false に設定して、ヒーローが地面を離れる前にジャンプが複数回発生しないようにします。

これがいくらか役立つことを願っています。

于 2011-02-09T16:58:08.767 に答える
1

contact listener には、 Remove(b2ContactPoint) というメソッドがあります。このメソッドは、2 つのボディが接触していない物理エンジンによって呼び出されます。つまり、接点がなくなったのだ。その時点で、アクターであるボディ A が浮いていないことを検出できます。

もう 1 つの優れたソリューションは、アクタから地面にレイキャストし、それらの間の距離を確認して、浮いているか歩いているかを判断することです。これがうまくいくことを願っています

于 2009-04-29T11:51:08.953 に答える
1

しばらく前にこれを解決しましたが、私の解決策はばかげていますが、非常にうまく機能します。地面の密度、反発、摩擦をいくつかの「魔法の」数値に設定し、コンタクトリスナーで、それらのボディの1つがそれらの数値を持っているかどうか、もう1つのボディが私のスプライトであるかどうかを確認します。

私が言ったように、それはばかげていますが、これほど簡単に機能するものはまだ見たことがありません。

于 2010-12-16T17:41:37.767 に答える