我如何能得到sprite與身體在引擎gles2? 當身體碰撞時,我可以得到相關的身體,但我怎樣才能得到與這些身體相關的精靈。Box2d - AndEngine
請幫助我,我新andengine和box2d。
在此先感謝。
我如何能得到sprite與身體在引擎gles2? 當身體碰撞時,我可以得到相關的身體,但我怎樣才能得到與這些身體相關的精靈。Box2d - AndEngine
請幫助我,我新andengine和box2d。
在此先感謝。
當你創建一個機構認爲身體讓你設置一些額外的數據,這樣的:
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) {
}
}
);
您對註冊PhysicConnector
所以你可以一個精靈連接到BOD y:
physicsWorld.registerPhysicsConnector(new PhysicsConnector(sprite, body, true, true));
希望它有幫助!
//Body variable in above Body bodyname;
//associate body with the sprite
body=PhysicsFactory.createBoxBody(physics_world, sprite_name, BodyType.DynamicBody, fixturedefinition);
這裏在最後一行夾具定義是根據您的選擇來定義的。
當您創建身體設置的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;
}