Box2d - AndEngine

时间:2014-04-25 11:08:05

标签: box2d andengine

如何在andengine gles2中获得与身体相关联的精灵? 当身体发生碰撞时,我可以获得相关的身体,但我怎样才能获得与这些身体相关的精灵。

请帮助我,我是andengine和box2d的新手。

提前致谢。

4 个答案:

答案 0 :(得分:1)

当您创建一个Body时,可以设置一些额外的数据,如下所示:

myBody.setUserData( "Monster" ); //to set a String
myBody.setUserData( 333 ); //to set a number
myBody.setUserData( new MyData() ); //to set other Object

实际上这个方法接受任何东西,因为它需要一个Object元素。 因此,您可以创建自己的类来处理与该主体关联的精灵/实体,如下所示:

class BodyData{
    public IEntity mEntity;
    public String mName;

    public BodyData(String pName, pEntity){
        mEntity = pEntity;
        mName = pName;
    }
}

然后当你创建你的身体并连接到精灵时,你可以这样做:

myPlayerBody.setUserData( new BodyData("Player", myPlayerSprite ));

当检测到碰撞时:

mPhysicsWorld.setContactListener( 
    new ContactListener(){
        public void beginContact(Contact contact){
            final Fixture mB1 = contact.getFixtureA();
            final Fixture mB2 = contact.getFixtureB();

            if(mB2.getBody().getUserData() != null && mB1.getBody().getUserData() != null){
                final BodyData mBD1 = (BodyData)mB1.getBody().getUserData();
                final BodyData mBD2 = (BodyData)mB2.getBody().getUserData();
                Sprite mSprite1 = (Sprite) mBD1.mEntity;
                Sprite mSprite2 = (Sprite) mBD2.mEntity;
                // Do whatever you want to do with the sprites
            }
        }
        public void endContact(Contact contact) {   
        }
        public void preSolve(Contact contact, Manifold oldManifold) {   
        }
        public void postSolve(Contact contact,
                ContactImpulse impulse) {
        }
    }
);

答案 1 :(得分:0)

您需要注册PhysicConnector,以便将精灵连接到正文:

physicsWorld.registerPhysicsConnector(new PhysicsConnector(sprite, body, true, true));

希望它有所帮助!

答案 2 :(得分:0)

    //Body variable in above Body bodyname;
    //associate body with the sprite
    body=PhysicsFactory.createBoxBody(physics_world, sprite_name, BodyType.DynamicBody, fixturedefinition);

在最后一行中,夹具定义将根据您的选择进行定义。

答案 3 :(得分:0)

创建Body时,将UserData设置为sprite / entity,如下所示:

yourBody.setUserData(yourSprite);

在物理事件中,你可以使用:

获得精灵
public void beginContact(final Contact contact) {
    final Body bA = contact.getFixtureA().getBody();
    final Body bB = contact.getFixtureB().getBody();
    final Object oA = contact.getFixtureA().getBody().getUserData();
    final Object oB = contact.getFixtureB().getBody().getUserData();
    final Sprite spriteA = (Sprite)oA;
    final Sprite spriteB = (Sprite)oB;
}