2014-04-25 99 views
0

我如何能得到sprite與身體在引擎gles2? 當身體碰撞時,我可以得到相關的身體,但我怎樣才能得到與這些身體相關的精靈。Box2d - AndEngine

請幫助我,我新andengine和box2d。

在此先感謝。

回答

1

當你創建一個機構認爲身體讓你設置一些額外的數據,這樣的:

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) { 
     } 
    } 
); 
0

您對註冊PhysicConnector所以你可以一個精靈連接到BOD y:

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

希望它有幫助!

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

這裏在最後一行夾具定義是根據您的選擇來定義的。

0

當您創建身體設置的UserData給你精靈這樣的/實體:

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; 
}