Saya masih baru untuk pemrograman java dan android dan saya mengalami begitu banyak masalah Menghapus objek ketika terjadi tabrakan. Saya melihat-lihat web dan menemukan bahwa saya seharusnya tidak pernah menangani menghapus badan BOX2D selama deteksi tabrakan (pendengar kontak) dan saya harus menambahkan objek saya ke daftar array dan mengatur variabel di bagian Data Pengguna tubuh untuk dihapus atau tidak dan menangani tindakan menghapus dalam penangan pembaruan. Jadi saya melakukan ini: Pertama saya mendefinisikan dua Daftar Array untuk wajah dan satu untuk tubuh:
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Lalu ketika saya membuat wajah dan menghubungkan wajah itu ke tubuhnya, saya menambahkan mereka ke ArrayLists mereka seperti ini:
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);
sekarang saya menambahkan pendengar kontak dan pengendali pembaruan di onloadscene seperti ini:
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) {
}
});
Rencana saya adalah untuk mendeteksi dua badan yang bertabrakan di pendengar kontak dengan memeriksa variabel dari bagian data pengguna dari tubuh, mendapatkan nomor mereka dalam daftar array dan akhirnya menggunakan penangan pembaruan untuk menghapus badan-badan ini.
Pertanyaannya adalah: Apakah saya menggunakan daftar array dengan benar? Bagaimana cara menambahkan variabel ke Data Pengguna (kodenya). Saya mencoba menghapus sebuah body di handler pembaruan ini tetapi masih melempar saya NullPointerException, jadi apa cara yang tepat untuk menambahkan handler pembaruan dan di mana saya harus menambahkannya. Nasihat lain untuk melakukan ini akan bagus. Terima kasih sebelumnya.
Jika Anda ingin menambahkan
isDead
bendera ke data pengguna Anda, tambahkan saja ke apa pun yang Anda tetapkan sebagai data pengguna saat membuatBody
.Kemudian di
endContact()
bendera tubuh Anda ingin mati sebagai mati:Kemudian pastikan Anda menghapus benda mati di
update()
. Jangan lakukan ini saat PhysicsWorld memperbarui:sumber