首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组集初值问题

数组集初值问题
EN

Stack Overflow用户
提问于 2016-05-17 17:30:36
回答 2查看 82关注 0票数 0

我有一个剧本,用来给人物的心形形象以“生命”。

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
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颗心脏),这是我想要的方式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-18 17:01:00

尝试在Start方法中将currentHearts定义为2.当您将1添加到它时,它将是3,并且您将访问数组的索引3。

代码语言:javascript
运行
复制
currentHearts = 2;
票数 1
EN

Stack Overflow用户

发布于 2016-05-17 17:46:35

如果您增加了数组的大小,但不要更改其他代码以合并这些问题。通过不使用固定索引,使代码大小独立,至少对于较高的范围。0当然可以留下来,但是您的上端应该类似于initialHeart[initialHeart.Length]

如果要在运行时更改数组的大小,则需要将数组更改为可以像List<>这样动态调整大小的其他容器。为此,您可以使用.Count而不是.Length,还可以使用.Last()来缩短最后一个元素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37282821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档