Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 - Интервальные функции.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
72.19 Кб
Скачать

Прекращение выполнения интервальной функции

Если вы запустите пример 2 и нажмете по очереди обе кнопки, то увидите, что клип станет поворачиваться одновременно в обе стороны. Поэтому при нажатии одной кнопки нужно отменить выполнение цикла, запущенное при нажатии другой кнопки. Чтобы прекратить циклическое выполнение интервальной функции, нужно воспользоваться глобальной функцией clearInterval(). Этой функции нужно сообщать, какой именно интервал она должна остановить. Здесь вам пригодится идентификатор интервала. Функция, запускающая интервал – setInterval, возвращает идентификатор интервала, который представляет собой число – номер интервала. Получить идентификатор интервала можно следующим образом:

var intID:Number = setInterval(…);

или

var intID:Number;

intID = setInterval(…);

Прекратить выполнение интервала с идентификатором intID можно следующим способом:

clearInterval(intID);

Перепишем пример 2 таким образом, чтобы при нажатии одной кнопки останавливался временной интервал, запущенный нажатием другой кнопки:

import flash.utils.*;

// В этих переменных будут сохранены идентификаторы

// интервалов

// leftIntID – интервала поворота против часовой стрелки

// rightIntID – интервала поворота по часовой стрелки

var leftIntID, rightIntID : uint;

// Интервальная функция. а – угол поворота

// обратите внимание, что ссылка на клип передается

// в качестве параметра

function intRotateClip(mClip: MovieClip, a: Number):void{

mClip.rotation += a;

}

// добавление листенеров

butLeft.addEventListener(MouseEvent.CLICK, leftClick);

butRight.addEventListener(MouseEvent.CLICK, rightClick);

// Обработчик события нажатия кнопки butRight

// Клип будет поворачиваться на 5 градусов по часовой

// стрелке каждую секунду

function rightClick(_event:MouseEvent) {

// останавливаем поворот влево (против часовой стрелки)

clearInterval(leftIntID);

rightIntID = setInterval(intRotateClip, 1000, clip, 5);

}

// Обработчик события нажатия кнопки butLeft

// Клип будет поворачиваться на 5 градусов против часовой

// стрелки каждые секунды

// в этом случае угол поворота должен быть отрицательным

function leftClick(_event:MouseEvent) {

clearInterval(rightIntID); // останавливаем поворот вправо

leftIntID = setInterval(intRotateClip, 500, clip, -5);

}

Пример 4

Сделаем следующее – на рабочем листе находится символ, которому присвоено имя clip. Сделаем так, что при щелчке мышью в какой либо области экрана клип начал передвижение в эту сторону и останавливался при достижении точки.

import flash.utils.*;

// в этой переменной сохраняется идентификатор интервала

// запускающего движение клипа

var nIntervalID : Number;

// здесь сохраним координаты мыши

var mousex, mousey : Number;

// Это интервальная функция

// mClip – ссылка на клип

// dx – смещение по оси х

// dy – смещение по оси y

function intFunction(mClip : MovieClip, dx : Number, dy : Number):void {

// смещение координат клипы

// делим на 5 для того, чтобы перемещение

//не было мгновенным

mClip.x += dx/5;

mClip.y += dy/5;

// условия окончания движения

if (mClip.hitTestPoint(mousex, mousey, false))

{

clearInterval(nIntervalID);

}

}

stage.addEventListener(MouseEvent.CLICK, stageClick);

//обработчик события нажатия кнопки мыши в рабочей области

function stageClick(_event:MouseEvent){

// прекращение предыдущего движения

clearInterval(nIntervalID);

// вычисление смещения

var dx = root.mouseX - clip.x;

var dy = root.mouseY - clip.y;

// запоминаем координаты мыши

mousex = root.mouseX;

mousey = root.mouseY;

// запускаем интервал, запоминаем его идентификатор

nIntervalID = setInterval(intFunction, 100, clip, dx, dy);

}