Nadal jestem nowy w programowaniu w Javie i Androidzie i mam tak duże problemy z usunięciem obiektu, gdy nastąpi kolizja. Rozejrzałem się po Internecie i stwierdziłem, że nigdy nie powinienem radzić sobie z usuwaniem ciał BOX2D podczas wykrywania kolizji (detektor kontaktów) i powinienem dodać moje obiekty do tablicy arraylist i ustawić zmienną w sekcji Dane użytkownika, aby usunąć lub nie i obsługiwać operacja usuwania w module obsługi aktualizacji. Zrobiłem to: Najpierw definiuję dwie ArrayLists, jedną dla twarzy i jedną dla ciał:
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Następnie, gdy tworzę twarz i łączę tę twarz z jej ciałem, dodaję je do ich ArrayLists w następujący sposób:
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);
teraz dodaję detektor kontaktów i moduł obsługi aktualizacji w scenie onloadscene w następujący sposób:
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) {
}
});
Moim planem jest wykrycie, które dwa ciała zderzyły się w detektorze kontaktów, poprzez sprawdzenie zmiennej z sekcji danych użytkownika w ciele, uzyskanie ich numerów na liście tablic i na koniec użycie programu do aktualizacji, aby usunąć te ciała.
Pytania są następujące: Czy prawidłowo korzystam z tablicy arraylist? Jak dodać zmienną do danych użytkownika (proszę o kod). Próbowałem usunąć ciało w tym module obsługi aktualizacji, ale nadal generuje mnie wyjątek NullPointerException, więc jaki jest właściwy sposób dodania modułu obsługi aktualizacji i gdzie powinienem go dodać. Wszelkie inne rady, aby to zrobić, byłyby świetne. Z góry dziękuję.