当" health< = 0&#34 ;?时如何删除实体?

时间:2015-06-08 07:40:05

标签: java

我一直在关注一个自上而下的射击游戏的在线教程,但是tut未完成(我没有看到创作者继续它),所以我想自己完成它。到目前为止,本教程帮助我给玩家健康并在其上方显示一个字符串以显示健康状况,但是当健康状况达到并低于0时没有任何反应。它只是按照我设定的增量下降。我喜欢在没有健康的情况下关闭游戏,所以我该怎样做呢?

当玩家被敌人的子弹击中时会发生这种情况:

    private void playerBulletCollision(){
    for (Bullet b:mobBullets){
            if (b.collisionBox.intersects(player.collisionBox)){
                player.health -= b.damage;
                b.isAlive = false;
                break;
            }

    }
}

当玩家子弹击中敌人时会发生这种情况

    private void mobBulletCollision(){
    for (Bullet b:bullets){
        for (Entity m: mobs){
            if (b.collisionBox.intersects(m.collisionBox)){
                m.health -= b.damage;
                b.isAlive = false;
                break;
            }
        }
    }
}

所以我怎样才能让玩家健康不复存在时游戏结束?很抱歉,如果我的解释不清楚或我显示的代码不够/不相关。告诉我并尽我所能解决它。

谢谢

编辑:我试图做到这一点,以便检查健康< = 0以及它是否真的掉了下来:

    private void playerBulletCollision(){
    for (MobBullet b:mobBullets){
            if (b.collisionBox.intersects(player.collisionBox)){
                player.health -= b.damage;
                b.isAlive = false;
                break;                  
            }
        if(player.health <=0)
            player.isAlive = false;
    }
}

它没有用。

编辑2:这是移除死敌的过程。我认为因为玩家没有这样的东西,所以player.health = false;什么也没做。

private void removeDead(){
    for (int i = 0; i <bullets.size(); i++){
        if (bullets.get(i).isAlive == false )
            bullets.remove(i);
    }

    for (int i = 0; i <mobs.size(); i++){
        if (mobs.get(i).isAlive == false )
            mobs.remove(i);
    }

    for (int i = 0; i <mobBullets.size(); i++){
        if (mobBullets.get(i).isAlive == false )
            mobBullets.remove(i);
    }


    bullets.trimToSize();
    mobs.trimToSize();
    mobBullets.trimToSize();
}

如何修改此片段以合并播放器?

1 个答案:

答案 0 :(得分:0)

你应该这样做。在碰撞时你递减health并在循环之后检查玩家health,如果这是<=0你将isAlive设置为false

private void playerBulletCollision(){
for (MobBullet b:mobBullets){
        if (b.collisionBox.intersects(player.collisionBox)){
            player.health -= b.damage;
            b.isAlive = false;
            break;                  
        }
}

if(player.health <=0){
    player.isAlive = false;
}