Учебник PHP

         

SWFAction

(PHP 4 >= 4.0.5)

SWFAction - создаёт новую Action/Акцию.

Описание

new swfaction (string script)

Предупреждение!
Эта функция - ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

swfaction() создаёт новую Action и компилирует данный скрипт в SWFAction-объект.

Синтаксис скрипта основан на языке C, но большими изъятиями - машина SWF-байтокода очень сильно упрощена. К примеру, мы не может реализовать вызовы функции без большого объёма дополнительной работы, поскольку jump-байтокод имеет жёстко кодированное значение смещения. Без push вашего вызывающего адреса в стэк и возвращения - каждой функции необходимо будет знать точно, куда возвращать.

Что же осталось? Компилятор распознаёт следующие лексемы:

  • break

  • for

  • continue

  • if

  • else

  • do

  • while

Типизированные данные отсутствуют; все значения в SWF action-машине хранятся как строки.
Следующие функции можно использовать в выражениях:

time()

Возвращает количество миллисекунд (?), прошедших после старта клипа.

random(seed)

Возвращает псевдо-случайное число в диапазоне 0-посеянное.



length(expr)

Возвращает длину данного выражения.

int(number)

Возвращает данное число, округлённое в сторону уменьшения до ближайшего integer.

concat(expr, expr)

Возвращает конкатенацию данных выражений.

ord(expr)

Возвращает ASCII-код данного символа

chr(num)

Возвращает символ с данным ASCII-кодом

substr(string, location, length)

Возвращает подстроку длиной length в точке location данной строки string

Кроме того, можно использовать следующие команды:

duplicateClip(clip, name, depth)

Дублирует именованный movie-клип (как sprite/спрайт). Новый movie-клип имеет имя name и глубину depth.

removeClip(expr)

Удаляет именованный movie-клип.

trace(expr)

Записывает данное выражение в trace log. Сомнительно, что plugin браузера сделает с ним что-нибудь.

startDrag(target, lock, [left, top, right, bottom])

Начинает перетаскивание целевого movie-клипа. Аргумент lock указывает, блокируется ли мышь (?) - 0 (FALSE) или 1 (TRUE). Необязательные параметры определяют границы области для перетаскивания.

stopDrag()

Остановить перетаскивание movie-клипа.

callFrame(expr)

Вызвать именованный кадр как

getURL(url, target, [method])

Загрузить данный URL в именованный target. Аргумент target соответствует целям HTML-документа (таким как "_top" или "_blank"). Необязательный аргумент method может быть POST или GET, если вы хотите отправить переменные обратно на сервер.

loadMovie(url, target)

Загружает данный URL в именованный target. Аргументом target может быть имя кадра (я думаю) или одно из магических значений: "_level0" (заместить текущий клип) или "_level1" (загрузить новый movie поверх текущего movie).

nextFrame()

Перейти в следующему кадру.

prevFrame()

Перейти к последнему (или всё же - к предыдущему?) кадру.

play()

Начать проигрывание movie.

stop()

Остановить проигрывание movie.

toggleQuality()

Переключает между высоким и низким качеством.

stopSounds()

Остановить проигрывание всех звуков.

gotoFrame(num)

Перейти к кадру номер num. Номера кадров начинаются с 0.

gotoFrame(name)

Перейти к именованному кадру name. Что даёт много хорошего, если я ещё не добавил ярлыки кадров.

setTarget(expr)

Устанавливает контекст акции. Или, как говорится - я не знаю, что  она действительно делает.

Есть и ещё нечто сверхъестественное. Выражение frameLoaded(num) может использоваться в операторах if и циклах while для проверки того, может ли данный кадр с номером быть загружен.
Это предполагается, ноя не тестировал её и сильно сомневаюсь, что она действительно работает. Вместо этого вы можете использовать просто /:framesLoaded.

Movie-клипы (с этого момента всё это - спрайты) имеют свойства. Вы можете читать все их и устанавливать некоторые из них:

  • x

  • y

  • xScale

  • yScale

  • currentFrame - (read-only)

  • totalFrames - (read-only)

  • alpha - уровень прозрачности

  • visible - 1=on, 0=off (?)

  • width - (read-only)

  • height - (read-only)

  • rotation

  • target - (read-only) (???)

  • framesLoaded - (read-only)

  • name

  • dropTarget - (read-only) (???)

  • url - (read-only) (???)

  • highQuality - 1=high, 0=low (?)

  • focusRect - (???)

  • soundBufTime - (???)

Так, можно установить позицию x спрайта как /box.x = 100;. Но почему слэш перед box? Таким способом flash отслеживает спрайты в клипе, точно как в файловой системе unix - здесь показано, что box находится на верхнем уровне. Если именованный бокс спрайта имел внутри себя другой именованный спрайт, вы можете установить его x-позицию: /box/biff.x = 100;. Как минимум, я так думаю; исправьте меня, если это не так (здесь и далее в этом файле это комментарии автора - прим. перев.).

Этот простой пример перемещает красный квадрат через окно.

Содержание раздела