为什么我没有得到One Bullet One Hit?

时间:2011-08-31 13:58:27

标签: android collision-detection andengine

在我的碰撞检测代码中,子弹一旦参与碰撞就会停用:

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

2 个答案:

答案 0 :(得分:2)

可能有多个线程正在运行?或者,移除子弹可能不是问题。但是那个位置有多个子弹和/或敌人?

答案 1 :(得分:0)

AndEngine;我实际上是论坛上的Mod:)

我写了一篇关于对象池的博客文章,以防你需要检查你实现自己的方式: http://c0deattack.wordpress.com/category/programming/andengine/

我想知道你是否正确地回收了子弹?