Sono ancora nuovo nella programmazione Java e Android e sto avendo così tanti problemi Rimozione di un oggetto in caso di collisione. Ho guardato intorno al web e ho scoperto che non avrei mai dovuto rimuovere i corpi BOX2D durante il rilevamento delle collisioni (un ascoltatore di contatti) e dovrei aggiungere i miei oggetti a un arraylist e impostare una variabile nella sezione Dati utente del corpo da eliminare o meno gestire l'azione di rimozione in un gestore di aggiornamento. Così ho fatto questo: Per prima cosa definire due ArrayLists uno per i volti e uno per i corpi:Rimozione di un oggetto in caso di collisione
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Poi quando creo un volto e collego quel viso al suo corpo li aggiungere alla loro ArrayLists come questo :
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 ascoltatore di contatto e un gestore di aggiornamento nella onloadscene come questo:
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 è quello di rilevare whic h due corpi sono entrati in collisione nel listener dei contatti controllando una variabile dalla sezione dei dati utente del corpo, ottenendo i loro numeri nell'elenco di array e infine utilizzando il gestore di aggiornamento per rimuovere questi corpi.
Le domande sono: Sto usando l'arrayylist correttamente? e nel listener di collisioni come recuperare l'oggetto che è entrato in collisione dall'elenco di array? Come aggiungere una variabile ai Dati utente (il codice per favore). Ho provato a rimuovere un corpo in questo gestore di aggiornamento, ma mi getta ancora una NullPointerException, quindi qual è il modo giusto per aggiungere un gestore di aggiornamento e dove dovrei aggiungerlo? Qualsiasi altro consiglio per farlo sarebbe grandioso. Grazie in anticipo.
grazie per la vostra risposta è molto utile – Ayham