2014-02-13 2 views
1

Я пытаюсь выяснить, как считать 10 раз в секунду и отобразить его.Chow to count 1/10 of second

У меня есть int count countpoints, с которого начинается пользователь с точками. Допустим, 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; 

Это работает в недействительном обновление и здесь countpoints падает на 10 каждую секунду. но я хотел бы показать, что цифры выпадают, как секундомер каждую секунду. Как мне это сделать?

любая помощь и заранее спасибо :-)

+0

было бы больше помочь, если и может просто показать обновление с параметрами, есть какой-то объект таймера из единства? –

ответ

0

Вы должны использовать сопрограмму для этого расчета, а не в Update(). С сопрограммой это может быть очень легко. Вам просто нужно запустить croutine, а затем ждать 0,1 секунды и уменьшать контрапункты на 1. Снова позвоните в сопрограмму внутри этого, чтобы она работала. Просто добавьте условие, когда вы хотите продолжать его называть.

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")); 
} 
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мс consistenly, но если он принимает, что долго вы, вероятно, имеют большие проблемы: D