碰撞检测后,我可以得到碰撞的物体,但是如何将精灵附加到这些物体上,这样我才能将它们从场景中移除?
例如,如果我有一个身体(玩家)这个身体与另一个身体(敌人)相撞,我可以从这样的接触听众那里碰到哪些身体:
pContact.getFixtureA().getBody()
pContact.getFixtureB().getBody()
因此,如果我们假设我们有很多敌人,我怎样才能将精确的精灵附加到每个身体上,以便我可以删除它们?
答案 0 :(得分:4)
通常,在使用Box2D实体和精灵时,可以使用精灵设置Body Definition的UserData属性。例如:
设置userData:
bodyDef.UserData = sprite;
联系后检索精灵:
enemySprite = pContact.getFixtureA().getBody().GetUserData()
答案 1 :(得分:2)
您应该拥有一个Enemy
类,其中包含Body
和Sprite
。如果你有一个与另一个身体有联系的身体,你可以遍历你的Enemy
个对象的列表,通过简单地比较它们来找到那个身体。然后,您可以轻松获取此Enemy
对象的精灵。希望我已经清楚地解释了我的想法。
答案 2 :(得分:0)
在AndEngine论坛上阅读this帖子后,这是我的解决方案:
创建一个新的“UserData”类:
public class UserData implements Serializable {
private static final long serialVersionUID = 1L;
String mString;
Object mObject;
public UserData(){}
public UserData(String string, Object object) {
this.mString = string;
this.mObject = object;
}
public String getString() {
return mString;
}
public Object getObject() {
return mObject;
}
}
使用UserData类设置所有的用户数据{/ 1}}:
body
然后你可以检测到碰撞并得到你的CustomSprite:
body.setUserData(new UserData("enemy", CustomSprite));
答案 3 :(得分:0)
enemy.setUserData(new Object[]{"enemy",enemySprite/*,... And other objects as user data if you wish */})
在检查时:
final Object[] x1 = (Object[]) contact.getFixtureA().getBody().getUserData();
final Object[] x2 = (Object[]) contact.getFixtureB().getBody().getUserData();
做点什么:
if(x1[0].equals("This is the tag for the enemy"))
x2[1].playerhascollidedwithyouandyouhavetodosomething();