在我的碰撞检测代码中,子弹一旦发生碰撞便被停用:

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;
}

最佳答案

可能正在运行多个线程?另外,取出子弹可能不是问题。但是那个位置和/或敌人有多发子弹?

10-07 19:25