ming_useswfversion
<<<
SWFAction SWFBitmap->getHeight
>>>

6.21 Ming pour Flash
6 Référence des fonctions
 Manuel PHP

Introduction
Pré-requis
Installation
Configuration à l'exécution
Types de ressources
Constantes pré-définies
Classes pré-définies
ming_keypress
ming_setcubicthreshold
ming_setscale
ming_useConstants
ming_useswfversion
->SWFAction
SWFBitmap->getHeight
SWFBitmap->getWidth
SWFBitmap
SWFbutton->addAction
SWFButton::addASound
SWFbutton->addShape
SWFbutton->setAction
SWFbutton->setdown
SWFbutton->setHit
SWFButton::setMenu
SWFbutton->setOver
SWFbutton->setUp
SWFbutton
SWFDisplayItem::addAction
SWFDisplayItem->addColor
SWFDisplayItem::endMask
SWFDisplayItem::getRot
SWFDisplayItem::getX
SWFDisplayItem::getXScale
SWFDisplayItem::getXSkew
SWFDisplayItem::getY
SWFDisplayItem::getYScale
SWFDisplayItem::getYSkew
SWFDisplayItem->move
SWFDisplayItem->moveTo
SWFDisplayItem->multColor
SWFDisplayItem->remove
SWFDisplayItem->Rotate
SWFDisplayItem->rotateTo
SWFDisplayItem->scale
SWFDisplayItem->scaleTo
SWFDisplayItem->setDepth
SWFDisplayItem::setMaskLevel
SWFDisplayItem::setMatrix
SWFDisplayItem->setName
SWFDisplayItem->setRatio
SWFDisplayItem->skewX
SWFDisplayItem->skewXTo
SWFDisplayItem->skewY
SWFDisplayItem->skewYTo
SWFFill->moveTo
SWFFill->rotateTo
SWFFill->scaleTo
SWFFill->skewXTo
SWFFill->skewYTo
SWFFill
SWFFont::getAscent
SWFFont::getDescent
SWFFont::getLeading
SWFFont::getShape
SWFFont::getUTF8Width
swffont->getwidth
SWFFont
SWFFontChar::addChars
SWFFontChar::addUTF8Chars
SWFGradient->addEntry
SWFGradient
SWFMorph->getshape1
SWFMorph->getshape2
SWFMorph
SWFMovie->add
SWFMovie::addExport
SWFMovie::addFont
SWFMovie::importChar
SWFMovie::importFont
SWFMovie::labelFrame
SWFMovie->nextframe
SWFMovie->output
swfmovie->remove
SWFMovie->save
SWFMovie::saveToFile
SWFMovie->setbackground
SWFMovie->setdimension
SWFMovie->setframes
SWFMovie->setrate
SWFMovie::startSound
SWFMovie::stopSound
SWFMovie->streammp3
SWFMovie::writeExports
SWFMovie
SWFPrebuiltClip
SWFShape->addFill
SWFShape::drawArc
SWFShape::drawCircle
SWFShape::drawCubic
SWFShape::drawCubicTo
SWFShape->drawCurve
SWFShape->drawCurveTo
SWFShape::drawGlyph
SWFShape->drawLine
SWFShape->drawLineTo
SWFShape->movePen
SWFShape->movePenTo
SWFShape->setLeftFill
SWFShape->setLine
SWFShape->setRightFill
SWFShape
SWFSound
SWFSoundInstance::loopCount
SWFSoundInstance::loopInPoint
SWFSoundInstance::loopOutPoint
SWFSoundInstance::noMultiple
swfsprite->add
SWFSprite::labelFrame
SWFSprite->nextframe
SWFSprite->remove
SWFSprite->setframes
SWFSprite::startSound
SWFSprite::stopSound
SWFSprite
SWFText->addString
SWFText::addUTF8String
SWFText::getAscent
SWFText::getDescent
SWFText::getLeading
SWFText::getUTF8Width
SWFText->getWidth
SWFText->moveTo
SWFText->setColor
SWFText->setFont
SWFText->setHeight
SWFText->setSpacing
SWFText
SWFTextField::addChars
SWFTextField->addstring
SWFTextField->align
SWFTextField->setbounds
SWFTextField->setcolor
SWFTextField->setFont
SWFTextField->setHeight
SWFTextField->setindentation
SWFTextField->setLeftMargin
SWFTextField->setLineSpacing
SWFTextField->setMargins
SWFTextField->setname
SWFTextField::setPadding
SWFTextField->setrightMargin
SWFTextField
SWFVideoStream::getNumFrames
SWFVideoStream::setDimension
SWFVideoStream

