Информационные технологииStfw.Ru 🔍

Ming для Flash

Графика, Flash, pdf
🕛 01.11.2006, 15:29
Ming является библиотекой с открытым исходным кодом (LGPL), позволяющей создавать анимации SWF («Flash»). Ming поддерживает почти все возможности Flash 4, включая: фигуры (shapes), цветовые переходы (gradients), картинки (bitmaps: jpeg), превращения (morphs или «shape tweens»), текст, кнопки, действия, клипы (sprites), потоковую музыку трЗ и преобразования цветов; единственное, чего не поддерживает Ming, это звуковые события. Использование Ming предпочтительнее модуля libswf. Ming работает на большинстве платформ, включая Windows, использует РНР объекты для представления объектов SWF и продолжает разрабатываться1 (адрес разработчиков ming@opaque.net). Библиотеку Ming можно загрузить с сайта: http://www.opaque.net/ming/.

Все размеры указываются в единицах «твипс» (twips), что равно I 1/20 пиксела. Но масштаб может изменяться проигрывателем.

Ming использует PHP-объекты тринадцати классов:

swfmovie();
swfshape();
swfdisplayitem();
swfgradient();
swfbitmap();
swf fill ();
swfmorph();
swftext();
swffont();
swftextfield();
swfsprite();
swfbutton();
swfaction().
SWFMovie - объект анимации SWF 4

SWFMovie->output

Вывод созданной анимации

void swfmovie->output (void)

Для того чтобы браузер правильно воспринял передаваемый ему файл, используйте PHP-команду отсылки заголовка до вывода анимации:

<?php headert'Content-type: apolication/x-Shockwave-flash'); ?>

См. также swfmovie->save().

SWFMovie->save

Сохранение анимации в файле

void swfmovie->save (string filename)

См. также output().

SWFMovie->add

Добавление компонентов анимации

void swfmovie->add (resource instance)

Этим методом можно добавлять объекты различных типов: фигуры, текст, шрифты и т. п. Для отображаемых объектов (shape, text, button, sprite) возвращается дескриптор объекта SWFDisplayltemO, внесенный в список отображения. При многократном добавлении одного объекта каждый раз будет возвращаться другой дескриптор.

См. также: swfmovie->remove() и пример в swfdisplayitem->rotateto().

SWFMovie->remove

Удаление объекта из списка отображения

void swfmovie->remove (resource instance) Функция противоположна swfmovie->add().

SWFMovie->setbackground

Установка цвета фона

void swfmovie->setbackground (int red, int green, int blue)

Цвет задается значениями (0-255) компонентов: красного, зеленого и синего.

SWFMovie->setdimension

Установка ширины и высоты анимации

void swfmovie->setdimension (int width, int height)

SWFMovie->setrate

Установка частоты кадров анимации

void swfmovie->setrate (int rate)

Значение rate - число кадров в секунду. Анимация будет тормозиться, если проигрыватель не будет успевать перерисовывать кадры. Если одновременно проигрывается звук, то для его нормального воспроизведения частота перерисовки будет при необходимости снижаться.

SWFMovie->setframes

Установка общего числа кадров анимации

void swfmovie->setframes (string number_of_frames)

SWFMovie->nextframe

Переход к новому кадру анимации

void swfmovie->nextframe (void)

SWFMovie->streammp3

Воспроизведение потокового звука МРЗ

3void swfmovie->streammp3 (string mpSFileName)

Заметьте, что проигрываться будет не весь файл фонового звука целиком, а только та часть, которая успеет воспроизвестись за время воспроизведения установленного числа кадров при текущей частоте кадров.

<?php
$m = new SWFMovie() ; $m->setRat.eC10.0);
// кадров в секунду $m->streamMp3("distortobass.mp3"):
// use your own MP3
// длительность проигрывания анимации:
100/10.0 = 10 секунд $m->setFrames(100);
// кадров в анимации
headert'Content-type: application/x-shockwave flash'):
$m~>output(). ?>

SWFDisplayltem - объект списка отображения

Используется для хранения компонентов анимации; после того, как объекты shape, text, sprite или button декларированы (созданы экземпляры классов swfshape(), swfbutton(), swftext(). swfspnte()) и добавлены в анимацию (методом swfmovie->add()), для каждого из них возвращается дескриптор (объект типа SWFDisplayltem), который можно использовать для перемещения, вращения, масштабирования и наклона объекта.

SWFDisplayltem - >moveTo

Репозиционирование объекта

void swfdisplayitem->moveto (int x, int у) Указываются абсолютные координаты.

См. также swfdisplayitem->move().

SWFDisplayltem->move

Смещение объекта

void swfdisplayitem->move (int dx. int dy)

Указываются координаты относительно текущей позиции.

См. также swfdisplayitem->moveto().

SWFDisplayltem - >scaleTo

Задание новых размеров объекта

void swfdisplayitem->scaleto (int x, int у)

См. также swfdisplayitem->scale().

SWFDisplay!tern->scale

Масштабирование объекта

void swfdisplayitem->scale (int dx, int dy)

Указываются коэффициенты масштабирования.

См. также swfdisplayitem->scaleto().

SWFDisplayltem->rotateTo

Установка абсолютного угла поворота объекта

void swfdisplayitem->rotateto (double degrees)

Угол указывается в градусах.

