android - 为什么我没有得到一发子弹一击?

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

最佳答案

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

关于android - 为什么我没有得到一发子弹一击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7258023/

相关文章:

java - if 语句满足后执行 else 语句

android - 在 Android 应用程序之间传递 bool 数据

android - 通过 intent extras 发送大数据时出现 TransactionTooLargeException

android - OpenGL ES 纹理映射

swift - EXC_BREAKPOINT -- 由使用 swift spritekit 的碰撞检测引起

java - AndEngine GLES2-AnchorCenter API 21 上的自定义字体不起作用

java - AndEngine如何让 Sprite 在调用jump方法时不跳转

java - 将 boolean 数组作为字段添加到 Firestore 文档

Java Circle to Circle 碰撞检测

javascript - Three.js - 用于碰撞检测的精确光线转换