如何知道身体的右侧或底侧是否发生碰撞

时间:2014-05-07 08:41:10

标签: android andengine collision-detection collision game-physics

我正在创建一个andengine游戏(参考本教程http://www.matim-dev.com/full-game-tutorial---part-1.html),我的主要角色走路并被顶部掉落的砖块击中。如果他被倒下的砖块击中,他就会死去。但是一旦砖块在地面上,主要的charachter可以触摸它并跳上它。现在我知道如何找到两个身体是否相互接触。但如何找到接触是在charachter的上侧还是在身体的左侧或右侧。

我用于联系的代码如下

private ContactListener contactListener()
{
    ContactListener contactListener = new ContactListener()
    {
        public void beginContact(Contact contact)
        {
            final Fixture x1 = contact.getFixtureA();
            final Fixture x2 = contact.getFixtureB();


            Vector2[] contactPoints = contact.getWorldManifold().getPoints();

            System.out.println("the points are as ::"+contactPoints);


            if (x1.getBody().getUserData() != null && x2.getBody().getUserData() != null)
            {
                if (x2.getBody().getUserData().equals("player"))
                {
                    player.increaseFootContacts();
                }

                if (x1.getBody().getUserData().equals("platform2") && x2.getBody().getUserData().equals("player"))
                {
                    engine.registerUpdateHandler(new TimerHandler(0.2f, new ITimerCallback()
                    {                                   
                        public void onTimePassed(final TimerHandler pTimerHandler)
                        {
                            pTimerHandler.reset();
                            engine.unregisterUpdateHandler(pTimerHandler);
                            x1.getBody().setType(BodyType.DynamicBody);
                        }
                    }));
                }

                if (x1.getBody().getUserData().equals("platform3") && x2.getBody().getUserData().equals("player"))
                {
                    x1.getBody().setType(BodyType.DynamicBody);
                }
            }
        }

        public void endContact(Contact contact)
        {
            final Fixture x1 = contact.getFixtureA();
            final Fixture x2 = contact.getFixtureB();



            if (x1.getBody().getUserData() != null && x2.getBody().getUserData() != null)
            {
                if (x2.getBody().getUserData().equals("player"))
                {
                    player.decreaseFootContacts();
                }
            }
        }

        public void preSolve(Contact contact, Manifold oldManifold)
        {

        }

        public void postSolve(Contact contact, ContactImpulse impulse)
        {

        }
    };
    return contactListener;
}

请给我一些建议。

1 个答案:

答案 0 :(得分:0)

这对你有用吗,或者你需要更多关于身体接触方法的信息?

public boolean areBodiesContacted(Body pBody1, Body pBody2,
Contact pContact)
{
if(pContact.getFixtureA().getBody().equals(pBody1) ||
       pContact.getFixtureB().getBody().equals(pBody1))
   if(pContact.getFixtureA().getBody().equals(pBody2) ||
           pContact.getFixtureB().getBody().equals(pBody2))
       return true;
return false;
}