私はまだjavaとandroidプログラミングの初心者であり、衝突が発生したときにオブジェクトを削除するのに多くの問題を抱えています。私はWebを見回して、衝突検出(接触リスナー)中にBOX2Dボディの削除を処理してはならず、オブジェクトをarraylistに追加し、ボディのユーザーデータセクションで変数を設定して削除するかどうか、および処理しないようにしました更新ハンドラーの削除アクション。だから私はこれをしました:最初に私は2つのArrayListsを顔と体に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) {
}
});
私の計画は、ボディのユーザーデータセクションから変数をチェックして連絡先リスナーで衝突した2つのボディを検出し、配列リストでその数を取得し、最後に更新ハンドラーを使用してこれらのボディを削除することです。
質問は次のとおりです。私はarraylistを正しく使用していますか?変数をユーザーデータに追加する方法(コードを入力してください)。この更新ハンドラーで本体を削除しようとしましたが、それでもNullPointerExceptionがスローされるので、更新ハンドラーを追加する正しい方法は何ですか?どこに追加する必要がありますか。これを行うための他のアドバイスは素晴らしいでしょう。前もって感謝します。