SWFAction
(No version information available, might be only in CVS)
SWFAction — Classe SWFAction
Description
La synthaxe de script est basée sur le langage C mais avec beaucoup de différences - le bytcode SWF est simplifié pour ne faire que ce dont on a besoin. Actuellement, nous ne pouvons pas implémenter des appels à des fonctions sans d'affreux hacks car le bytecode a des valeurs de position codées en interne.
Que reste-t-il donc ? le compilateur reconnait les instances suivantes :
- break
- for
- continue
- if
- else
- do
- while
Il n'y a pas de données typées ; toutes les valeurs d'une action SWF sont stockées sous la forme de chaînes de caractères. Les fonctions suivantes peuvent être utilisées dans les expressions :
- time()
- Retourne le nombre de millisecondes effectuées depuis le début d'une vidéo.
- random(seed)
- Retourne le nombre pseudo-aléatoire dans la rangée 0-seed.
- length(expr)
- Retourne la longueur de l'expression donnée.
- int(number)
- Retourne le nombre donné arrondi au nombre inférieur.
- concat(expr, expr)
- Retourne la concaténation des expressions données.
- ord(expr)
- Retourne le code ASCII pour le caractère donné.
- chr(num)
- Retourne le caractère pour le code ASCII donné.
- substr(string, location, length)
- Retourne la sous chaîne de la longueur length à la position location de la chaîne string donnée.
De plus, les commandes suivantes peuvent être utilisées :
- duplicateClip(clip, name, depth)
- Duplique la vidéo nommée clip (aka sprite). La nouvelle vidéo a le nom name et est à la profondeur depth .
- removeClip(expr)
- Efface la vidéo fournie.
- trace(expr)
- Écrit l'expression donnée dans l'historique des traces.
- startDrag(target, lock, [left, top, right, bottom])
- Démarre le déplacement de la vidéo target . L'argument lock indique si l'on verrouille la sourie - utilisez 0 (FALSE) ou 1 (TRUE).
- stopDrag()
- Commence le déplacement.
- callFrame(expr)
- Appel la frame nommée, comme une fonction.
- getURL(url, target, [method])
- Charge l'URL donnée, dans la cible nommée. L'argument target correspond à la cible du document HTML (comme "_top" ou "_blank"). L'argument optionnel method peut être POST ou GET si vous voulez soumettre les variables au serveur.
- loadMovie(url, target)
- Charge l'URL donnée dans la cible nommée. L'argument target peut être le nom d'une frame, ou une des valeurs magiques : "_level0" (remplace la vidéo courante) ou "_level1" (charge la nouvelle vidéo au dessus de la vidéo courante).
- nextFrame()
- Se place sur la prochaine frame.
- prevFrame()
- Se place sur la dernière (ou, plutôt, précédente) frame.
- play()
- Commence à jouer la vidéo.
- stop()
- Arrête de jouer la vidéo.
- toggleQuality()
- Passe d'une qualité haute à basse, et inversement.
- stopSounds()
- Arrête de jouer tous les sons.
- gotoFrame(num)
- Se place sur la frame numéro num . Les numéros de frame commencent à 0.
- gotoFrame(name)
- Se place sur la frame nommée name .
- setTarget(expr)
- Définit le contexte de l'action.
Les vidéos ( aka sprites) ont des propriétés. Vous pouvez les lire, en définir quelques unes. Voici la liste :
- x
- y
- xScale
- yScale
- currentFrame - (lecuture seule)
- totalFrames - (lecuture seule)
- alpha - degré de transparence
- visible - 1=on, 0=off
- width - (lecuture seule)
- height - (lecuture seule)
- rotation
- target - (lecuture seule)
- framesLoaded - (lecuture seule)
- name
- dropTarget - (lecuture seule)
- url - (lecuture seule)
- highQuality - 1=high, 0=low
- focusRect
- soundBufTime
Class Members
Méthodes
Exemples
Cet exemple simple déplace un carré rouge dans la fenêtre.
Example#1 Exemple avec swfaction()
<?php
$s = new SWFShape();
$f = $s->addFill(0xff, 0, 0);
$s->setRightFill($f);
$s->movePenTo(-500, -500);
$s->drawLineTo(500, -500);
$s->drawLineTo(500, 500);
$s->drawLineTo(-500, 500);
$s->drawLineTo(-500, -500);
$p = new SWFSprite();
$i = $p->add($s);
$i->setDepth(1);
$p->nextFrame();
for ($n=0; $n<5; ++$n) {
$i->rotate(-15);
$p->nextFrame();
}
$m = new SWFMovie();
$m->setBackground(0xff, 0xff, 0xff);
$m->setDimension(6000, 4000);
$i = $m->add($p);
$i->setDepth(1);
$i->moveTo(-500,2000);
$i->setName("box");
$m->add(new SWFAction("/box.x += 3;"));
$m->nextFrame();
$m->add(new SWFAction("gotoFrame(0); play();"));
$m->nextFrame();
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
Cet exemple déplace la souris vers le bas à l'écran.
Example#2 Exemple avec swfaction()
<?php
$m = new SWFMovie();
$m->setRate(36.0);
$m->setDimension(1200, 800);
$m->setBackground(0, 0, 0);
$i = $m->add(new SWFSprite());
$i->setName('mouse');
$m->add(new SWFAction("
startDrag('/mouse', 1); /* '1' signifie le verrou du sprite à la souris */
"));
/* might as well turn off antialiasing, since these are just squares. */
$m->add(new SWFAction("
this.quality = 0;
"));
/* morphing box */
$r = new SWFMorph();
$s = $r->getShape1();
/* Note this is backwards from normal shapes. No idea why. */
$s->setLeftFill($s->addFill(0xff, 0xff, 0xff));
$s->movePenTo(-40, -40);
$s->drawLine(80, 0);
$s->drawLine(0, 80);
$s->drawLine(-80, 0);
$s->drawLine(0, -80);
$s = $r->getShape2();
$s->setLeftFill($s->addFill(0x00, 0x00, 0x00));
$s->movePenTo(-1, -1);
$s->drawLine(2, 0);
$s->drawLine(0, 2);
$s->drawLine(-2, 0);
$s->drawLine(0, -2);
/* sprite container for morphing box -
this is just a timeline w/ the box morphing */
$box = new SWFSprite();
$box->add(new SWFAction("
stop();
"));
$i = $box->add($r);
for ($n=0; $n<=20; ++$n) {
$i->setRatio($n/20);
$box->nextFrame();
}
/* this container sprite allows us to use the same action code many times */
$cell = new SWFSprite();
$i = $cell->add($box);
$i->setName('box');
$cell->add(new SWFAction("
setTarget('box');
/* ...x means the x coordinate of the parent, i.e. (..).x */
dx = (/mouse.x + random(6)-3 - ...x)/5;
dy = (/mouse.y + random(6)-3 - ...y)/5;
gotoFrame(int(dx*dx + dy*dy));
"));
$cell->nextFrame();
$cell->add(new SWFAction("
gotoFrame(0);
play();
"));
$cell->nextFrame();
/* finally, add a bunch of the cells to the movie */
for ($x=0; $x<12; ++$x) {
for ($y=0; $y<8; ++$y) {
$i = $m->add($cell);
$i->moveTo(100*$x+50, 100*$y+50);
}
}
$m->nextFrame();
$m->add(new SWFAction("
gotoFrame(1);
play();
"));
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
Identique à ce qui précède, mais avec des balles colorées.
Example#3 Exemple avec swfaction()
<?php
$m = new SWFMovie();
$m->setDimension(11000, 8000);
$m->setBackground(0x00, 0x00, 0x00);
$m->add(new SWFAction("
this.quality = 0;
/frames.visible = 0;
startDrag('/mouse', 1);
"));
// mouse tracking sprite
$t = new SWFSprite();
$i = $m->add($t);
$i->setName('mouse');
$g = new SWFGradient();
$g->addEntry(0, 0xff, 0xff, 0xff, 0xff);
$g->addEntry(0.1, 0xff, 0xff, 0xff, 0xff);
$g->addEntry(0.5, 0xff, 0xff, 0xff, 0x5f);
$g->addEntry(1.0, 0xff, 0xff, 0xff, 0);
// gradient shape thing
$s = new SWFShape();
$f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT);
$f->scaleTo(0.03);
$s->setRightFill($f);
$s->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();
// put the shape in here, each frame a different color
$q = new SWFSprite();
$q->add(new SWFAction("gotoFrame(random(7)+1); stop();"));
$i = $q->add($p);
$i->multColor(1.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->nextFrame();
$i->multColor(1.0, 1.0, 0.5);
$q->nextFrame();
$i->multColor(0.5, 1.0, 0.5);
$q->nextFrame();
$i->multColor(0.5, 0.5, 1.0);
$q->nextFrame();
$i->multColor(1.0, 0.5, 1.0);
$q->nextFrame();
// finally, this one contains the action code
$p = new SWFSprite();
$i = $p->add($q);
$i->setName('frames');
$p->add(new SWFAction("
dx = (/:mousex-/:lastx)/3 + random(10)-5;
dy = (/:mousey-/:lasty)/3;
x = /:mousex;
y = /:mousey;
alpha = 100;
"));
$p->nextFrame();
$p->add(new SWFAction("
this.x = x;
this.y = y;
this.alpha = alpha;
x += dx;
y += dy;
dy += 3;
alpha -= 8;
"));
$p->nextFrame();
$p->add(new SWFAction("prevFrame(); play();"));
$p->nextFrame();
$i = $m->add($p);
$i->setName('frames');
$m->nextFrame();
$m->add(new SWFAction("
lastx = mousex;
lasty = mousey;
mousex = /mouse.x;
mousey = /mouse.y;
++num;
if (num == 11)
num = 1;
removeClip('char' & num);
duplicateClip(/frames, 'char' & num, num);
"));
$m->nextFrame();
$m->add(new SWFAction("prevFrame(); play();"));
header('Content-type: application/x-shockwave-flash');
$m->output();
?>