我还是Java和Android编程的新手,我遇到了很多麻烦发生碰撞时移除物体。 我环顾网络,发现我不应该在碰撞检测期间(接触监听器)处理移除BOX2D物体,我应该将我的物体添加到数组列表中,并在身体的用户数据部分设置一个变量以删除或不删除在更新处理程序中处理删除操作。 所以我这样做: 首先,我定义了两个的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) {
}
});
我的计划是检测whic h通过检查身体用户数据部分的变量,在联系侦听器中碰撞两个物体,在数组列表中获取它们的数字,最后使用更新处理程序删除这些物体。
问题是: 我是否正确使用arraylist?并在碰撞监听器中如何检索与数组列表相冲突的对象? 如何添加一个变量到用户数据(代码请)。 我试图在这个更新处理程序中删除一个主体,但它仍然会抛出一个NullPointerException,那么添加更新处理程序的正确方法是什么,我应该在哪里添加它? 任何其他建议,这样做会很好。 在此先感谢。
非常感谢您的回应 – Ayham