Как обнулить таймер ?
AIDEN Дата: Вт, 29 Июл 2014, 19:19 | Сообщение # 1
Сообщений: 59
Награды:
0
Репутация:
56
Статус: Offline
У меня есть скрипт таймера обратного отсчёта : Код
var style : GUIStyle; private var startTime : float; private var restSeconds : float; private var roundedRestSeconds : int; private var displaySeconds : float; private var displayMinutes : float; var CountDownSeconds : int=120; private var Timeleft : float; var timetext : String; function Start () { startTime=Time.deltaTime; } function OnGUI () { GUI.skin.label = style; Timeleft= Time.time-startTime; restSeconds = CountDownSeconds-(Timeleft); roundedRestSeconds=Mathf.CeilToInt(restSeconds); displaySeconds = roundedRestSeconds % 60; displayMinutes = (roundedRestSeconds / 60)%60; timetext = (displayMinutes.ToString()+":"); if (displaySeconds > 9) { timetext = timetext + displaySeconds.ToString(); } else { timetext = timetext + "0" + displaySeconds.ToString(); } GUI.Label(new Rect(Screen.width/2, 0.0f, 100.0f, 75.0f), timetext); }
Проблема в том что я не могу сбросить таймер. Я в принципе уже всё пробовал, перезагружал сцену, удалял и снова добавлял скрипт к объекту, делал что-бы при нажатии на кнопку время возвращалось в начальное значение, но так нечего и не вышло. Хотел спросить у вас как это решить, может быть вы тоже сталкивались с таким ?
Моя игра - Collect Fruit
Сообщение У меня есть скрипт таймера обратного отсчёта : Код
var style : GUIStyle; private var startTime : float; private var restSeconds : float; private var roundedRestSeconds : int; private var displaySeconds : float; private var displayMinutes : float; var CountDownSeconds : int=120; private var Timeleft : float; var timetext : String; function Start () { startTime=Time.deltaTime; } function OnGUI () { GUI.skin.label = style; Timeleft= Time.time-startTime; restSeconds = CountDownSeconds-(Timeleft); roundedRestSeconds=Mathf.CeilToInt(restSeconds); displaySeconds = roundedRestSeconds % 60; displayMinutes = (roundedRestSeconds / 60)%60; timetext = (displayMinutes.ToString()+":"); if (displaySeconds > 9) { timetext = timetext + displaySeconds.ToString(); } else { timetext = timetext + "0" + displaySeconds.ToString(); } GUI.Label(new Rect(Screen.width/2, 0.0f, 100.0f, 75.0f), timetext); }
Проблема в том что я не могу сбросить таймер. Я в принципе уже всё пробовал, перезагружал сцену, удалял и снова добавлял скрипт к объекту, делал что-бы при нажатии на кнопку время возвращалось в начальное значение, но так нечего и не вышло. Хотел спросить у вас как это решить, может быть вы тоже сталкивались с таким ? Автор - AIDEN Дата добавления - 29 Июл 2014 в 19:19
commandoby Дата: Вт, 29 Июл 2014, 20:21 | Сообщение # 2
Unity 3D Free
Сообщений: 836
Награды:
3
Репутация:
211
Статус: Offline
Я не разобрался как работает твой таймер (недостаточно знаний), но не лучше ли просто от переменной отнимать 1 в секунду? Код
roundedRestSeconds -= Time.deltaTime; displaySeconds = roundedRestSeconds%60; displayMinutes = roundedRestSeconds/60%60;
А уже такую переменную обнуляй, изменяй, ускоряй, замедляй, что ещё в голову прийдёт.Добавлено (29 Июл 2014, 20:21) ---------------------------------------------
Цитата
function Start () { startTime=Time.deltaTime; }
А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.
Блог.
Сообщение отредактировал commandoby - Вт, 29 Июл 2014, 20:17
Сообщение Я не разобрался как работает твой таймер (недостаточно знаний), но не лучше ли просто от переменной отнимать 1 в секунду? Код
roundedRestSeconds -= Time.deltaTime; displaySeconds = roundedRestSeconds%60; displayMinutes = roundedRestSeconds/60%60;
А уже такую переменную обнуляй, изменяй, ускоряй, замедляй, что ещё в голову прийдёт.Добавлено (29 Июл 2014, 20:21) ---------------------------------------------
Цитата
function Start () { startTime=Time.deltaTime; }
А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать. Автор - commandoby Дата добавления - 29 Июл 2014 в 20:21
AIDEN Дата: Вт, 29 Июл 2014, 22:18 | Сообщение # 3
Сообщений: 59
Награды:
0
Репутация:
56
Статус: Offline
Я сам не могу полностью понять скрипт (( Я его нашёл на официальном форуме. Надо попробовать самому написать, может что-то получится ))
Моя игра - Collect Fruit
Сообщение Я сам не могу полностью понять скрипт (( Я его нашёл на официальном форуме. Надо попробовать самому написать, может что-то получится )) Автор - AIDEN Дата добавления - 29 Июл 2014 в 22:18
commandoby Дата: Вт, 29 Июл 2014, 22:59 | Сообщение # 4
Unity 3D Free
Сообщений: 836
Награды:
3
Репутация:
211
Статус: Offline
Вот мой пример таймера. Обнуляй как хочешь. Код
function Start () { roundedRestSeconds = 300; } function OnGUI () { roundedRestSeconds -= Time.deltaTime; displaySeconds = roundedRestSeconds%60; displayMinutes = roundedRestSeconds/60%60; if (displaySeconds > 9) { GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : "+displaySeconds); } else { GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : 0"+displaySeconds); } }
Блог.
Сообщение Вот мой пример таймера. Обнуляй как хочешь. Код
function Start () { roundedRestSeconds = 300; } function OnGUI () { roundedRestSeconds -= Time.deltaTime; displaySeconds = roundedRestSeconds%60; displayMinutes = roundedRestSeconds/60%60; if (displaySeconds > 9) { GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : "+displaySeconds); } else { GUI.Label(Rect(Screen.width/2-50, 5, 100, 20), ""+displayMinutes+" : 0"+displaySeconds); } }
Автор - commandoby Дата добавления - 29 Июл 2014 в 22:59
AIDEN Дата: Вт, 29 Июл 2014, 23:59 | Сообщение # 5
Сообщений: 59
Награды:
0
Репутация:
56
Статус: Offline
Я тоже накатал такой код : Код
static var second : int; static var minut : int; function Start () { InvokeRepeating ("Countdown", 1.0, 1.0); second = 13; minut = 0; } function OnGUI(){ if(second >= 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + second); } if(second < 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second); } } function Countdown () { second -= 1; if (second < 0){ minut-=1; second = 59; } }
Только не могу понять как по окончанию времени например загрузить уровень. Пробовал проверять : Код
if(minut = 0){ if(second < 0){ Application.LoadLevel(0) } }
Только видно как одна минута в минус уходит (((
Моя игра - Collect Fruit
Сообщение Я тоже накатал такой код : Код
static var second : int; static var minut : int; function Start () { InvokeRepeating ("Countdown", 1.0, 1.0); second = 13; minut = 0; } function OnGUI(){ if(second >= 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + second); } if(second < 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second); } } function Countdown () { second -= 1; if (second < 0){ minut-=1; second = 59; } }
Только не могу понять как по окончанию времени например загрузить уровень. Пробовал проверять : Код
if(minut = 0){ if(second < 0){ Application.LoadLevel(0) } }
Только видно как одна минута в минус уходит ((( Автор - AIDEN Дата добавления - 29 Июл 2014 в 23:59
commandoby Дата: Ср, 30 Июл 2014, 00:04 | Сообщение # 6
Unity 3D Free
Сообщений: 836
Награды:
3
Репутация:
211
Статус: Offline
Цитата AIDEN (
)
как по окончанию времени например загрузить уровень
Код
if(minut == 0 && second == 0){ Application.LoadLevel(0); }
Блог.
Сообщение Цитата AIDEN (
)
как по окончанию времени например загрузить уровень
Код
if(minut == 0 && second == 0){ Application.LoadLevel(0); }
Автор - commandoby Дата добавления - 30 Июл 2014 в 00:04
AIDEN Дата: Ср, 30 Июл 2014, 00:46 | Сообщение # 7
Сообщений: 59
Награды:
0
Репутация:
56
Статус: Offline
Ой, затупил ))) Вот что вышло : Код
static var second : int; static var minut : int; function Start () { InvokeRepeating ("Countdown", 1.0, 1.0); second = 13; minut = 0; } function OnGUI(){ if(second >= 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + second); } if(second < 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second); } } function Countdown () { if(minut == 0 && second == 0){ Application.LoadLevel(0); }else{ second -= 1; if (second < 0){ minut-=1; second = 59; } } }
Спасибо большое за помощь !
Моя игра - Collect Fruit
Сообщение Ой, затупил ))) Вот что вышло : Код
static var second : int; static var minut : int; function Start () { InvokeRepeating ("Countdown", 1.0, 1.0); second = 13; minut = 0; } function OnGUI(){ if(second >= 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + second); } if(second < 10){ GUI.Label(Rect(125,75, 60, 20), minut + " : " + "0"+second); } } function Countdown () { if(minut == 0 && second == 0){ Application.LoadLevel(0); }else{ second -= 1; if (second < 0){ minut-=1; second = 59; } } }
Спасибо большое за помощь ! Автор - AIDEN Дата добавления - 30 Июл 2014 в 00:46
Hunjeth Дата: Ср, 30 Июл 2014, 03:22 | Сообщение # 8
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Твой таймер это текущее время игры в минусах, чтобы его сбросить, надо отнять от ткущего времени, время начала игры. Код
private var gameStartTime : float; function Reset() { gameStartTime = Time.time; } //Timeleft= Time.time-startTime; //замени на Timeleft = (Time.time - gameStartTime) - startTime;
Что тебе еще не понятно?? Mathf.CeilToInt = Округлить число до 1 (0.1 = 1, 2.6 = 3, 1.9 = 2). GUI.Label = Вывод текста на экран. commandoby , Цитата
А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.
Потому что лаг компютера не должен влиять на время игры. Допустим начился раунд, и у тебя лагает страшно компютер а время будет зависить от лага. Таким образом ты будешь играть раунд 10 мин а на часах пройдет 20.
Сообщение отредактировал Hunjeth - Ср, 30 Июл 2014, 12:37
Сообщение Твой таймер это текущее время игры в минусах, чтобы его сбросить, надо отнять от ткущего времени, время начала игры. Код
private var gameStartTime : float; function Reset() { gameStartTime = Time.time; } //Timeleft= Time.time-startTime; //замени на Timeleft = (Time.time - gameStartTime) - startTime;
Что тебе еще не понятно?? Mathf.CeilToInt = Округлить число до 1 (0.1 = 1, 2.6 = 3, 1.9 = 2). GUI.Label = Вывод текста на экран. commandoby , Цитата
А почему именно в стартовой функции, ведь "Time.deltaTime" - не постоянная переменная, а значит таймер будет не верно работать.
Потому что лаг компютера не должен влиять на время игры. Допустим начился раунд, и у тебя лагает страшно компютер а время будет зависить от лага. Таким образом ты будешь играть раунд 10 мин а на часах пройдет 20. Автор - Hunjeth Дата добавления - 30 Июл 2014 в 03:22
AIDEN Дата: Ср, 30 Июл 2014, 12:23 | Сообщение # 9
Сообщений: 59
Награды:
0
Репутация:
56
Статус: Offline
Hunjeth, спасибо за помощь. Я уже написал свой скрипт
Моя игра - Collect Fruit
Сообщение Hunjeth, спасибо за помощь. Я уже написал свой скрипт Автор - AIDEN Дата добавления - 30 Июл 2014 в 12:23