Sono ancora nuovo nella programmazione Java e Android e ho così tanti problemi a rimuovere un oggetto quando si verifica una collisione. Ho guardato in giro per il web e ho scoperto che non avrei mai dovuto gestire la rimozione dei corpi BOX2D durante il rilevamento delle collisioni (un listener di contatti) e avrei dovuto aggiungere i miei oggetti a un arraylist e impostare una variabile nella sezione Dati utente del corpo per eliminare o meno e gestire l'azione di rimozione in un gestore aggiornamenti. Così ho fatto questo: per prima cosa ho definito due ArrayList uno per i volti e uno per i corpi:
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Quindi quando creo una faccia e connetto quella faccia al suo corpo, li aggiungo alle loro liste di array in questo modo:
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);
ora aggiungo un listener di contatti e un gestore aggiornamenti in onloadscene in questo modo:
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) {
}
});
Il mio piano è di rilevare quali due corpi si sono scontrati nel listener di contatti controllando una variabile dalla sezione dei dati utente del corpo, ottenere i loro numeri nell'elenco di array e infine utilizzare il gestore di aggiornamento per rimuovere questi corpi.
Le domande sono: sto usando l'arraylist correttamente? Come aggiungere una variabile ai Dati utente (il codice per favore). Ho provato a rimuovere un corpo in questo gestore aggiornamenti ma mi lancia ancora NullPointerException, quindi qual è il modo giusto per aggiungere un gestore aggiornamenti e dove dovrei aggiungerlo. Qualsiasi altro consiglio per farlo sarebbe fantastico. Grazie in anticipo.