我有一个剧本,用来给人物的心形形象以“生命”。
using UnityEngine;
using UnityEngine.UI;
public class Hearts : MonoBehaviour
{
public Sprite[] initialHeart;
private int hearts;
private int currentHearts;
// Use this for initialization
//Used for chaching Image so that you won't be doing GetComponent<Image>(); each time
Image heartImage;
void Start()
{
//Cache the Image once so that you won't be doing GetComponent<Image>(); each time
heartImage = GetComponent<Image>();
heartImage.sprite = initialHeart[0];
hearts = initialHeart.Length;
}
// Update is called once per frame
void Update()
{
}
public bool TakeHeart()
{
if (hearts < 0)
{
return false;
}
if (currentHearts < (hearts - 1))
{
currentHearts += 1;
heartImage.sprite = initialHeart[currentHearts];
return true;
}
else
{
return false;
}
}
public bool AddHeart()
{
if (currentHearts > 0)
{
currentHearts -= 1;
heartImage.sprite = initialHeart[currentHearts];
return true;
}
else
{
return false;
}
}
}
我把第三颗心放在第一位,巡查员放第三码:
array 0: 3 hearts
array 1: 2 hearts
array 2: 1 heart
如果玩家与炸弹(预制片)相撞,他失去了一颗心,如果他没有一颗名为"GameOver“的心。
一切都很好。但我决定做一个测试,我正在创造一个“升级”,如果我得到一个皮肤的球员,我得到更多的'2‘心。
在检验员处放5码
array 0: 5 hearts
array 1: 4 hearts
array 2: 3 hearts
array 3: 2 hearts
array 4: 1 heart
我的问题发生在我把脚本:heartImage.sprite = initialHeart[3];
游戏开始时,只有"3“心。
当玩家与炸弹(预制板)相撞时,他获得了生命而不是失去了一条生命,但是接下来的碰撞开始正常地失去生命,直到游戏结束。
如果我从3颗心开始,并且在比赛中“抓住”了一颗额外的心不会改变,而不是3比4,我仍然保持着3颗心。
当我与第一颗炸弹(预制板)相撞,得到一颗心而不是失去后,脚本就开始正常运行。如果你和炸弹相撞,我就输了,如果被抓到,我就赢了。
我想知道为什么当我将heartImage.sprite = initialHeart[0];
(5颗心脏)改为heartImage.sprite = initialHeart[2];
(3颗心脏)时,在第一次碰撞中会出现这个bug。
编辑
我发现问题在哪里,但不知道如何解决。
我的数组将是固定的5,但有时我想启动[0]
(5心)和其他情况下启动[2]
(3心)。
在Start ()
内部,声明为heartImage.sprite = initialHeart [2];
(最初的3颗心脏)。但是,在TakeHeart方法中,有一个函数可以接受Hearts。
if (currentHearts <(hearts - 1))
{
currentHearts + = 1;
heartImage.sprite = initialHeart [currentHearts]; ;
return true;
}
原来,当我声明:heartImage.sprite = initialHeart [currentHearts];
我说的是initialHeart[1]
(4颗心),但应该是[3]
(2颗心)
可以做一些添加的事情:initialHeart [currentHearts]
+ initialHeart [2];
`?
因此,intialHeart的结果将是[3]
(2颗心脏),这是我想要的方式。
发布于 2016-05-18 17:01:00
尝试在Start方法中将currentHearts定义为2.当您将1添加到它时,它将是3,并且您将访问数组的索引3。
currentHearts = 2;
发布于 2016-05-17 17:46:35
如果您增加了数组的大小,但不要更改其他代码以合并这些问题。通过不使用固定索引,使代码大小独立,至少对于较高的范围。0
当然可以留下来,但是您的上端应该类似于initialHeart[initialHeart.Length]
。
如果要在运行时更改数组的大小,则需要将数组更改为可以像List<>
这样动态调整大小的其他容器。为此,您可以使用.Count
而不是.Length
,还可以使用.Last()
来缩短最后一个元素。
https://stackoverflow.com/questions/37282821
复制相似问题