我有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.score
。 Tuples
是一个String
的数组。它们只是按顺序排列到纹理目录的字符串。示例:tuples[0]
将返回0的纹理。
问题:是否有一种通用的方式我可以在不强制执行的情况下分配正确的Sprite
。谢谢!
答案 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)。