2015-06-08 2 views
-4

Ive следил за онлайн-учебным пособием для игры с шутер-сверху, но тут незавершенный (и я не вижу, чтобы создатель продолжал его), поэтому мне нравится делать это самостоятельно. До сих пор учебное пособие помогло мне дать игроку здоровье и строку над ним, чтобы показать, сколько здоровья, но ничего не происходит, когда здоровье доходит и опускается ниже 0. Оно просто уменьшается в инкремент, который я установил. Id, как игра, чтобы закрыть, когда нет больше здоровья, так как я буду делать это?Как удалить объект, когда «здоровье <= 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, и если он делает это despawns:

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

Каким образом эта деталь должна быть изменена для включения проигрывателя?

+2

Каждой коллизии вы должны проверить, если 'health' меньше или равно 0, то, если так что в итоге игра – Sybren

+0

Пробовала, что ничего не происходит. –

+0

, пожалуйста, покажите код того, что вы пробовали – Sybren

ответ

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

Это не сработало –

+0

Просьба пояснить, что не работала не очень конкретно – Sybren

+0

Здоровье продолжало уменьшаться, ничего не происходило, если оно не соответствовало 0. Также пуля перестала исчезать, но это связано с тем, что b.isAlive = false; линия была вывезена. –

Смежные вопросы