(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-машине хранятся как строки.
Следующие функции можно использовать в выражениях:
Возвращает количество миллисекунд (?), прошедших после старта клипа.
Возвращает псевдо-случайное число в диапазоне 0-посеянное.
Возвращает длину данного выражения.
Возвращает данное число, округлённое в сторону уменьшения до ближайшего integer.
Возвращает конкатенацию данных выражений.
Возвращает ASCII-код данного символа
Возвращает символ с данным ASCII-кодом
Возвращает подстроку длиной length в точке location данной строки string
Кроме того, можно использовать следующие команды:
Дублирует именованный movie-клип (как sprite/спрайт). Новый movie-клип имеет имя name и глубину depth.
Удаляет именованный movie-клип.
Записывает данное выражение в trace log. Сомнительно, что plugin браузера сделает с ним что-нибудь.
Начинает перетаскивание целевого movie-клипа. Аргумент lock указывает, блокируется ли мышь (?) - 0 (FALSE) или 1 (TRUE). Необязательные параметры определяют границы области для перетаскивания.
Остановить перетаскивание movie-клипа.
Вызвать именованный кадр как
Загрузить данный URL в именованный target. Аргумент target соответствует целям HTML-документа (таким как "_top" или "_blank"). Необязательный аргумент method может быть POST или GET, если вы хотите отправить переменные обратно на сервер.
Загружает данный URL в именованный target. Аргументом target может быть имя кадра (я думаю) или одно из магических значений: "_level0" (заместить текущий клип) или "_level1" (загрузить новый movie поверх текущего movie).
Перейти в следующему кадру.
Перейти к последнему (или всё же - к предыдущему?) кадру.
Начать проигрывание movie.
Остановить проигрывание movie.
Переключает между высоким и низким качеством.
Остановить проигрывание всех звуков.
Перейти к кадру номер num. Номера кадров начинаются с 0.
Перейти к именованному кадру name. Что даёт много хорошего, если я ещё не добавил ярлыки кадров.
Устанавливает контекст акции. Или, как говорится - я не знаю, что она действительно делает.
Есть и ещё нечто сверхъестественное. Выражение 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;. Как минимум, я так думаю; исправьте меня, если это не так (здесь и далее в этом файле это комментарии автора - прим. перев.).
Этот простой пример перемещает красный квадрат через окно.