如果我知道身体,如何将精灵附加到box2d身体?

时间:2011-09-08 14:23:53

标签: android box2d andengine

碰撞检测后,我可以得到碰撞的物体,但是如何将精灵附加到这些物体上,这样我才能将它们从场景中移除?

例如,如果我有一个身体(玩家)这个身体与另一个身体(敌人)相撞,我可以从这样的接触听众那里碰到哪些身体:

pContact.getFixtureA().getBody()
pContact.getFixtureB().getBody()

因此,如果我们假设我们有很多敌人,我怎样才能将精确的精灵附加到每个身体上,以便我可以删除它们?

4 个答案:

答案 0 :(得分:4)

免责声明:我的经验是在iOS中使用Cocos2d / Box2D,但在Android中应该类似。

通常,在使用Box2D实体和精灵时,可以使用精灵设置Body Definition的UserData属性。例如:

设置userData:

bodyDef.UserData = sprite;

联系后检索精灵:

enemySprite = pContact.getFixtureA().getBody().GetUserData()

答案 1 :(得分:2)

您应该拥有一个Enemy类,其中包含BodySprite。如果你有一个与另一个身体有联系的身体,你可以遍历你的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();