2

私の衝突検出コードでは、弾丸が衝突に関与すると非アクティブ化されます。

for(int j = 0; j < enemies.size(); j++){
    //check for collision
    if(bullets[i].isActive() && bullets[i].getSprite().collidesWith(enemies.get(j).getSprite())){
    
        //remove bullet  
        removeBullet(i); //bullet is deactivated here, .isActive() will return false
        
        if(enemies.get(j).damage(1)){
            // --snip--
        }
        break;
    }
}

箇条書きが非アクティブ化される唯一の場所は、コードのこのセクションです。それらがアクティブ化される唯一の場所は、それらが作成されたときです。

それにもかかわらず、弾丸は複数回ダメージを与えます。removeBullet()爆発アニメーションがトリガーされ、これが複数回再生されます。何がうまくいかないのですか?

アップデート

こちらですremoveBullet()

private void removeBullet(int i){
    if(bullets[i] == null) return;
    bullets[i].deactivate();
    makeSmallExplosion(bullets[i].getSprite().getX(),bullets[i].getSprite().getY());
    bulletPool.recyclePoolItem(bullets[i]);
    bullets[i] = null;
}
4

2 に答える 2

2

複数のスレッドが実行されている可能性がありますか? または、弾丸を削除しても問題ない場合があります。しかし、その位置および/または敵に複数の弾丸がありますか?

于 2011-08-31T14:25:30.553 に答える
0

ああAndEngine; 私は実際にはフォーラムのModです:)

実装方法を確認する必要がある場合に備えて、オブジェクトプールに関するこのブログ投稿を作成しました:http: //c0deattack.wordpress.com/category/programming/andengine/

弾丸をきちんとリサイクルしているのかな?

于 2011-08-31T15:03:47.517 に答える