最大阵列范围限制

时间:2016-04-21 19:48:34

标签: c# arrays unity3d unityscript unity3d-2dtools

我正在研究2D游戏的代码,玩家有3颗心。

如果玩家与bombPrefab发生碰撞,他就会失去一颗心脏。如果玩家与heartPrefab发生碰撞,他会赢得额外的心脏。如果他连续3次与bombPrefab相撞,则游戏结束。

Hearts纹理如下。阵列0(3心)阵列1(2心)阵列2(1心脏)。

我遇到限制阵列的问题!我想知道如何获得以下响应:如果玩家有3颗心并与heartPrefab发生碰撞,只有对象被摧毁,玩家的心脏数量没有变化。

下面的代码可以带来额外的心灵。但是当我与一个heartPrefab碰撞时,我已经有3颗心(最大值),我得到了错误:index是范围数组。

我该怎么办?如果可能的话,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;

        }   
    }
}

1 个答案:

答案 0 :(得分:1)

你的if语句过于复杂(除非有其他原因)... var manyHeart和heart总是成反比关系的。只需使用:

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