私はまだJavaとAndroidのプログラミングには新しく、衝突が発生したときにオブジェクトを削除するのは非常に困難です。 私はウェブを見渡し、衝突検知(連絡先リスナー)中にBOX2Dボディを削除することは決してないはずです。私は自分のオブジェクトをarraylistに追加し、ボディのUser Dataセクションに変数を設定して削除する必要があります。更新ハンドラで削除アクションを処理します。私は2つのArrayListの顔用と体のための1つを定義する まず:私は顔を作成し、その身体にその顔を接続したときに衝突が発生したときにオブジェクトを削除する
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身体のユーザーデータセクションから変数をチェックし、配列リストでその番号を取得し、最後に更新ハンドラを使用してこれらのボディを削除することによって、コンタクトリスナ内で2つのボディが衝突しました。
質問は: 私は正しくarraylistを使用していますか?衝突リスナーでは、配列リストから衝突したオブジェクトをどのように取得するのですか? ユーザーデータに変数を追加する方法(コードを参考にしてください)。 このアップデートハンドラでボディを削除しようとしましたが、それでもNullPointerExceptionがスローされるので、アップデートハンドラを追加する正しい方法は何ですか?どこに追加する必要がありますか? これを行うための他のアドバイスは素晴らしいでしょう。 ありがとうございます。
ご回答いただきありがとうございます。 – Ayham