Программная анимация: setInterval() в ActionScript

Продолжим тему программной анимации в 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 секунд.

Как видите, всё довольно просто :-)

Автор: admin

Дата добавления: 2012-05-16

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

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

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

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): Инкогнито
Дата добавления: 2015-09-19
Спасибо
Добавить комментарий:







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

Идиот-тест

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

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