Todavía soy nuevo en la programación de Java y Android y me cuesta tanto eliminar un objeto cuando ocurre una colisión. Miré alrededor de la web y encontré que nunca debería manejar la eliminación de cuerpos BOX2D durante la detección de colisiones (un oyente de contacto) y debería agregar mis objetos a una lista de arrays y establecer una variable en la sección Datos de usuario del cuerpo para eliminar o no manejar la acción de eliminación en un controlador de actualización. Así que hice esto: Primero definir dos ArrayLists uno de los rostros y otra para los cuerpos:Eliminar un objeto cuando ocurre una colisión
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Luego, cuando creo una cara y conecto esa cara a su cuerpo los agrego a sus ArrayLists como este :
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);
ahora añadir un detector de contacto y un controlador de actualización en el onloadscene así:
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) {
}
});
Mi plan es detectar whic h Dos cuerpos colisionaron en el oyente de contacto al verificar una variable de la sección de datos del usuario del cuerpo, obtener sus números en la lista de matriz y finalmente utilizar el controlador de actualización para eliminar estos cuerpos.
Las preguntas son: ¿Estoy utilizando correctamente el arraylist? y en el oyente de colisión cómo recuperar el objeto que colisionó de la lista de matriz? Cómo agregar una variable a los Datos del usuario (el código por favor). Traté de eliminar un cuerpo en este controlador de actualización, pero aún así me arroja una NullPointerException, entonces, ¿cuál es la forma correcta de agregar un controlador de actualización y dónde debo agregarlo? Cualquier otro consejo para hacer esto sería genial. Gracias de antemano.
gracias por su respuesta es muy útil – Ayham