我试图找出如何每秒计数10次并显示它。
我有一个名为countpoints的int,它是用户以点开头的。让我们说800。
我想每秒下降10分,但显示每个点下降而不是像我下面的脚本那样每10分。
这是我到目前为止的表现:
if(miliseconds <= 0){
if(seconds <= 0){
minutes--;
seconds = 59;
}
else if(seconds >= 0){
seconds--;
countpoints = countpoints-10;
}
miliseconds = 100;
}
miliseconds -= Time.deltaTime * 100;
这在无效更新中运行,此处计数点每秒下降10。但我希望能够像秒表一样每秒钟显示数字。我怎么做?
任何帮助都表示赞赏,并提前感谢: - )
答案 0 :(得分:0)
您应该使用coroutine进行该计算,而不是使用Update()。使用协程可以很容易。你只需要启动croutine然后等待0.1秒并将对策点减少1.再次调用其中的coroutine以使其保持运行。只要你想继续调用它就可以添加条件。
private int countpoints=800;
private float t=0.1f;
private int noOfSeconds=90;
private int min;
private int sec;
private int temp=0;
void Start ()
{
StartCoroutine(StartTimer());
}
IEnumerator StartTimer ()
{
yield return new WaitForSeconds(t);
countpoints--;
temp++;
if(temp==10)
{
temp=0;
noOfSeconds--;
}
min = noOfSeconds/60;
sec = noOfSeconds%60;
if(noOfSeconds>0)
{
StartCoroutine(StartTimer());
}
}
void OnGUI ()
{
GUI.Label(new Rect(100f,100f,100f,50f),countpoints.ToString());
GUI.Label(new Rect(100f,160f,100f,50f),"Time : "+min.ToString("00")+":"+sec.ToString("00"));
}
答案 1 :(得分:0)
您可以在Update方法中执行此操作并每100分钟减少一次点数,您需要注意不要向上或向下舍入事物,因为错误是系统性的,您将得到不稳定的结果。
使用协同程序将无法正常工作,因为无法保证间隔。
private float _milliseconds = 0;
private int points = 800;
void Update()
{
_milliseconds += Time.delta * 1000;
if( _milliseconds > 100 )
{
points--;
//add updating GUI code here for points
_milliseconds -= 100;
}
}
当_milliseconds减少100时,你不会得到波动的减量,所以即使长期运行中帧的持续时间存在差异,你也会得到正确的处理。
脚本的一个问题是,如果帧占用时间超过100毫秒,但是如果花费那么长时间你可能会遇到更大的问题:D