Ich bin noch neu in der Java- und Android-Programmierung und habe so viele Probleme, ein Objekt zu entfernen, wenn eine Kollision auftritt. Ich habe mich im Internet umgesehen und festgestellt, dass ich niemals BOX2D-Körper während der Kollisionserkennung entfernen sollte (ein Kontakt-Listener) und meine Objekte zu einer Arrayliste hinzufügen und im Abschnitt Benutzerdaten des Körpers eine Variable festlegen sollte, die gelöscht oder nicht gelöscht werden soll die Entfernungsaktion in einem Update-Handler. Also habe ich Folgendes getan: Zuerst definiere ich zwei ArrayLists, eine für die Gesichter und eine für die Körper:
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Wenn ich dann ein Gesicht erstelle und dieses Gesicht mit seinem Körper verbinde, füge ich sie wie folgt zu ihren ArrayLists hinzu:
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);
Jetzt füge ich der Onloadscene einen Kontakt-Listener und einen Update-Handler hinzu:
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) {
}
});
Mein Plan ist es, zu erkennen, welche zwei Körper im Kontakt-Listener kollidierten, indem ich eine Variable aus dem Benutzerdatenbereich des Körpers überprüfe, ihre Nummern in der Array-Liste abrufe und schließlich den Körper mit dem Update-Handler entferne.
Die Fragen sind: Benutze ich die Arrayliste richtig? So fügen Sie den Benutzerdaten eine Variable hinzu (der Code bitte). Ich habe versucht, einen Body in diesem Update-Handler zu entfernen, aber es löst immer noch eine NullPointerException aus. Was ist also der richtige Weg, um einen Update-Handler hinzuzufügen, und wo soll ich ihn hinzufügen? Alle anderen Ratschläge dazu wären großartig. Danke im Voraus.