我对Java和android编程还是很陌生,遇到碰撞时要移除对象有很多麻烦。我在网上四处张望,发现在碰撞检测(接触侦听器)期间,我绝不应该删除BOX2D主体,而应将对象添加到arraylist并在主体的“用户数据”部分中设置一个变量以删除或不删除并处理更新处理程序中的删除操作。因此,我这样做了:首先,我定义了两个ArrayList,一个用于面部,一个用于主体:
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
然后,当我创建一个面并将该面连接到其主体时,我将其添加到其ArrayList中,如下所示:
face = new AnimatedSprite(pX, pY, pWidth, pHeight, this.mBoxFaceTextureRegion);
Body BoxBody = PhysicsFactory.createBoxBody(mPhysicsWorld, face, BodyType.DynamicBody, objectFixtureDef);
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(face, BoxBody, true, true));
myFaces.add(face);
myBodies.add(BoxBody);
现在,我在onloadscene中添加了一个联系人监听器和一个更新处理程序,如下所示:
this.mPhysicsWorld.setContactListener(new ContactListener() {
private AnimatedSprite face2;
@Override
public void beginContact(final Contact pContact) {
}
@Override
public void endContact(final Contact pContact) {
}
@Override
public void preSolve(Contact contact,Manifold oldManifold) {
}
@Override
public void postSolve(Contact contact,ContactImpulse impulse) {
}
});
scene.registerUpdateHandler(new IUpdateHandler() {
@Override
public void reset() { }
@Override
public void onUpdate(final float pSecondsElapsed) {
}
});
我的计划是通过检查主体的用户数据部分中的变量来检测哪个主体在联系人侦听器中发生冲突,并在数组列表中获取它们的编号,最后使用更新处理程序删除这些主体。
问题是:我是否正确使用了arraylist?如何向用户数据中添加变量(请提供代码)。我尝试在此更新处理程序中删除主体,但仍会抛出NullPointerException异常,因此添加更新处理程序的正确方法是什么,应该在哪里添加。任何其他建议可以做到这一点。提前致谢。