在Unity中通常分配正确的基于Sprite的off得分

时间:2016-05-18 05:59:43

标签: c# unity3d

我有10个数字0-9的精灵。我希望得分最高为999.我不想像我刚刚开始那样强力改变精灵代码:

    if (TextHandler.score <= 9)
    {

        ones = Resources.Load<UnityEngine.Sprite>(tuples[TextHandler.score]);
    }

    if (TextHandler.score > 9)
    {
        ones = Resources.Load<UnityEngine.Sprite>(tuples[(TextHandler.score - 10)]);
        tens = Resources.Load<UnityEngine.Sprite>(tuples[(TextHandler.score - 10) + 1]);

    }
    if (TextHandler.score > 19) {
        ones = Resources.Load<UnityEngine.Sprite>(tuples[(TextHandler.score - 20)]);
        tens = Resources.Load<UnityEngine.Sprite>(tuples[(TextHandler.score - 20) + 1]);
    }
    rOnes.sprite = ones;
    rTens.sprite = tens;
    rHuns.sprite = hundreds;

我试图找到一个可能循环的公式,并将所有这些代码完成到999,而不是全部写出来。 某些背景: 1,数字和数字(未显示)都是Sprite类型。 rOnes,rTens和rHuns是Sprite渲染器。我根据得分来分配图像,该得分来自TextHandler.scoreTuples是一个String的数组。它们只是按顺序排列到纹理目录的字符串。示例:tuples[0]将返回0的纹理。

问题:是否有一种通用的方式我可以在不强制执行的情况下分配正确的Sprite。谢谢!

1 个答案:

答案 0 :(得分:1)

如果你被限制在999,我会想到一个快速解决方案:

var score = TextHandler.score; //Int32 I'm assuming
ones = Resources.Load<UnityEngine.Sprite>(tuples[score % 10]);
score /= 10;
// If the score is less than 10 this will be zero
tens = Resources.Load<UnityEngine.Sprite>(tuples[score % 10]);
score /= 10;
// If the score is less than 100 this will be zero
hundreds = Resources.Load<UnityEngine.Sprite>(tuples[score % 10]);

...这可以通过while循环自然地推广到更高的量级,因为这种模式重复了很多。将来,当你需要对整数中的每个数字做一些事情时,可以考虑使用模数函数来得到&#34;得到&#34;最右边的数字,然后按10进行整数除法,以通过左移来获得剩余的数字(如果你以这种方式划分,你将从右到左得到它们)。这可以针对任意整数执行(它甚至适用于任意大的BigIntegers)。