我正在使用 andangine 以及 tmx 和 body2d 扩展开发游戏。我在创建地图时创建对象(精灵),例如硬币的特定位置。我使用contactlistener来检查玩家是否与硬币碰撞。
我怎样才能删除这个精灵?我怎样才能最好地组织我的精灵?谢谢 =)
我假设你创建一个PhysicsConnector
连接你的精灵和身体。创建这些物理连接器的列表,当您决定应该移除一个主体(及其精灵)时,请执行以下操作:
Body bodyToRemove = //Get it from your contact listener
for(PhysicsConnector connector : mPhysicsConnectors) //mPhysicsConnectors is the list of your coins physics connectors.
if(connector.getBody() == bodyToRemove)
removeSpriteAndBody(connector); //This method should also delete the physics connector itself from the connectors list.
关于精灵组织:硬币是可重复使用的精灵,你不应该每次都重新创建它们。您可以使用对象池,这里有一个关于这个主题的问题。
我建议你设置一个身体的用户数据。在您的碰撞处理程序中,您将能够使用它。小例子:
body.setUserData(...);
..
public void postSolve(Contact contact, ContactImpulse impulse) {
... bodyAType = (...) bodyA.getUserData();
... bodyBType = (...) bodyB.getUserData();
if (bodyAType != null && bodyBType != null) {
if (bodyAType.getUserData.equals(...)) {
//.......do what you need
}
}
}