2012-01-21 21 views
2

AndEngineとそのBOX2D拡張を使用して、2D SideスクロールAndroidゲームを開発しています。BOX2D - Monsterとの適切な衝突

私は「足」と「ヘッド」の2つのセンサーので、私は別のオブジェクトに触れ正確にどのプレイヤーの側面を知っているかもしれないなどと、プレーヤー本体を持っているがここではそれが動作しないかを示す画像です:

enter image description here

現在、プレイヤーが足で地面に触れているかどうかをチェックするためにうまくいきます。たとえば、ジャンプすることができます。今、モンスターの体に接触した後に実行されるアクションを実装しようとしています。

私の接触センサでは、私は

   if (x1.getBody().getUserData().equals("monster") && x2.getUserData().equals("foot")) 
       { 
        jump(); 
       } 

       if (x1.getBody().getUserData().equals("monster") && x2.getUserData().equals("player")) 
       { 
        GameManager.playSound(lostSound); 
        handleDie(); 
       } 

をチェックしています。しかし、私はモンスターの「頭」にジャンプするたびに(だから、基本的に、私は足のセンサーでそれに触れています)はアクションが実行されて死亡しました。両方の接触が接触聴取者に気づかれるので、足のセンサーを高くして、プレーヤーの体からより多く突き出るようにすると機能します(プレイヤーの体はプレーヤーのスプライトテクスチャーの正確な形です)ので、プレーヤーとモンスターの接触がないように見えますまったく。

これを正しく処理するためのヒントについては、事前におねがいします。

答えて

1

私が考える最も簡単な方法は、あなたの「フィート」センサーを固体の固定具にすることです。また、プレイヤーの体を小さくする。あなたは実際に3つのソリッド備品(ヘッド、ボディ、フィート)のプレイヤーを作ることができます。衝突はまだ右のように処理されますが、あなたは足でモンスターに触れる場合は、あなたの更新方法であるため、固体の固定具の本体と、このような

+0

本当にうまくいきましたが、それは実際にはそれを行う最も簡単な方法でした。プレーヤーの体に関連するいくつかの問題がありましたが、最終的には機能します。私はちょうど 'ダウン'と呼ばれる3番目の固定器具を追加しました - 今は2個の固定器具と1個のセンサー(足センサー)があります – Matim

0

チェックの接触を彼に触れるする方法はありません。

for (b2ContactEdge* ce = feet->GetContactList(); ce; ce = ce->next) 
{ 

    const b2Body* bodyA = c->GetFixtureA()->GetBody(); 
    const b2Body* bodyB = c->GetFixtureB()->GetBody(); 
    //if one of them is a monster, mark him for being ignored this frame. 
} 

for (b2ContactEdge* ce = player->GetContactList(); ce; ce = ce->next) 
{ 
    const b2Body* bodyA = c->GetFixtureA()->GetBody(); 
    const b2Body* bodyB = c->GetFixtureB()->GetBody(); 
    //if the monster is ignored, jump(), else die() 
} 
は、

おそらく、モンスターがプレイヤーの下にあるかどうかを確認する必要があります。

これはC++ですが、Javaでも同様のことができるはずです。

希望します。

+0

あなたの答えをありがとう、私はこの解決策もチェックします。 – Matim

関連する問題