我正在研究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;
}
}
}
答案 0 :(得分:1)
你的if语句过于复杂(除非有其他原因)... var manyHeart和heart总是成反比关系的。只需使用:
public bool AddHearts ()
{
if (manyHeart > 0) {
manyHeart -= 1;
GetComponent<GUITexture> ().texture = initialHeart [manyHeart];
return true;
} else {
return false;
}
}