6.21.13 SWFAction()Crée une nouvelle action

[ Exemples avec swfaction ]   PHP 4 >= 4.0.5

SWFAction  swfaction ( string   script )
Attention

Cette fonction est EXPERIMENTALE . Cela signifie que le comportement de cette fonction, son nom et concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.

SWFAction crée une nouvelle action et compile le script script .

La syntaxe du script est basée sur le langage C, mais celui-ci utilise aussi beaucoup de notions propres à SWF : le bytecode SWF est trop simpliste pour faire l'essentiel de ce que l'on veut. Par exemple, il n'est pas possible de faire des fonctions sans descendre profondément dans les entrailles de la machine, car le bytecode de saut est écrit en dur. Pas moyen de pousser une adresse dans la pile, ou de dépiler - Chaque fonction doit savoir exactement où elle retourne.

Alors, que reste-t-il ? Le compilateur reconnaît les mots suivants :

  • break
  • for
  • continue
  • if
  • else
  • do
  • while

Il n'y a pas de type de données : toutes les valeurs de SWF sont stockées comme des chaînes de caractères. Les fonctions suivantes peuvent être utilisées dans les expressions :

    time()
    Retourne le nombre de milli-secondes depuis le début de l'animation.
    random(seed)
    Retourne un nombre pseudo-aléatoire, entre 0 et seed.
    length(expr)
    Retourne la taille de l'expression donnée.
    int(number)
    Retourne le nombre number, arrondi à l'entier inférieur le plus proche.
    concat(expr, expr)
    Retourne la concaténation des deux expressions.
    ord(expr)
    Retourne le code ASCII du caractère expr.
    chr(num)
    Retourne le caractère pour le code ASCII num.
    substr(string, location, length)
    Retourne la sous-chaîne, extraite de string , de longueur length et commençant au caractère location .

De plus, les commandes suivantes sont accessibles :

    duplicateClip(clip, name, depth)
    Duplique le sprite nommé clip . La nouvelle animation a le nouveau nom name et la profondeur depth .
    removeClip(expr)
    Supprime l'animation nommée expr.
    trace(expr)
    Ecrit l'expression expr dans le fichier d'historique. Il est peut probable que le navigateur ou le lecteur fasse quoi que ce soit avec.
    startDrag(target, lock, [left, top, right, bottom])
    Commence à déplacer l'animation target . L'argument lock indique si le déplacement verrouille la souris (utilisez 0, FALSE ) ou 1 ( TRUE )). Les paramètres optionnels délimitent la zone de déplacement.
    stopDrag()
    Cesse le déplacement de l'animation.
    callFrame(expr)
    Appelle l'image expr comme une fonction.
    getURL(url, target, [method])
    Charge l'URL url dans l'objet target. target correspond à l'élément target du document HTML (comme "_top" ou "_blank"). L'argument optionnel method peut être POST ou GET, si vous voulez envoyer des variables au serveur.
    loadMovie(url, target)
    Charge l'URL url dans l'objet target. target peut être l'image courante (je pense) ou une des valeurs magiques "_level0" (remplace l'animation courante) ou "_level1" (charge une nouvelle animation à la place de la courante).
    nextFrame()
    Va à l'image suivante.
    prevFrame()
    Va à l'image précédente.
    play()
    Joue l'animation.
    stop()
    Cesse de jouer l'animation.
    toggleQuality()
    Passe de haute en basse qualité (et vice-versa).
    stopSounds()
    Cesse de jouer les sons.
    gotoFrame(num)
    Va à l'image numéro num . Les images sont numérotées à partir de 0.
    gotoFrame(name)
    Va à l'image nommée name . Ce qui est carrément cool, car les labels ne sont pas encore supportés pour les images.
    setTarget(expr)
    Modifie le contexte de l'action. C'est ce qu'ils disent, mais je n'ai pas trop d'idées là-dessus.