<?php // три вращающиеся строки Sthetext = "ming!";
$f = new SWFFontC'Bauhaus 93.fdb"):
$m = new SWFMovieO : $m->setRate(24.0):
$m->setDimension(2400. 1600).
$m->setBackground(Oxff. Oxff. Oxff):
function texKSr. $g. $b. $a. $rot. Sx. $y. Sscale. Sstring) {
global $f. $m; $t = new SWFText();
$t->setFont($f). $t->setCo1or($r. $g. $b. $a):
$t->setHeight(960)-.
$t->moveTo(-($f->getWidth($stnng))/2. Sf->getAscent()/2):
$t->addString($string): $1 $m->add($t);
$i->/ - $x: $i->y = $y. $1->rot - trot: $i->s ' Sscale.
$1->rotateTo($rot): $i->scale($scale. Sscale):
return $1: function step($i) {
soldrot = $i->rot. $i->rot = 19*$i->rot/20;
Si >x = (19*$i->x + 1200)/2C: Sv>y = (19*$v>y + 800)/20;
?i->s = (19*$i->s + 1.01/20.
Si->rotateTo(Si->rot):
$i->scaleTo(Si ->s. Ii->s): $-i->moveTo($i->x. $i->y).
return ii. } Sil = text(0xff. 0x33. 0x33.
Oxff. 900. 1200 800. 0 03. Sthetext):
$12 = text(0x00. 0x33. Oxff. Ox7f. -560.
1200. 800. 0.04. $thetext); $13 =
text(Oxff. Oxff. Oxff. Ox9f. 180. 1200. 800. 0.001 Sthetext):
for($i=l; Si<=100: ++$1) {
$11 = step($11); $12 = step($12); $13 = step($13):
$m->nextFrame(): }
headert'Content-type: application/x-shockwave-flash');
$m->output(); ?>

См. также swfdisplayitem->rotate().

SWFDisplayltem->Rotate

Поворот объекта

void swfdisplayitem->rotate (double ddegrees)

Указывается относительный угол поворота в градусах.

См. также swfdisplayitem->rotateto().

SWFDisplayltem->skewXTo

Установка наклона по X

void swfdisplayitem->skewxto (double d)

Указывается коэффициент смещения основания вправо, то есть 1.0 означает искажение в 45 градусов. Возможны отрицательные значения для смещения основания влево.

См. также: swfdisplayitem->skewx(), swfdisplayitem->skewy() и swfdisplayitem-> skewyto().

SWFDisplayltem->skewX

Наклон объекта по X

void swfdisplayitem->skewx (double d)

SWFDisplayltem->skewYTo

Установка наклона по Y

void swfdisplayi-tem->skewyto (double degrees)

Указывается смещение правой стороны вниз.

SWFDisplayltem->skewY

Наклон объекта по Y

void swfdisplayitem->skewy (double ddegrees)

SWFDisplayltem - >setDepth

Установка порядка отображения (z-order)

void swfdisplayitem->setdepth (double depth)

Размещает объект на указанном уровне. (При добавлении следующий объект размещается поверх предыдущего.)

SWFDisplayltem->remove

Удаление объекта из анимации

void swfdisplayitem->remove (void)

SWFDisplayltem->setName

Присвоение объекту имени

void swfdisplayitem->setname (string name)

Используется для возможности обращения к объекту при написании программ действий. Полезно только для спрайтов.

SWFDisplayltem->setRatio

Установка увеличения объекта

void swfdisplayitem->setratio (double ratio)

Полезно только для объектов SWFMorph().

Приведенный ниже пример создает три концентрических изменяющихся кольца.

<?php $р = new SWFMorphC);
$g = new SWFGradient():
$g->addEntry(0.0. 0. 0. 0):
$g->addEntry(0.16. Oxff. Qxff. Oxff):
$g->addEntry(0.32. 0. 0. 0):
$g->addEntry(0.48. Oxff. Oxff. Oxff);
$g->addEntry(0.64. 0, 0. 0);
$g->addEntry(0.80, Oxff. Oxff. Oxff):
$g->addEntry(l.'00. 0. 0. 0);
$s = $p->getShapel():
$f = $s->addFill($g. SWFFILL_RAD!AL_GRADIENT);
$f->scaleTo(0.05):
$s->setLeftFill($f):
$s->iTOvePenTo(-160, -120);
$s->drawLine(320. 0);
$s->drawLine(0. 240);
$5->drawLine(-320. 0);
$s->drawL1ne(0. -240):
$g = new SWFGradientO:
$g->addEntry(0.0. 0. 0. 0):
$g->addEntry
(0.16. Oxff. 0. 0);
$9->addEntry(0.32. 0. 0. 0):
$g->addEntry(0.48. 0. Oxff. 0):
$g->addEnti-y(0.64. 0. C. 0):
$g->addEntryC0.80. 0. 0. Oxff):
$g->addEntry(1.00. 0. 0. 0).
$s - $p->getShape2():
$f $s->addFill($g.
S/:FFILL_RADIAL_GRADIENT);
$f->scaleTo(0.05):
$f->skewXTo(1.0):
$s->setLeftFill($f):
$s->movePenTo(-160. -120):
$s->drawLine(320. 0):
$s->drawl_ine(0. 240):
$s->drawLine(-320. 0):
$s->drawLine(0. -240):
$m = new SWFMovie():
$m->setDimension(320. 240):
$n = $m->add($p):
$i->moveTo'160. 120):
for($n-0: $n<-l 001. $n+=0.01) {
Si->setRatio($n):
$m->nextFrame(): }
header('Content - type: appli cati on/x-Shockwave-fl ash');
fm->output(); ?>

SWFDisplayltem->addColor

Увеличение значений компонентов цвета

void swfdisplayltem->addco"lor ([integer red [. integer green [, integer blue [, integer a>)

SWFDisplayltem->multColor

Умножение значений компонентов цвета

void swfdisplayitem->multcolor ([integer red [. integer green [, integer blue [. integer a>)

<?php $b = new SWFB1traapCbackyard.jpg");
// note use your own picture :-)
$s = new SWFShape(): $5->setRightFilU$s->addFill($b)):
$s->drawLine($b->getWidth(). 0):
$s->drawLine(0. $b->getHeight()):
$b->drawLine(-$b->getWidth(). 0).
$s->drawLine(0. -$b->getHenght());
$m = new SWFMovieO $m->setDimension($b->getWTdth().
$b->getHeight()). $1 - $m->add($s);
for($n-0: $n<-20: ++$n) {
$v>multColor(1.0-$n/10. 1.0. 1 0).
$1 >addColor(Oxff*$n/20. 0. 0):
$m->nextFrame(): }
headerCContent type: application/x-shockwave-flash');
$m->output(). ?>

SWFShape - объект Фигура

<?php $m = new SWFMovie() ;
$m->setDimension(800. 800): // размер рисунка
$m->setbackground(50.100.200). // цвет фона
$s = new SWFShape() . $s->setLine(160. Ox7f. 0. 0).
// стиль линии $s->setRightFill($s->addFill(Oxff. 0. 0)):
// заливка $s->movePenTo(200. 200):
// начальная точка $s->drawLineTo(620. 400):
$s->drawLine(-200. 60):
$s->drawCurveTo(400. 0. 200. 200):
$m->add($s): headert'Content-type-
application/x-shockwave-flash'): $m->output(): ?>

SWFShape->setLine

Установка типа линий фигуры

void swfshape->setline (Int width [, integer red , integer green , integer blue [, integer a]])

Число аргументов может быть 1, 4 или 5 (но не 3 или 2). Для линии задается ширина width, цвет (значениями компонент красного, зеленого и синего) и альфа-параметр.

<?php $s = new SWFShape():
$fl - $s->addFill(Oxff. 0. 0):
$f - new SWFFontf'Techno.fdb'):
$s->setRightFill($fl): $5.>setLine(40. Ox7f. 0. 0).
$s->drawGlyph($f. '!'); $s->movePen($f.>getWidth('!'). 0):
$m = new SWFMovie():
$m->setDimension(3000.2000):
$m-><;etRate(12.0).
$-, _ $m->add($s).
$i.>rnoveTo(1500-$f->get;«hdth
("n/2. 1000+$f->getAscent()/2):
headt'r('Content-type:
application/x-Shockwave-flash'}; $m->oiitput(): ?>

SWFShape->addFill

Задание стиля заливки

void swfshape->addfill (Integer red. Integer green, Integer blue [, Integer a])

void swfshape->addfill (SWFbitmap bitmap [, integer flags]) void swfshape->addfill (SWFGradient gradient [, integer flags])

Возможны три стиля заливки (см. синтаксис): цветом, рисунком, градиентная заливка.

Для ригунка задастся дескриптор объекта swfbitmap() и необязательный параметр SWFFILL_CLIPPED_BITMAP (обрезанный рисунок) или SWFFILL_ TILED_BITMAP (размноженный рисунок, по умолчанию).

Для градиентной заливки задается дескриптор объекта swfgradientO и необязательный параметр SWFFILL_RADIAL_GRADIENT или SWFFILL_ LINEAR_GRAOIENT (линейный, по умолчанию).

Возвращает дескриптор объекта swffill() для использования в функциях swfshape->setleftfill() и swfshape->setrightfill().

<?php $Р . new SWFMorph().
$b - new SWFBitmapCaTphafin.jpg"):
// используйте собственный рисунок
$width = Ib->getWidth(): SheigHt = №->getHeight():
$s - $p->getShapel():
$f = $5->addFill($b. SWFFILL_T!LED_BITMAP).
$f->moveTo(-$width/2. -$height/4):
$f->scaleTo(i 0. 0.5): $s->
setLeftFill($f): $s->movePenTo
(-$w1dth/2. -SheightM):
$s->drawL1ne($width, 0): $s->drawLine
(0. $height/2): $s->drawLine(-$wicSth. 0).
$s->drawl_ine(0. -$henght/2).
$s - $p->getShape2():
$f = $s->addFill($b. SWFFILL_TILED_BITMAP):
// these two have no effect! $f->
tnoveTo(-$width/4. -$height/2):
$f->scaleTo(0.5. 1.0):
$s->setLeftF1l1($f);
$s->movePenTo(-$width/4. -$height/2):
$s->drawLine($width/2. 0).
$s->drawl_ine(0. Sheight): $s->drawLnne
(-$width/2. 0): $s->drawLine(0. -Sheight):
$m = new SKFMovie();
$m->setDimension($width. Sheight):
$1 = $m->add($p):
$v>moveTo($width/2. $height/2):
for($n-0. $n<1.001: $n+=0.03)
$i->setRatio($n): $m->nextFrame(): }
header('Content-type: application/x-shockwave-flash'):
$m->output(): ?>

SWFShape->setLeftFill

Заливка фигуры налево

void swfshape->setleftfill (swfgradient fill)

void swfshape->setleftfill (int red. int green, int blue [. int a])

Если браузер отказывается закрашивать фигуру, попробуйте закраску с другой стороны.

Второй вариант является аббревиатурой swfshape->setleftfiTI($s-> addfill($r. $g, $b [, $a]));.

См. также swfshape->setrightfill().

SWFShape->setRightFill

Заливка фигуры направо

void swf shape->setnghtf nil (swfgradient fill)

void swfshape->setrightfill (int red. int green, int blue [, int a])

См. также swfshape->setleftfi"ll().

SWFShape->movePenTo

Задание точки вывода

void swfshape->raovepento (integer x, integer y)

Указывается точка, от которой будет чертиться фигура.

См. также: swfshape->movepen(), swfsh"ape->drawcurveto(), swfshape-> drawlineto() и swfshape->drawline().

SWFShape->movePen

Смещение точки вывода

void swfshape->movepen (integer dx, integer dy)

См. также: swfshape->movepento(), swfshape->drawcurveto(), swfshape-> drawlineto() и swfshape->drawline().

SWFShape->drawLineTo

Черчение линии

void swfshape->drawlineto (integer x, integer y)

Создает линию (используя текущий стиль) от текущей точки вывода до указанной.

См. также: swfshape->movepento(), swf shape ->drawcurveto(), swfshape-> movepen(), swfshape->drawline().

SWFShape->drawLine

Проведение отрезка

void swfshape->drawline (integer dx, integer dy)

См. также: swf shape->movepento(), swfshape->drawcurveto(), swfshape-> movepen() и swfshape->drawlineto().

SWFShape->drawCurveTo

Черчение кривой void swfshape->drawcurveto (int controlx, int controly, int endx, int endy)

Создает квадратичную кривую (используя текущий стиль) от текущей точки вывода до указанной (endx, endy), используя точку (endx, endy) как ориентирующую.

См. также: swfshape->drawlineto(), swfshape->drawline(), swfshape-> movepento() и swfshape->movepen().

SWFShape->drawCurve

Проведение кривой

void swfshape->drawcurve (int controldx. int controldy, int dx, int dy)

Координаты указываются относительные.

SWFGradient - объект градиентной заливки

Градиентные заливки используются для заполнения фигур методом swfshape->addfilH).

В результате выполнения этого простого примера на фоне черно-белой градиентной заливки будет создан по центру красноватый диск.

<?php $m = new SWFMovie() : $m->set.Dimension(320. 240):
$s = new SWFShape():// first gradient- black to white
$g = new SWFGradient(); $g->addtntry(0 0. 0. 0. 0).
$g->addEntry(1.0. Oxff. Oxff. Oxff); 1
$f = $s->addFill($g. SWFFILL_LINEAR_GRADIENT):
$f->scaleTo(0.03); $f-xnoveTo(160. 120)-
$s->setRightFill($f). $s->drawLine(320, 0).
$s->drawLine(0. 240): $s->drawLine(-320. 0):
$s->drawLme(0. -240): $rc->add{$s).
$s - new SWFShape():
// second gradient- radial gradient from red
to transparent $g = new SWFGradient();
$g->addEntry(0.0. Oxff. 0. 0. Oxff):
$g->addEntry(1.0. Oxff. 0. 0. 0):
$f = $s->addF111($g. SWFFILL_RADIAL_GRADIENT):
$f->scaleTo(0.05): $f->moveTo(160. 120):
$s->setRightFill($f): $s->drawLine(320. 0):
$s->drawline(0. 240): $s->drawLine(-320. 0):
$s->drawLine(0. -240): $m->add($s):
header('Content-type: application/x-shockwave-flash'):
$m->output(): ?>

SWFGradient- >add Entry

Добавление экстремума градиентной заливки

void swfgradient->addentry (double ratio, int red, int green, int blue [, int a])

Аргумент ratio указывает позицию диапазона градиентной заливки (от 0 до 1), для которой указывается цвет. Необязательным аргументом а указывается прозрачность (0-255).

SWFBitmap - загрузка рисунка

new swfbitmap (string filename [, integer alphafilename])

i Загружает рисунок из файла JPEG или DBL-файла filename. Можно указать дополнительный рисунок alphafilename для использования в качестве альфа-маски. JPEG-рисунок должен быть в формате baseline (frame 0), другие форматы - baseline optimized и progressive scan jpeg - не поддерживаются.

Импортировать рисунки PNG напрямую нельзя, хотя можно использовать утилиту png2dbl для конвертирования в формат DBL («define bits lossless»).

<?php $s = new SWFShape():
$f = $s->addFill(new SWFBitmapC'p.dbl")):
$s->drawLine(32. 0): Ss->drawLine(0. 32):
$s->drawl_ine(-32. 0): $s->draw!_ine(0. -32):
$m = new SWFMovie() :
$m->setDimension(32. 32): $m->add(Ss);
header('Content-type: application/x-Shockwave-flash'):
$m->output(): ?>

Пример с использованием альфа-маски:

<?php $s = new SWFShape():
// .msk файл генерирован утилитой gif2mask
$f = $s->addFill(new SWFBitmapC'alphafill. jpg".
"alphafill.msk")): $s->set.RightFill($f):
$s->drawLine(640. 0): $s->drawLine
(0. 480); $s->drawl_ine(-640. 0): $s->drawLine(0. -480):
$c = new SWFShape(): $c->setRightFill($c->
addFill(Ox99. 0x99. 0x99)): $c->drawUne(40, 0):
$c->drawLine(0, 40): $c->drawLine(-40. 0);
$c->drawLine(0. -40):
$m = new SWFMovie() : $m->setDimension(640, 480):
$m->setBackground(Oxcc. Oxcc. Oxcc);
// нарисовать шахматный фон for($y=0;
$y<480: $y+=40) { for($x-0; $x<640; $x+=80) {
$i = $m->add($c); $1->moveTo($x. $y): }
$y+=40; for($x=40: $x<640: $x+=80) {
$i = $m->add($c); $i->moveTo($x, $y): }
$m->add($s): header('Content-type:
applтcation/x-shockwave-fl ash'): $m->output().?>

SWFBitmap->getWidth

Установка ширины рисунка в пикселах

int swfbitmap->getwidth (void)

См. также swfbitmap->getheight().

SWFBitmap->getHeight

Установка высоты рисунка в пикселах

int swfbitmap->getheight (void)

См. также swfbitmap->getwidth().

SWFFill - объект Заполнитель

С помощью этого объекта можно трансформировать (масштабировать, наклонять, вращать) рисунки и градиентные заливки, используемые как заполнители. Этот объект создается методом swfshape ->addfil1().

SWFFill->moveTo

Установка точки, от которой начинается заполнение

void swffill->movetc (integer x, integer y)

SWFFill->scaleTo

Установка масштаба заполнителя

void swffill->scaleto (integer kx, integer ky)

SWFFill->rotateTo

Установка угла поворота заполнителя

void swffill->rotateto (double degrees)

SWFFill->skewXTo

Установка угла х-наклона заполнителя

void swffill->skewxto (double x)

Указывается коэффициент смещения основания вправо, то есть 1.0 означает искажение в 45 градусов. Возможны отрицательные значения для смещения основания влево.

SWFFill->skewYTo

Установка у-наклона заполнителя

void swffill->skewyto (double у)

Указывается смещение правой стороны вниз.

SWFMorph - объект Превращение

Объект представляет собой превращение одной фигуры в другую («shape tween»).

В приведенном ниже примере большой красный квадрат, вращаясь, превращается в маленький синий.

<?php $р = new SWFMorph().
$s = $p->getShapel(): $s->setLine(0.0.0.0):
$s->setLeftFill($s >addFill(Oxff. 0. 0)):
$s->movePenTo(-1000.-1000). $s->drawl_-ine(2000.0);
$s->drawl_ine(0.2000):
$5->drawLine(-2000.0): $s->drawline(0.-2000),
$s - $p->getShape2O;
$s->setLine(60.0.200.0):
$s->setLeftFill($s->addFilKO. 0. Oxff));
$s->movePenTo(0.-1000):
$s->drawLine(1000.1000):
$s->drawLine(-1000.1000):
$s >drawLine(-1000.-1000):
$s->drawLine(1000.-1000):
$m = new SWFMovie() .
Sm->setDimension(3000.2000):
$m->setBackground(Oxff. Oxff, Oxff);
$1 - $m->add($p): $i->moveTo(1500.1000):
for($r=0.0: $r<=1.0: $r+=0.1) {
$v>setRatio(Sr): $m->nextFrame(): }
header С Content-type: application/x-Shockwave-flash'):
$m->output(): ?>

SWFMorph->getshape1

Установка начальной фигуры превращения

Imixed swfmorph->getshapel (void)

Возвращает объект swfshape().

SWFMorph->getshape2

Установка конечной фигуры превращения

2mixed swfmorph->getshape2 (void)

Возвращает объект swfshape().

SWFText - объект текста

<?php$f new SWFFontt"Techno fdb");
$t - new SWFText(): $t->setFont($f):
$t->moveTo(200. 2400). $t->setColor(Oxff. Oxff. 0):
lt->setHenght(1200):
$t->addString("PHP
generates Flash with Ming!!");
$m = new SWFMovie(); $m->setDimension
(5400. 3bOO). I $m->add($t).
headerСContent-type: application/x-shockwave-flash');
$m->output(): ?>

SWFText->setFont

Установка текущего шрифта

void swftext->setfont (font)

SWFText->setHeight

Установка высоты шрифта

void swftext->setheight (integer height) Значение но умолчанию - 240.

SWFText->setSpacing

Установка расстояния между символами

void swftext->setspacing (double spacing)

Значение по умолчанию - 1.0. Значение 0 указывает, что следующий символ будет выводиться непосредственно за последним. Вычисления не отличаются точностью.

SWRext->setColor

Установка цвета шрифта

void swftext->setcolor (int red, int green, int blue [, int a]) Значение по умолчанию - черный.

SWRext->moveTo

Установка позиции вывода

void swftext->moveto (integer x. integer y)

SWFText->addString

Рисование строки

void swftext->addstring (string string)

SWFText->getWidth

Вычисление ширины строки

double swftext->addstring (string string)

Возвращает размер с учетом размеров шрифта, масштаба и т. п.

SWFFont - Загрузка шрифта

new swffont (string filename)

В аргументе указывается имя FDB-файла или имя шрифта, поддер живаемого браузером. Формат FDB («font definition block») содер жит описание шрифта следующего вида: «SWF DefineFont2 block». Файл FDD можно получить из файлов-шаблонов «SWT Generator» с помощью утилиты makefdb библиотеки ming.

Три специальных шрифта должны быть доступны всегда: _serif, _sans и _typewriter.

<Php $f - newSWFFont("_sans"): ?>

Дескриптор шрифта, возвращенный swffont(), используется как аргумент методов SWFText->setFont() и SWFTextField->setFont().

swffont->getwidth

Вычисление ширины строки

int swffont->getwidth (string string)

Метод подобен методу SWFText(), но используется значение масштаба по умолчанию.

SWFTextField - объект текстового поля

new swftextfield ([int flags])

Текстовые ноля менее функциональны, нежели объекты swftext(): их нельзя вращать, непропорционально масштабировать, наклонять, но они могут использоваться для ввода в формах и использовать шрифты браузера.

Поведение поля можно изменить, указав необязательные флаги; следующие значения можно комбинировать, используя битовый оператор ИЛИ:

SWFTEXTFIELD_NOEDIT - нередактируемое поле;
SWFTEXTFIELD_PASSWORD - скрывает вводимые данные;
SWFTEXTFIELD_DRAWBOX - чертит обрамление;
SWFTEXTFIELD_MULTILINE - многострЪчный режим;
SWFTEXTFIELD_WORDWRAP - позволяет автоматически разносить длинный текст на несколько строк;
SWFTEXTFIELD_NOSELECT - делает текст поля невыделяемым.
Например, следующая строка создает поле с нсвыделяемым и нередактируемым текстом:

$t = newSWFTextField(SWFTEXTFIELD_NOSELECT
SWFTEXTFIELO_NOEDIT).

SWFTextField->setFont

Установка шрифта поля

void swftextfield->setfont (string font)

SWFTextField->setbounds

Установка ширины и высоты поля

void swftextfield->setbounds (int width, int height)

SWFTextField->align

Установка выравнивания текста в поле

void swftextfield->align (int alignement)

Допустимые значения аргумента: SWFTEXTFIELD_ALIGN_LEFT, SWFTEXTFIELD_ ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER и SWFTEXTFIELD_ALIGN_JUSTIFY.

SWFTextField->setHeight

Установка высоты шрифта текстового поля

void swftextfield->setheight (int height)

Значение по умолчанию - 240.

SWFTextField->setLeftMargin

Установка ширины левого отступа поля

void swftextfield->setleftmargin (int width)

Значение по умолчанию - 0.

SWFTextField->setrightMargin

Установка ширины правого отступа поля

void swftextfield->setrightmargin (int width)

Значение по умолчанию - 0.

SWFTextField - >setM argi ns

Установка ширины левого и правого отступов поля

void swftextfield->setmargins (int left, int right)

Это комбинация двух вышеописанных методов.

SWFTextField->setindentation

Установка ширины отступа первой строки

void swftextfield->setindentation (int width)

SWFTextField->setLineSpacing

Установка межстрочного расстояния

void swftextfield->set1inespacing (int height)

Значение по умолчанию - 40.

SWFTextField->setcolor

Установка цвета поля

void swftextfield->setcolor (int red, int green, int blue [, int a])

Значение по умолчанию - прозрачный.

SWFTextField->setname

Присвоение полю имени

void swftextfield->setname (string name)

Используется при отсылке данных формы и для выполнения действий.

SWFTextField->addstring

Добавление строки к тексту поля

void swftextfield->addstring (string string)

SWFSprite - создание клипа (sprite)

Спрайт («movie clip») позволяет создавать анимации с собственной системой отсчета времени. Поэтому спрайты функционируют подобно основным анимациям.

<?php $ь - new SWFShape();
$s->setRngntFill($s->addFill(Oxff. 0. 0)):
$s->movePenTo(-500.-500):
$s->drawLineTo(500.-500):
$s->drawLineTo(500.500):
$s->drawLineTo(-500.500):
$s->drawnneTo(-500.-500).
$p = new SWFSpnte():
$1 = $p->add($s):
for($j-0;$j<8:$J++){
$p->nextFrame().
$1 >rotate(10):
} $p-?nextFrame():
$m = new SWFMovie().
$, = $m >add($p):
$i->moveTo(1500.1000): $setNameC'blah");
$m->setDimension(3000.2000);
header( 'Content-type, application/x-shockwave-flash'):
$m->output(). ?>

SWFSprite->add

Добавление объекта к спрайту

void swfsprite->add (resource object)

Этот метод позволяет добавлять объекты swfshape(), swfbutton(), swftext(), swfaction(), swfsprite(). Метод возвращает дескриптор объекта в списке отображения.

SWFSprite->remove

Удаление объекта из спрайта

void swfsprite->remove (resource object)

Метод, обратный предыдущему.

SWFSprite->setframes

Установка общего числа кадров

void swfsprite->setframes (integer numberofframes)

SWFSprite->nextframe

Переход к следующему кадру

void swfsprite->nextframe (void)

SWFbutton - объект Кнопка

Приведенный ниже пример отслеживает события кнопки.

<?php $f new SWFFont("_senf"):
$p - new SWFSpnte(). function label(Sstring) { global $f:
$t = new SWFTextField(). $t->setFont($f):
$t->addStnng($stnng) $t->setHenght(200):
$t->setBounds(3200.200): return $t: }
function addLabel (Sstnng) { global $p.
$1 = $p->add(label($stnng)):
$p- nextFrame(): $p >remove($i). }
$p->add(new SWFAction("stop():"))
; addLabelC'NO ACTION"):
addLabel{' SWFBUTTON_MOUSEUP"):
addLabeli"SWFBUTTONJdUSEDOWN"):
addLabel ("SWFBUTTONJWUSEOVERLL).
addLabel("SWFBUTTON_MOUSEOUT"):
addLabel("SWFBUTTON_MOUSEUPOUTSIDE");
addLabel("SWFBUTTON_DRAGOVER"):
addLabel ("SWFBUnON_DRAGOUT"):
function rect($r. $g. $b) { $s - new bWFShape():
$s->setRightFill($s->addFill($r. $g. $b)):
$s->draidine(600.0): $s->drawUne{0.600):
$s-»drawLine(-600.0): $s->drawL"'ne(0.-600);
return $s: } $b - new SWFButton():
$b->addShape(rect(Oxff. 0. 0).
SWFBUTTONJJP SWFBUTTONJHIT);
$b->addShape(rect(0. Oxff. 0). SWFBUTTONJWER).
№->addShape(rect(0. 0. Oxff). SWFBUTTON_DOWN);
$b->addAction(new SWFAction
("setTarget( '/label'): goto^ramed):").
SidFBUTTON_MOUSEUP):
$b->addAction(new SWFAction
("setTarget( '/label'); gotoFrame(2).").
SWFBUTTON_MOUS&#163;DOkN):
$b->addAction(new SWFAction
("setTarget( '/label'): gotoFrame()):").
SWFBUnON_HOUSEOVER):
$b->addAction(nen SWFActionC"setTarget('/label'):
gotoFrame(4):").
SWFBUnON_MOUSEOUT):
$b->addAction(new SWFAction("setTarget('/label'):
gotoFrame(S):").
SWrBUTTON_MOUSLUPOUTSIOE):
$b->addAction(new SKFActlonC'setTargett'/label'):
gotoFrame(6):").
SWF8UTTON_DRAGOVER):
$b->addAction(new SWFAction
("setTarget('/label'/: gotoFrame(7):").
SWFBUTTON_DRAGOUT);
$m = new iWFMovie() : $m->setDimension(4000.3000);
$1 - $m->add($p); $1 ->setName("label");
$1->тоуеТо(400 1900):
$1 = $m >add($b): $i->moveTo(400.900);
header('Content-type applicatlon/x-shockwave-flash'):
$m->output(). ?>

Следующий пример позволяет перетаскивать кнопку по экрану.

<?php $s = new SWFS^dpe'):
$s->setRightFill($s->addFill(Oxff. 0. 0)).
$s->drawLine(1000.0): $s->drawLine(0.1000);
$s->drawLine(-1000.0): $s->drawLine(0.-1000):
$b = new SWFButton():
$b->addShape($s. SWFBUTTON_H1T
SWFBUTTONJJP SWFBUTTON_OOWN
SWFBUTTONJ3VER) . $b->addAction(new SWFAction("startDrag('/test'. 0):")
SWFBUTTON_MOUSEDOWN);
// '0' указывает на неблокировку мыши
$b->addAction(new SWFActionC'stopDragO;").
SWFBUTTON_MOUSEUP
SWFBUTTON_MOUSEUPOUTSIDE).
$p - new SWFSpnte(): $p->add($b). $p->nextFrame():
$m = new SWFMovie(): $1 = $m->add($p):
$1 >setName('test'): $i->moveTo(1000.1000):
header('Content - type: application/x-shockwave-flash'):
$m->output(): ?>

SWFbutton->addShape

Назначение кнопке фигуры

void swfbutton->addshape (resource shape, integer flags)

Возможны флаги: SWFBUTTONJJP, SWFBUTTONJWER, SWFBUTTON_DOWN, SWFBUHON_ HIT. Кнопка SWFBUTTON_HIT не отображается, а определяет область, реагирующую на нажатия.

SWFbutton->setUp

Синоним addShape (shape, SWFBUTTON_UP)

void swfbutton->setup (resource shape)

См. также: swfbutton->addshape() и SWFAction().

SWFbutton ->setOver

Синоним addShape (shape, SWFBUTTON_OVER)

void swfbutton->setover (resource shape)

SWFbutton->setdown

Синоним addShape (shape, SWFBUTTON_DOWN))

void swfbutton->setdown (resource shape)

SWFbutton->setHit

Синоним addShape (shape, SWFBUTTON_HIT)

void swfbutton->sethit (resource shape)

SWFbutton->addAction

Назначение кнопке действия

void swfbutton->addaction (resource action, integer flags)

Назначает обработчик событий кнопки (action - дескриптор объекта swfactionO) для следующих событий (flags): SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SUFBUTTON_MOUSEUP, SWFBuTTONJOUSEUPOuTSIDE, SWFBUTTON_ MOUSEDOWN, SWFBUnON_DRAGOUT и SWFBUTTON_DRAGOVER.

SWFbutton->setAction

Синоним addAction (shape, SWFBUTTON_MOUSEUP)

void swfbutton->setaction (resource action)

Назначает кнопке действие, выполняемое при нажатии.

SWFAction - объект Действие

Объект компилирует сценарий в действие.

Синтаксис сценариев подобен упрощенному синтаксису С. SWF code machine не позволяет многих вещей, например, достаточно сложно реализовать вызовы пользовательских функций.

Компилятор распознает следующие инструкции:

break;
for;
continue;
if;
el se;
do;
while.
Все данные не имеют типа; значения SWF-действий сохраняются как строки. Следующие функции могут использоваться в выражениях:

tirae() - возвращает число миллисекунд, прошедшее с начала проигрывания анимации;
randora(seed) - возвращает случайное число из диапазона (0-seed);
length(expr) - возвращает длину выражения;
int(number) - округление до ближайшего целого;
concat(expr, expr) - соединение строк;
ord(expr) - возвращает ASCII-код данного символа;
chr(num) - возвращает символ с указанным ASCII-кодом;
substr(stnng, location, length) - возвращает часть строки string длиной length, начиная с позиции location.
Также могут быть использованы дополнительные команды:

duplicateClipCclip, name, depth) - дублирует клип (sprite), присваивая ему имя name и располагая на уровне depth;
removed ip(expr) - удаляет именованный клип анимации;
trace(expr) - записывает сообщение в журнал отладки (пока команда бесполезна);
startDragCtarget. lock, [left, top, right, bottom]) - начать перетаскивание объекта target. Аргумент lock определяет, блокировать ли мышь: 0 (нет) или 1 (да). Можно указать область, в которой осуществляется перетаскивание;
stopDrag() - прекратить перетаскивание;
callFrame(expr) - вызвать именованный кадр как функцию;
getURUurl, target, [method]) - загрузить данный url в именованную область target (имя кадра или зарезервированное значение «_level()» для замены текущей анимации или «_levell» для загрузки анимации поверх текущей). В необязательном аргументе можно указать метод отсылки: POST или GET для отсылки серверу , данных;
loadMovieCurl, target) - подобие предыдущей команды;
nextFrame() - перейти к следующему кадру;
prevFrame() - перейти к предыдущему кадру;
play() - начать проигрывание анимации;
stop() - закончить проигрывание анимации;
toggleQuality() - переключиться между низким и высоким качеством;
stopSounds() - прекратить проигрывание звуков;
gotoFrame(num) - перейти к кадру с указанным номером (нумерация начинается с 0);
gotoFrame(name) - перейти к именованному кадру;
setTarget(expr) - установить контекст действия;
frameLoaded(num) - может использоваться в условных и циклических конструкциях для проверки того, был ли уже загружен кадр с указанным номером. Можно использовать альтернативное выражение /:framesLoaded.
Клипы и анимации имеют следующие свойства:

