Продолжим тему программной анимации в ActionScript и сегодня более подробно рассмотрим использование метода setInterval().
Как уже говорилось, метод setInterval используется для многократного вызова (выполнения) пользовательских функций через установленный интервал времени. У этого метода два обязательных параметра:
- первый параметр - это имя пользовательской (то есть, созданной программистом) функции, которую предстоит периодически вызывать;
- второй параметр - это длительность задержки между вызовами функции.
Приведём простейший пример...
Код ActionScript 2.0:
function myFunc(){
trace("hello")
}
setInterval(myFunc,1000);
или
Код ActionScript 3.0:
import flash.utils.setInterval;
function myFunc(){
trace("hello")
}
setInterval(myFunc,1000);
В данном примере метод setInterval используется для того, чтобы каждую секунду выполнять пользовательскую функцию myFunc. Обратите внимание, что интервал между вызовами пользовательских функций задаётся в миллисекундах (1 секунда = 1000 миллисекунд). Пользовательская функция myFunc в данном примере выводит в панель Output строку «hello», но это сделано исключительно для наглядности и простоты. На самом деле, в тело функции помещаются математические вычисления или манипуляции с объектами на сцене flash-ролика, которые необходимо выполнять с заданной частотой.
Приведём простой пример. Нарисуем методами динамического рисования стрелку и будем поворачивать её каждую секунду на 6 градусов (то есть за минуту стрелка сделает оборот на 360 градусов).
Код ActionScript 2.0:
mc = this.createEmptyMovieClip("mc",0);
mc.lineStyle(5,0x333333,100);
mc.moveTo(0,0);
mc.lineTo(0,-100);
mc._x = 275;
mc._y = 200;
function myFunc(){
mc._rotation += 6;
}
setInterval(myFunc,1000);
или
Код ActionScript 3.0:
import flash.display.Sprite;
import flash.utils.setInterval;
var sprite:Sprite = new Sprite();
this.addChild(sprite);
sprite.graphics.lineStyle(5,0x333333,1);
sprite.graphics.moveTo(0,0);
sprite.graphics.lineTo(0,-100);
sprite.x = 275;
sprite.y = 200;
function myFunc(){
sprite.rotation += 6;
}
setInterval(myFunc,1000);
Результат:
Думаю, пока всё просто и понятно. Но на практике часто возникает необходимость не только запустить setInterval, но и остановить его. Например, пользовательская функция периодически вызывается с помощью setInterval до того момента, пока удовлетворяет какому-то условию. Как только условие нарушено, требуется остановить вызов функции setInterval-ом. Именно для таких случаев и предназначен метод clearInterval().
Для того, чтобы воспользоваться методом clearInterval, надо предварительно методу setInterval дать идентификатор. Иначе как clearInterval узнает, какой именно setInterval надо остановить (одновременно в флеш-приложении может работать несколько setInterval-ов). После того, как у setInterval-а появится свой идентификатор, остановить этот setInterval можно в любой момент, вызвав метод clearInterval и передав этому методу в качестве единственного параметра ранее созданный идентификатор. Ммм... надеюсь, понятно объяснил. Но гораздо понятнее это показать на примере...
Код ActionScript 2.0:
max = 10;
count = 0;
intervalId = setInterval(myFunc,1000);
function myFunc(){
count++;
if(count > max){
clearInterval(intervalId);
trace("stop")
}else{
trace(count)
}
}
или
Код ActionScript 3.0:
import flash.utils.setInterval;
import flash.utils.clearInterval;
var max:uint = 10;
var count:uint = 0;
var intervalId:uint = setInterval(myFunc,1000);
function myFunc(){
count++;
if(count > max){
clearInterval(intervalId);
trace("stop")
}else{
trace(count)
}
}
В приведённом выше примере имеется три переменных:
- max и count - переменные, хранящие целые числа;
- intervalId - переменная-идентификатор для setInterval.
Метод setInterval каждую секунду вызывает пользовательскую функцию myFunc, а функция myFunc каждый раз увеличивает значение переменной count (count++). Когда значение переменной count становится больше значения переменной max, вызывается метод clearInterval с идентификатором intervalId в качестве единственного параметра. После вызова clearInterval периодический вызов пользовательской функции myFunc прекращается. Что и следовало ожидать.
Как я уже говорил, у метода setInterval всего два обязательных параметра. Но кроме этих двух обязательных, он может принимать и необязательные параметры. Используется это не очень часто, но иногда бывает полезно. Приведём пример...
Код ActionScript 2.0:
count = 0;
setInterval(myFunc,1000,"Прошло","секунд");
function myFunc(a,b){
count++;
trace(a + " " + count + " " + b + ".")
}
или
Код ActionScript 3.0:
import flash.utils.setInterval;
var count:uint = 0;
setInterval(myFunc,1000,"Прошло","секунд");
function myFunc(a,b){
count++;
trace(a + " " + count + " " + b + ".")
}
В результате выполнения приведённого выше кода, мы получим в панель Output примерно следующее:
Прошло 1 секунд.
Прошло 2 секунд.
Прошло 3 секунд.
Прошло 4 секунд.
Прошло 5 секунд.
Прошло 6 секунд.
Прошло 7 секунд.
Прошло 8 секунд.
Прошло 9 секунд.
Прошло 10 секунд.
Прошло 11 секунд.
Прошло 12 секунд.
Как видите, всё довольно просто :-)