0

AndEngineとBox2dを使ってゲームを作っています。スプライト/ボディはランダムに生成され、シーンに配置されます。面積を計算して重なり合うかどうかを確認できることはわかっていますが、これは大変な作業のようです。スプライト/ボディが別のスプライトの内部に作成されているかどうかを検出する簡単な方法はありますか?何かのようなもの:

boolean outside = false;
while(!outside){
try{
randx = random.nextInt(650) + 25;
randy = random.nextInt(400) + 25;
sprite = new Sprite(randx,randy,spriteTR,getVertexBufferObjectManager())
scene.attachChild(sprite);
outside = true;
}catch(){}

または、try / catchは機能しませんか?

4

1 に答える 1

0

はい、必要なことは、両方のスプライトを作成してから、衝突検出を行うことです。これを行う簡単な方法と、box2d を介したより複雑な方法があります。

簡単な方法:

sprite1.collidesWith(sprite2);

2 つのスプライトが互いに接触している場合は true を返す必要があります。

Box2d を通じて、 ContactListenerと呼ばれるものを使用して衝突を検出します。

            ContactListener contactListener = new ContactListener()
            {
                    @Override
                    public void beginContact(Contact contact)
                    {   
                    }

                    @Override
                    public void endContact(Contact contact)
                    {  
                    }

                    @Override
                    public void preSolve(Contact contact, Manifold oldManifold)
                    {
                    }

                    @Override
                    public void postSolve(Contact contact, ContactImpulse impulse)
                    {  
                    }
            };

beginContact 内で、スプライトの位置を再びランダム化するためのコードを実行する必要があります (または、使用するその他のアルゴリズム)。他のメソッドは、追加機能を提供します。たとえば、2 つのオブジェクトが互いにオーバーラップしなくなったときに endContact を使用できます。

詳細と詳細なチュートリアルについては、http ://www.andengine.org/forums/tutorials/contact-listener-t5903.html を参照してください。

于 2012-07-05T12:05:36.750 に答える