2016-04-21 3 views
1

Я работаю над кодом для 2D-игры, в которой игрок имеет 3 сердца.Максимальный предел диапазона массивов

Если игрок сталкивается с бомбойPrefab, он теряет 1 сердце. Если игрок сталкивается с heartPrefab, он получает дополнительное сердце. Если он сталкивается 3 раза подряд с bombPrefab, игра заканчивается.

Текстура сердец выглядит следующим образом. Массив 0 (3 сердца) массив 1 (2 сердца) массив 2 (1 сердце).

У меня проблема с ограничением массива! Я хочу знать, как получить следующий ответ: если игрок имеет 3 сердца и сталкивается с heartPrefab, уничтожается только объект, нет никакого изменения количества сердец, которые у игрока есть.

Код ниже работает, чтобы взять и дать дополнительные сердца. Но когда я сталкиваюсь с одним heartPrefab, и у меня уже есть 3 сердца (максимум), я получаю ошибку: index out out range array.

Как я могу продолжить? C# ответ, если это возможно

using UnityEngine; 
using System.Collections; 
using UnityEngine; 
using System.Collections; 

public class Heart : MonoBehaviour 
{ 


    public Texture2D[] initialHeart; 
    private int heart; 
    private int manyHeart; 

    void Start() 
    { 

     // The game start with 3 hearts at RANGE 0 
     GetComponent<GUITexture>().texture = initialHeart [0]; 
     heart = initialHeart.Length; 

    } 


    void Update() 
    { 

    } 

    public bool TakeHearts() 
    { 
     if (heart < 0) { 

      return false; 

     } 

     if (manyHeart < (heart - 1)) { 

      manyHeart += 1; 
      GetComponent<GUITexture>().texture = initialHeart [manyHeart]; 
      return true; 


     } else { 

      return false; 

     } 
    } 

    public bool AddHearts() 
    { 
     if (heart <= 2) { 

      return false; 

     } 

     if (manyHeart < (heart + 1)) { 

      manyHeart -= 1; 
      GetComponent<GUITexture>().texture = initialHeart [manyHeart]; 
      return true; 


     } else { 

      return false; 

     } 
    } 
} 
+0

Можем ли мы увидеть код, который инициализирует 'initialHeart'? – Quantic

+0

@Quantic Я создал GameObject (переименован в Hearts) внутри Unity, добавил GuiTexture и Heart Script, я могу установить массив с помощью инспектора =] –

+0

'if (manyHeart <(heart + 1))' должно быть 'if (manyHeart> 0) 'Я думаю. –

ответ

1

Вы усложнять КРП заявления (если нет другой причины для этого) ... вар manyHeart и сердце всегда обратно пропорциональны. Просто используйте:

public bool AddHearts() 
{ 
    if (manyHeart > 0) { 
     manyHeart -= 1; 
     GetComponent<GUITexture>().texture = initialHeart [manyHeart]; 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

Спасибо, много! Но теперь, как я могу уничтожить heartPrefab, если у игрока есть 3 сердца? –

+0

У вас, вероятно, есть функция 'OnColliderEnter' (или аналогичная) где-то, которая вызывает уничтожение для созданного сердца, в которое входит игрок, а также вызывает' AddHearts'. Если это так на самом деле отлично работает, так как уничтожение этого GO и добавление сердца к игроку - две отдельные задачи. Если нет, вам придется предоставить код, который фактически вызывает 'Add/TakeHearts'. –

+0

@ GunnarB.yes я есть: 'недействительными OnCollisionEnter2D (Collision2D colisor) \t { \t \t если (colisor.gameObject.tag == "Пчела") { \t \t \t Som(); \t \t \t heart = GameObject.FindGameObjectWithTag ("Сердце"). GetComponent () as Heart; \t \t \t, если (vida.AddHearts()) \t \t \t \t Destroy (GameObject); \t \t} \t \t, если (colisor.gameObject.tag == "пол") { \t \t \t уничтожить (GameObject, 1.5f); \t \t} \t} 'но, если у игрока есть 3 сердечных сердечных припадка, не разрушайте, почему ?. –

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