Описание функции swfaction
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;. Как минимум, я так думаю; исправьте меня, если это не так (здесь и далее в этом файле это комментарии автора - прим. перев.) .
Этот простой пример перемещает красный квадрат через окно.
Следующий простой пример отслеживает вашу мышь на экране.
Пример 2. swfaction()
|
Вот то же, что и выше, но более красиво раскрашенные шарики ...
Пример 3. swfaction()
|
Следующий простой пример обрабатывает акции клавиатуры. (Вам, возможно нужно щёлкнуть на окне для передачи ему фокуса. И, возможно, вы должны будете также оставить мышь в кадре. Если вы знаете, как передавать фокус кнопкам программно, это не обязательно.)
Пример 4. swfaction()
|