Класс Timer в ActionScript 3.0

Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

Описание: 

Из этого урока вы узнаете, как пользоваться классом Timer, с помощью которого можно запускать части кода в определенный момент времени.

Приступим:

1. Создайте новый документ *.fla с размерами 640 на 480.

2. Создайте на рабочей области новое текстовое динамическое поле и в свойствах пропишите ему Instance Name "myText", задайте размеры 140 на 37, размер шрифта 28 и сглаживание "Anti-alias for readability".

3. Теперь заэмбедьте (добавьте) в текстовое поле числовые символы. Это нужно для того, чтобы при дальнейшей анимации текста всё было ровно и гладко.

4. Теперь конвертируйте это текстовое поле в MovieClip. Задайте имя "myMC", задайте точку регистрации в центре, прилинкуйте этот мувиклип к классу myMC. Теперь с рабочей области этот мувиклип можно удалить, он останется у нас в библиотеке.

Теперь напишем код:
1. Создайте новый слой по имени "actions" в TimeLine и напишите в первом кадре следующий код:

//Это импорт твина для анимации текста.
import fl.transitions.Tween;
import fl.transitions.easing.Regular;
//Это начальное время отсчета.
var n:uint = 0;
//Создаем экземпляр нашего мувиклипа, который будет анимироваться.
var tBig:myMC = new myMC();
//Помещаем его в центр.
tBig.y = 240;
tBig.x = 320;
//Отключаем реакцию текстового поля на мышь.
tBig.myText.mouseEnabled = false;
//Добавляем мувиклип в список отобращения.
stage.addChild( tBig );
//Делаем тоже самое еще раз для еще одного экземпляра, который анимироваться не будет.
var t:myMC = new myMC();
t.y = 240;
t.x = 320;
t.myText.mouseEnabled = false;
stage.addChild( t );
//Создаем таймер и задаем время таймера 1 секунда (1000 миллисекунд).
var myTimer:Timer = new Timer( 1000, 0 );
//Запускаем таймер.
myTimer.start();
//Назначаем слушатель событий таймера.
myTimer.addEventListener( TimerEvent.TIMER, Count );
//Создаем функцию, которая будет запускаться как только сработает таймер ( 1 раз в секунду ).
function Count( e:TimerEvent ):void
{
//Задаем текст нашим текстовым полям.
tBig.myText.text = String( n );
t.myText.text = String( n );
//Увеличиваем наш счетчик.
n += 1;
//Анимируем первый мувиклип.
new Tween( tBig, "alpha", Regular.easeOut, 1, 0, 1, true );
new Tween( tBig, "scaleX", Regular.easeOut, 1, 20, 1, true );
new Tween( tBig, "scaleY", Regular.easeOut, 1, 20, 1, true );
}
//Конец, а кто читал - молодец.

Протестируйте ролик и, если всё сделано правильно, появится то, что вы видели в начале урока. :)

Исходник: 

Похожие записи

Комментарии

Аватар пользователя DEVORON

в общем, пока искал, то хотел найти на экране уже появлялись числа более чем 450..

http://actualwave.com/blog/?p=484
 это нужно учитывать автору и новичкам..советую статью по ссылке прочесть внимательно)

Во Flash player’е работа встроенного таймера зависит от проигрывания flash ролика. Такая зависимость приводит к большим погрешностям и не делает поправку при дальнейшем выполнении. Это достаточно известная тема и уже много раз об этом писали.

Аватар пользователя ProcXel.A

 DEVORON, и как же быть в таком случае? 

True Love

Аватар пользователя DEVORON

ссылку я дал..там предложен класс AccurateTimer, который расширяет flash.utils.Timer..
больше ничего по теме сказать не могу.. сам наткнулся случайно, но в закладки в своё время внёс)

Аватар пользователя switcher

DEVORON, тоже мне новость...
А что точное? framRate не точный, интервалы не точные, getTimer тоже не точный.

smile

Разница лишь в условиях и степени не точности.
 

Цитата: ProcXel.A

DEVORON, и как же быть в таком случае?

Точным можно считать только new Date().getTime(). Писать прокачанный getTimer и высчитывать положение объектов не от количества срабатываний таймера, а от реального их времени в пути.
 
Посмотрел ссылку. Долго не мог понять как он вызвает stop и start на каждом тике. И что же? Оказывается нативный сеттер delay вызывает this.stop и this.start. Спрятать этот механизм внутри, конечно же, никто в Adobe не почесался... Переопределив указанные методы "под себя" можно легко поломать логику Timer и наследника - даже не подозревая об этом.

<i>Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете</i><br /><b>Стив Макконнел. &quot;Совершенный код&quot;</b>

Аватар пользователя komar

клево я пока шастал по инету у меня 4000 набежало

Аватар пользователя artur

Классный урок!! Такие эффекты можно использовать при создании какой -нибудь игры

Аватар пользователя qpr

Да вы че шутите чтоли? 25 строк КОДА??

Господа програмирование придумано для оптимизации)) Меньше слов больше дела:

 

Забудьте про TIMER! В Твинмаксе значение времени всегда точное.

 

import gs.*;

var number:Number = 0
Off.alpha = 0

function func() {
number ++
Off.textfield.text = number
TweenMax.to(Off,2, {scaleX:3,scaleY:3, alpha:1 });
TweenMax.to(Off, 2, {alpha:0, delay:0.6});
TweenMax.to(Off,0.01, {scaleX:0,scaleY:0, delay:2,onComplete:func });

//подбобное описание и пример можете найти по этой ссылке:

// http://pavel-ocokin.narod.ru/newQPRtimer.html

}  
func();

 

всё, короче в 3 раза...