х;
у;
xScale - масштаб по горизонтали;
yScale - масштаб по вертикали;
currentFrame - текущий кадр (только для чтения);
total Frames - общее число кадров (только для чтения);
alpha - уровень прозрачности;
visible - видимость (l=on, 0=off);
width - (только для чтения);
height - (только для чтения);
rotation - угол поворота;
target - (только для чтения);
framesLoaded - (только для чтения);
name;
dropTarget - (только для чтения);
url - (только для чтения);
highQuality - качество (1=высокое, 0=низкое);
focusRect;
soundBufTime.
Например, установить значение позиции спрайта можно выражением Bох.х = 100;. Поскольку Flash сохраняет все компоненты анимации в древовидной структуре (наподобие файловой системы Unix), начальный слеш указывает на массив объектов верхнего уровня; если спрайт box находится внутри спрайта biff, то выражение записывается так: box/biff.x = 100;.

Следующий пример перемещает красный квадрат по экрану.

<?php $s = new SWFShape():
$f = $s->addFill(Oxff. 0. 0);
Js->setRightFill($f):
$s->movePenTo(-500.-500):
$s->dravvLineTo(500. -500);
$s->drawLineTo(500.500):
$5->drawLineTo(-500.500):
$s->drawl_ineTo(-500.-500).
$p = new SWFSprite(); $1 = $p->add'.Ss):
$i->setDepth(l); $p->nextrrame().
for($P=0: $n<5; ++$n) {
$i->rotate(-15)- $p->nextFrame(). }
$m = new SWFMovie(); $m->setBackground
(Oxff. Oxff. Oxff): $m->setDimens->on(6000.4000).
$- - $m->add($p). $1->
<:etDepths.l). $i->movpTo(-600.2000):
$1->setName("box"):
Sm->add(new SUFActionC'/box x += 3;")):
$m->nextFrame():
$m->add(new SWFActionC" gotoFrame(()):
play(): ")): $m->nextFrame().
headert'Content-type: application/x-shockwave-flash'):
Sm-'0utput(): ?>

Приведенный ниже пример отслеживает перемещение мыши по экрану.

<?php
$m = new SWFMovie(): $ra->setRate(36.0);
$m->setDimension(]200 800): $m->setBackgrouncK(), 0. 0):
/* пустой спрайт для отслеживания х и у координат мыши */
$i = $m->add(new SWFSpriteO): $1->setName('mouse');
$m->add(new SWFActionC' startDrag('/mouse'. 1): ")):
// antialiasing можно выключить для квадратов.
$m->add(new SWFActionC' this quality = 0. ')):
$r = new SWFMorph() :/* morphing box */ $s = $r->getShapel():
$s->setLeftFill(Ss->addFill(Oxff. Oxff. Oxff)):
$s->movePenTo(-40. -40). Ss->drawLine(80. 0).
$s->drawLine(0. 80). $s->drawLine(-80. 0);
$s->drawl_me(0. -80): $s = $r->getShape2():
Ss->setLeftFill($s->addFill{OxOO. 0x00. 0x00)):
$s->movePenTo(-l. -1). .
$s->drawLine(2. 0): $s->drawLine(0. 2):
$s->drawLine(-2. 0). $s->drawl_ine(0. -2).
$box = new SWFSprite():
$box->add(new SWFActionC' stop(): ")):
$1 = $box->add($r) for($n=0; $n<-20: ++$n) {
$1->setRatio($n/20).
$box->nextFrame(): )
/* споайт контейнер позволяет многократно
использовать действие */
Scell - new SWFSpnteO: $1 - $cell->add($box):
$i->setNarne( 'box'):
$cell->add(new SWFActionC'
setTarget('box'):
/* x - родительская координата, i.e. (..) x */
dx = (/mouse x + randoni(6)-3 - . ,x)/5
dy = (/mouse.у + random(6)-3 - .. y)/5:
gotoFramednt(dx*dx + dy*dy)): ")):
$cell->nextFrame():
Scell->add(new SWFActionC' gotoFrame(O): playO; "));
Scell->nextFrame():
/* добавим ячейки в анимацию */ for($x-0: $x<12: ++$х)
{ for($y-0- $y<8: ++$у) { $i = $m->add($cell):
$i->moveTo(100*$x+50. 100*$у+50): } }
$in->nextrrane():
$m->add(new SWFAcbon'" qotoFrame(l): playO. ")):
heacter('Content-type, application/x shockwave-flash1):
$m->output(): ?>

Тот же сценарий, но с цветными шариками...

<?рhр $т - new SWFMovie():
$m->setDimension(11000. 8000):
$m->setBackground(OxOO. 0x00. 0x00):
$m >add(new SWFActionC' this.quality = 0
/frames.visible = 0: startDrag\'/mouse'. 1); ")):
// mouse tracking sprite $t nev. SWFSpnte():
$1 = $m->add($t): $1->setNdme('mouse'):
$g = new SWFGradientO $g->addEntry
(0. Oxff. Oxff. Oxff. Oxff). $g->addEntry
(0.1. Oxff. Oxff. Oxft. Oxff)' $g->addEntry
(0 5. Oxff. Oxff. Oxff. Ox5f): $g->addEntry
(1.0. Oxff. Oxff. Oxff. 0).
// gradient shape thing $ь - nev» SWFShape() .
$f - $s->addFill
($g. SWFFILL_RADiAL_GRADIENT):
$f->scaleTo(0.03): $s->setRightFni($f):
$5->movePenTo(-600. -600): $s->
drawLine(1200. 0): $s->drawLine
(0. 1200): $s->drawLine(-1200. 0):
$s->drawLine(0. -1200):
// need to make this a sprite so we
can multColor it $p = new SWFSprite():
$p->add($s): $p->nextFrame();
II put the shape in here, each frame
a different color Sq = new SWFSprite() :
$q->add(new SWFAction("gotoFrame(random
(7)+l). stop():")): $1 = $q->add($p);
$i->multColor(l.0. 1.0. 1.0): $q->nextFrame():
$i->multColor(1.0. 0.5. 0.5): $q->nextFrame().
$i->multColor(1.0. 0.75. 0.5): $q->nextFramef):
$i->multColor(1.0. 1.0. 0.5): $q->nextFrame():
$l->multColor(0.5. 1.0. 0.5): $q->nextFrame():
$i->multColor(0.5. 0.5. 1.0): $q->nextFrame():
$i->multfolor(1.0. 0.5. 1.0): $q->nextFrame().
// finally, this one contains the action code
$p = new SWFSpriteO: $1 = $p->add($q):
$i->setNameOframes'): $p->add(new SWFAction()
dx = (/:mousex-/:lastx)/3 + random(10)-5:
dy = (/:mousey-/:lasty)/3: x = /.mousex:
у = /:mousey; alpha = 100: ")):
$p->nextFrame(); $p->add(new SWFActionC
this.x = x: this у = у: this.alpha alpha:
x += dx: у += dy: dy +- 3; alpha -= 8; ")):
$p->nextFrame(). $p->add(new
SWFActlonC'prevFrame(): play():")):
$p->nextFrame(). Si = $m->add($p):
$1 ->setName('frames'): $m->nextFrame().
$m->add(new SWFActlonC1
lastx - mousex: lasty = mousey:
mousex - /mouse.x: mousey = /mouse.у: ++num:
if(num == 11) num = 1: removedip('char' & num):
duplicateClTp(/frames. 'char' & num. num): ")):
$m->nextFrame():
$m->add(new SWFActlonC'prevFrame(). play():")):
headert'Content-type:
application/x-shockwave-flash'): $m->output(): ?>

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

<?php /* спрайт с буквой в каждом кадре */
$р = new SWFSprite():
$р->add(new SWFAction("stop():")):
Schars - "abcdefghijklmnopqrstuvwxyz".
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"1234567890!l3|$^"&*()_+-=/[]{} ::..<>?'-";
$f = new SWFFont("_sans"):
for($n-0: $nremove($i); $t =
new SWFTextFieldO. $t->setFont($f).
$t->setHeight(240): $t->setBounds(600.240):
$t->align(SWFTEXTFIELD_ALIGN_CENTER):
$t->addString($c):
$т = $p->add($t); $p->labelFrame($c);
$p->nextFrame(): )
/* область нажатия для кнопки - кадр целиком */
Ss = new SWFShape():
is->setFillStyleO($s->addSolidFill(0. 0. 0. 0)).
;s->drawline(600. 0); :5->drawLine(0. 400).
Ss->drawLine(-600. 0); Ss->drawLine(0. -400):
/* кнопка проверяет нажатую клавишу и
переходи к соответствующему кадру */
5b = new SWFButton():
Sb->addShape($s. SWFBUTTON_HIT):
for($n=0; $naddAction(new SWFActionC'
setTargeK'/char');gotoFrame('$c');").
SWFBUTTON_KEYPRESS($c)):
$n = new SWFMovie(); Sm->setDimension(600.400):
S-. *= $m->add($p): Si->setName( 'char');
$i->moveTo(0.80), Sra->add($b)
heeder('Content-type: application/x-shockwave-flash'):
Sa->output(). ?>

Учебник по основам PHP   Теги:

Читать IT-новости в Telegram

Читайте также:

Графика, Flash, pdf

Shockwave Flash

Информационные технологии
Мы в соцсетях ✉