Простой таймер на ActionScript 3.0

Сразу же замечу, что таймер, о котором пойдёт речь в этом уроке, будет создан с помощью класса Timer. Про этот класс и его применение я уже писал в посте «Класс Timer в ActionScript 3.0». Поэтому лишний раз повторяться не буду и сосредоточусь на сути урока.

Итак, приступим...

Сперва надо сделать пару заготовок, а именно:

- динамическое текстовое поле по имени timerTF, в котором будет выводится время;

- кнопка по имени btn, которая будет запускать/останавливать работу таймера.

После этого можно переходить к коду...

Код ActionScript 3.0:

/* импорт классов */ import flash.utils.Timer; import flash.events.TimerEvent; /* переменная, которая хранит точку отсчёта (в миллисекундах) */ var beginTime:uint; /* создаём таймер */ var timer:Timer = new Timer(100); timer.addEventListener(TimerEvent.TIMER, onTimer); /* функция, которую с заданной периодичностью вызывает ранее созданный таймер */ function onTimer(event:TimerEvent):void { timerTF.text = (new Date().getTime() - beginTime).toString(); } /* клик по кнопке btn запускает функцию onClick */ btn.addEventListener(MouseEvent.CLICK, onClick); function onClick(event:MouseEvent):void { if (timer.running) { /* если таймер запущен, то он будет остановлен */ timer.stop(); } else { /* если таймер был остановлен, то он запускается + устанавливается новая точка отсчёта */ beginTime = new Date().getTime(); timer.start(); } }

В принципе, таймер готов. Но только отсчёт времени он ведёт в миллисекундах, а это не очень удобно. Давайте отформатируем выводимое таймером время под популярный формат hh:mm:ss. Для этого добавим в наш код специальную функцию msFormat()...

Код ActionScript 3.0:

/* импорт классов */ import flash.utils.Timer; import flash.events.TimerEvent; /* переменная, которая хранит точку отсчёта (в миллисекундах) */ var beginTime:uint; /* первоначальная надпись в текстовом поле */ timerTF.text = "00:00:00"; /* создаём таймер */ var timer:Timer = new Timer(100); timer.addEventListener(TimerEvent.TIMER, onTimer); /* функция, которую с заданной периодичностью вызывает ранее созданный таймер */ function onTimer(event:TimerEvent):void { //timerTF.text = (new Date().getTime() - beginTime).toString(); timerTF.text = msFormat(new Date().getTime() - beginTime); } /* клик по кнопке btn запускает функцию onClick */ btn.addEventListener(MouseEvent.CLICK, onClick); function onClick(event:MouseEvent):void { if (timer.running) { /* если таймер запущен, то он будет остановлен */ timer.stop(); } else { /* если таймер был остановлен, то он запускается + устанавливается новая точка отсчёта */ beginTime = new Date().getTime(); timer.start(); } } /* функция, которая переводит время, выраженное в миллисекундах, в удобный для человека формат */ function msFormat(n:uint,delimiter:String=":"):String { var h:uint = Math.floor(n / 3600000) % 24; var m:uint = Math.floor(n / 60000) % 60; var s:uint = Math.floor(n / 1000) % 60; var hs:String = h.toString(); var ms:String = m.toString(); var ss:String = s.toString(); if (h < 10) { hs = "0" + hs; } if (m < 10) { ms = "0" + ms; } if (s < 10) { ss = "0" + ss; } return hs + delimiter + ms + delimiter + ss; }

Результат:

Вот и всё!

Скачать исходник к данному посту можно тута - скачать исходник (под Adobe Flash CS 5).

Автор: admin

Дата добавления: 2012-11-02

Просмотров: 6433

Рейтинг поста: +19-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-27
Тогда храните значение для каждого кадра в массиве, а когда потребуется - выводите:


var array:Array = new Array(1.1, 2.2, 3.3);

addEventListener(Event.ENTER_FRAME, onEnterFramesFunc);
function onEnterFramesFunc(event:Event):void
{
var curVar:Number = array[this.currentFrame - 1];
trace(curVar)
}
Комментатор
Комментарий добавил(а): Валера
Дата добавления: 2015-03-27
Это не то. Нужно чтобы отсчет был привязан к конкретным каждым а не шел параллельно где то там, т.е. за каждым кадром должно быть зафиксированно определенное значение. Мне на ум приходит только вручную менять, но это долго и каждый раз когда это будет нужно не поделаешь особо
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-03-27
Самый простой случай:


var myVar:Number = 10;

addEventListener(Event.ENTER_FRAME, onEnterFramesFunc);
function onEnterFramesFunc(event:Event):void
{
myVar = myVar * 0.9;
trace(myVar)
}
Комментатор
Комментарий добавил(а): Валера
Дата добавления: 2015-03-27
Всем привет. С actionscript имею дело впервые и ничего не знаю еще, но появилась необходимость сделать отсчет числа. Есть число 30.9, нужно что бы оно на протяжении 360 кадров нелинейно уменьшилось до 8.9. Например в первые 30 кадров уменьшилось до 23.17, следующие 30 кадров уменьшилось до 16.47, следующие до 14.58 и так далее. Помогите пожалуйста.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2015-01-25
Таймер обратного отсчёта:


/*
импорт классов
*/
import flash.utils.Timer;
import flash.events.TimerEvent;
/*
10800000 - это три часа в миллисекундах
*/
var endTime:uint = new Date().getTime() + 10800000;
/*
создаём таймер
*/
var timer:Timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
/*
функция, которую с заданной периодичностью вызывает ранее созданный таймер
*/
function onTimer(event:TimerEvent):void
{
timerTF.text = msFormat(endTime - new Date().getTime());
}
timerTF.text = msFormat(endTime - new Date().getTime());
/*
функция, которая переводит время, выраженное в миллисекундах, в удобный для человека формат
*/
function msFormat(n:uint,delimiter:String=":"):String
{
var h:uint = Math.floor(n / 3600000) % 24;
var m:uint = Math.floor(n / 60000) % 60;
var s:uint = Math.floor(n / 1000) % 60;
var hs:String = h.toString();
var ms:String = m.toString();
var ss:String = s.toString();
if (h < 10)
{
hs = "0" + hs;
}
if (m < 10)
{
ms = "0" + ms;
}
if (s < 10)
{
ss = "0" + ss;
}
return hs + delimiter + ms + delimiter + ss;
}
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-03-23
> Полезно очень, хотелось бы знать как использовать даные часов вне фунции

Поясните свою мысль. Пока совершенно непонятно, что вам требуется.
Комментатор
Комментарий добавил(а): Vladimir
Дата добавления: 2013-03-23
Полезно очень, хотелось бы знать как использовать даные часов вне фунции
Комментатор
Комментарий добавил(а): Дмитрий
Дата добавления: 2012-11-03
Всё, я его немного переделал, и он стал работать стабильно.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-11-02
Даже интересно стало... Покажите тот таймер, как вы его переделали.
Комментатор
Комментарий добавил(а): Дмитрий
Дата добавления: 2012-11-02
Очень полезный пост!:-)
И всё же тот таймер, который в гостевой, стал глючить меньше, но всё равно глючит:-)
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика