나는 여전히 자바와 안드로이드 프로그래밍에 익숙하지 않으며 충돌이 발생할 때 객체를 제거하는 데 많은 문제가 있습니다. 웹을 둘러보고 충돌 감지 (접촉 리스너) 중에 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) {
}
});
내 계획은 본문의 사용자 데이터 섹션에서 변수를 확인하여 컨택 리스너에서 충돌 한 두 본문을 감지하고 배열 목록에서 숫자를 얻은 다음 업데이트 핸들러를 사용하여 이러한 본문을 제거하는 것입니다.
질문은 다음과 같습니다. arraylist를 올바르게 사용하고 있습니까? 사용자 데이터에 변수를 추가하는 방법 (코드 참조) 이 업데이트 핸들러에서 본문을 제거하려고 시도했지만 여전히 NullPointerException이 발생하므로 업데이트 핸들러를 추가하는 올바른 방법은 무엇이며 어디에 추가해야합니까? 이 작업을 수행하는 다른 조언은 좋을 것입니다. 미리 감사드립니다.