我還是Java和Android編程的新手,我遇到了很多麻煩發生碰撞時移除物體。 我環顧網絡,發現我不應該在碰撞檢測期間(接觸監聽器)處理移除BOX2D物體,我應該將我的物體添加到數組列表中,並在身體的用戶數據部分設置一個變量以刪除或不刪除在更新處理程序中處理刪除操作。 所以我這樣做: 首先,我定義了兩個的ArrayList一個面孔和一個用於機構:發生碰撞時移除物體
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
然後當我創建了一個臉,那張臉連接到它的身上我將它們添加到自己的ArrayList這樣:
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);
現在我添加聯繫人監聽器,並在onloadscene這樣的更新處理程序:
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) {
}
});
我的計劃是檢測whic h通過檢查身體用戶數據部分的變量,在聯繫偵聽器中碰撞兩個物體,在數組列表中獲取它們的數字,最後使用更新處理程序刪除這些物體。
問題是: 我是否正確使用arraylist?並在碰撞監聽器中如何檢索與數組列表相沖突的對象? 如何添加一個變量到用戶數據(代碼請)。 我試圖在這個更新處理程序中刪除一個主體,但它仍然會拋出一個NullPointerException,那麼添加更新處理程序的正確方法是什麼,我應該在哪裏添加它? 任何其他建議,這樣做會很好。 在此先感謝。
非常感謝您的迴應 – Ayham