Tôi vẫn chưa quen với lập trình java và Android và tôi gặp rất nhiều khó khăn khi xóa một đối tượng khi xảy ra va chạm. Tôi đã tìm kiếm trên web và thấy rằng tôi không bao giờ nên xử lý loại bỏ các bộ phận BOX2D trong khi phát hiện va chạm (trình nghe liên hệ) và tôi nên thêm các đối tượng của mình vào một danh sách mảng và đặt một biến trong phần Dữ liệu người dùng của cơ thể để xóa hoặc không xử lý hành động loại bỏ trong một trình xử lý cập nhật. Vì vậy, tôi đã làm điều này: Đầu tiên tôi xác định hai ArrayLists một cho các mặt và một cho các thân:
ArrayList<Sprite> myFaces = new ArrayList<Sprite>();
ArrayList<Body> myBodies = new ArrayList<Body>();
Sau đó, khi tôi tạo một khuôn mặt và kết nối khuôn mặt đó với cơ thể của nó, tôi thêm chúng vào ArrayLists của chúng như thế này:
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);
bây giờ tôi thêm một trình lắng nghe liên lạc và một trình xử lý cập nhật trong onloadscene như thế này:
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) {
}
});
Kế hoạch của tôi là phát hiện hai cơ quan nào va chạm vào bộ nghe tiếp xúc bằng cách kiểm tra một biến từ phần dữ liệu người dùng của cơ thể, lấy số của chúng trong danh sách mảng và cuối cùng sử dụng trình xử lý cập nhật để loại bỏ các bộ phận này.
Các câu hỏi là: Tôi có đang sử dụng danh sách mảng một cách chính xác không? Cách thêm một biến vào Dữ liệu người dùng (xin vui lòng mã). Tôi đã cố gắng loại bỏ phần thân trong trình xử lý cập nhật này nhưng nó vẫn ném cho tôi NullPulumException, vậy cách nào là đúng để thêm trình xử lý cập nhật và tôi nên thêm nó vào đâu. Bất kỳ lời khuyên nào khác để làm điều này sẽ là tuyệt vời. Cảm ơn trước.