Et il y a un truc bizarre : l'expression frameLoaded(num) peut être utilisée dans les conditions if et dans les boucles while pour vérifier si une image a été chargée. En tous cas, c'est ce qu'elle est supposé faire, mais je ne l'ai jamais testée, et je doute sérieusement que cela fonctionne. Vous pouvez utiliser plutôt /:framesLoaded à la place.

Les sprites ont des propriétés. Vous pouvez les lire toutes (vraiment?), en modifier quelques-unes. Les voici :

  • x
  • y
  • xScale
  • yScale
  • currentFrame - (lecture seule)
  • totalFrames - (lecture seule)
  • alpha - Niveau de transparence
  • visible - 1=on, 0=off (?)
  • width - (lecture seule)
  • height - (lecture seule)
  • rotation
  • target - (lecture seule) (???)
  • framesLoaded - (lecture seule)
  • name
  • dropTarget - (lecture seule) (???)
  • url - (lecture seule) (???)
  • highQuality - 1=high, 0=low (?)
  • focusRect - (???)
  • soundBufTime - (???)
Modifier la position d'un sprite est aussi simple que /box.x = 100; . Pourquoi le slash initial ? C'est comme cela que Flash garde la trace des sprites dans les animations, un peu comme des fichiers sous Unix. Si le sprite qui s'appelle box a lui-même un autre sprite appelé biff, vous pouvez y accéder avec la commande /box/biff.x = 100; . En tous cas, ça marche pour moi. Corrigez-moi si c'est faux!.

Cet exemple simple va déplacer le gros carré rouge dans la fenêtre.
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 suit votre souris sur l'écran.
Exemple avec swfaction

<?php

$m
= new SWFMovie();
$m->setRate(36.0);
$m->setDimension(1200, 800);
$m->setBackground(0, 0, 0);

/* sprite de suivi de souris : vide, mais il suit la souris
  de manière à ce que nous connaissions ses coordonnées */

$i = $m->add(new SWFSprite());
$i->setName('mouse');

$m->add(new SWFAction("
  startDrag('/mouse', 1); /* '1' signifie verrouiller la souris */
"
));

/*  On peut tout simplement virer l'anti-aliasing, car il n'y a
  que des gros carrés, finalement */

$m->add(new SWFAction("
  this.quality = 0;
"
));

/* boîte de morphing */
$r = new SWFMorph();
$s = $r->getShape1();

/* Notez que ce n'est pas pratique pour les formes habituelles.
  Aucune idée de pourquoi */
$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 contenant la boîte de morphing -
    c'est juste un scénario avec une boîte de 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();
}

/* ce conteneur nous permet d'utiliser la même action plusieurs fois */

$cell = new SWFSprite();
$i = $cell->add($box);
$i->setName('box');

$cell->add(new SWFAction("

  setTarget('box');

  /* ...x représente les x coordonnées du 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();

/* finalement, ajoutons quelques cellules à l'animation */

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();
?>

La même chose que ci-dessus, mais en couleurs.
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);

"
));

// sprite de suivi de souris
$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
$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);

// on en fait un sprite pour utiliser la fonction multColor()
$p = new SWFSprite();
$p->add($s);
$p->nextFrame();

// Ajoute la forme ici, chaque forme dans une couleur différente
$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();

// Enfin, le code de l'action
$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();
?>

<< SWFAction >>
ming_useswfversion Ming pour Flash SWFBitmap->getHeight