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£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(). ?>