Просмотр полной версии : Таймер обратного отсчёта
alexrunaway
15.01.2014, 00:08
Помогите люди знающие. Нужен таймер обратного отсчёта начиная с 30 минут (30:00), который отсчитывает время - отдельно минуты и секунды. По окончанию таймера т.е. 00:00 - переход на следующий кадр.
var t:Timer = new Timer(180000);
t.addEventListener(TimerEvent.TIMER, f)
function f(e:TimerEvent)
{//deal with
}
А вообще по хорошему прочитай про таймер в справке, там все написано. Можно и Date заюзать. вариантов уйма
alexrunaway
15.01.2014, 10:24
А что значит //deal with? Вместо него нужно gotoAndStop на второй кадр прописать?
alexrunaway
15.01.2014, 10:26
можете помочь с примером Date. там что-то типа такого надо использовать:
minutes.digit.text = minutesLeft;
seconds.digit.text = secondsLeft;
Просто нужно разделение на минуты и секунды
например - так
var repeat:uint = 1800;
var t:Timer = new Timer(1000, repeat);
var min:uint = 30;
var sec:uint;
t.addEventListener(TimerEvent.TIMER, f)
t.start();
function f(e:TimerEvent) {
minutes.digit.text = String(uint(repeat / 60));
seconds.digit.text = String(repeat%60);
trace(uint(repeat / 60),repeat%60 );
repeat--;
}
Zebestov
15.01.2014, 11:43
Даже название темы 1-в-1 (http://www.flasher.ru/forum/showpost.php?p=1072304&postcount=4).
alexrunaway
15.01.2014, 16:22
Простите за наглость,а кто может кинуть уже готовый файл с таймером? Я просто создаю текстовое поле динамическое пишу код на кадр и ничего не происходит
Да любой может за 500 рублей, чего уж там.
alexrunaway
15.01.2014, 16:30
да там делов на 20 рублей
Akopalipsis
15.01.2014, 16:33
да там делов на 20 рублей
Вы уже второй день делаете, это означает, что Ваше время 48 часов стоит 20рублей?
Я просто создаю текстовое поле динамическое пишу код на кадр и ничего не происходит
Есть проблема, она не имеет решения, есть задача - она всегда имеет решение, чтобы решить проблему, нужно разбить ее на задачи.
По теме, для начала просто создайте текстовое поле, и напишите в нем хоть что нибудь, а то вы пытаетесь запустить сразу все.
я бы делал так.
1. создал текстовое поле, написал в нем текст.
2. создал таймер , запустил его , чтобы таймер посчитал до скольки-то и написал, "я досчитал".
3. Сделал, из числа 1800, допустим, строку из минут и секунд.
4. сделал чтобы эта строка записалась в текстовое поле.
5. Запустил таймер, при каждом тике таймера, из его значения генерировал строку минут и секунд, и записывал ее в текстовое поле.
6. радуемся ^^
alexrunaway
15.01.2014, 17:14
var repeat:uint = 20;
var t:Timer = new Timer(1000, repeat);
var min:uint = 30;
var sec:uint;
t.addEventListener(TimerEvent.TIMER, f)
t.start();
function f(e:TimerEvent) {
minutes.text = String(uint(repeat / 60));
seconds.text = String(repeat%60);
trace(uint(repeat / 60),repeat%60 );
repeat--
if(uint(repeat / 60)==0 && (repeat%60)==0){gotoAndStop(2)};
}
таймер застывает на 0:1 хотя должен переходить на второй кадр
у таймер есть еще событие, когда он закончит считать, тоесть когда он отсчитает 20 раз по 1000мс
var repeat:uint = 20;
var t:Timer = new Timer(1000, repeat);
var min:uint = 30;
var sec:uint;
t.addEventListener(TimerEvent.TIMER, f)
t.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
t.start();
function f(e:TimerEvent) {
minutes.text = String(uint(repeat / 60));
seconds.text = String(repeat%60);
trace(uint(repeat / 60),repeat%60 );
repeat--;
}
function onTimerComplete(e:TimerEvent) {
gotoAndStop(2);
}
alexrunaway
15.01.2014, 19:16
Прикладываю исходник в CS4: rghost . ru/51674219
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at timer_fla::MainTimeline/f()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
MikroAcse
15.01.2014, 19:37
В чем сложность загрузить исходник сюда, на форум?
вот полный код, только удалите свои текстовые поля
import flash.text.TextField;
stop();
trace("11");
var minutes:TextField = new TextField()
minutes.x = 100;
minutes.y = 100;
addChild(minutes);
var seconds:TextField = new TextField()
seconds.x = 210;
seconds.y = 100;
addChild(seconds);
var repeat:uint = 1800;
var t:Timer = new Timer(1000, repeat);
t.addEventListener(TimerEvent.TIMER, onTimer);
t.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
t.start();
function onTimer(e:TimerEvent) {
minutes.text = String(uint(repeat / 60));
seconds.text = String(repeat%60);
repeat--;
}
function onTimerComplete(e:TimerEvent) {
removeChild(minutes);
removeChild(seconds);
}
MikroAcse
15.01.2014, 20:36
Вот таймер в данном случае плохая практика.
Тут точность нужна. Всё-таки 30 минут.
Лучше записать getTimer() в начале программы и потом с ним сверяться.
А легче всего будет делать это с Date().
alexrunaway
15.01.2014, 22:36
Isfet спасибо огромное, а как мне теперь сделать чтобы было не 0:30 а 00:30? формат задать
Добавлено через 1 час 17 минут
MikroAcse можете набросать вариант с Date?))
Isfet спасибо огромное, а как мне теперь сделать чтобы было не 0:30 а 00:30? формат задать
в 7 посте вам дали ссылку, как сделать такой формат, возмите оттуда
вот так будет больше точность,
import flash.text.TextField;
import flash.utils.Timer;
import flash.utils.getTimer;
stop();
var minutes:TextField = new TextField()
minutes.x = 100;
minutes.y = 100;
addChild(minutes);
var seconds:TextField = new TextField()
seconds.x = 210;
seconds.y = 100;
addChild(seconds);
var firstTime:int = getTimer();
addEventListener(Event.ENTER_FRAME, onEnterFrame);
var currentTimeSec:uint;
function onEnterFrame(e:Event) {
currentTimeSec = 1800 - (getTimer() - firstTime) * 0.001;
minutes.text = String(uint(currentTimeSec / 60));
seconds.text = String(currentTimeSec % 60);
if (currentTimeSec == 0) {
onTimerComplete();
}
}
function onTimerComplete() {
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
removeChild(minutes);
removeChild(seconds);
}
P.S.: с Date - как-то коряво получается
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.