7.59 Ming pour Flash 
7 Index des fonctions 
 Manuel PHP 
 . Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes prédefinies . Classes prédefinies . ming_setcubicthreshold . ming_setscale . ming_useswfversion ->swfaction . swfbitmap->getheight . swfbitmap->getwidth . swfbitmap . swfbutton_keypress . swfbutton->addaction . swfbutton->addshape . swfbutton->setaction . swfbutton->setdown . swfbutton->sethit . swfbutton->setover . swfbutton->setup . swfbutton . swfdisplayitem->addcolor . swfdisplayitem->move . swfdisplayitem->moveto . swfdisplayitem->multcolor . swfdisplayitem->remove . swfdisplayitem->rotate . swfdisplayitem->rotateto . swfdisplayitem->scale . swfdisplayitem->scaleto . swfdisplayitem->setdepth . swfdisplayitem->setname . swfdisplayitem->setratio . swfdisplayitem->skewx . swfdisplayitem->skewxto . swfdisplayitem->skewy . swfdisplayitem->skewyto . swfdisplayitem . swffill->moveto . swffill->rotateto . swffill->scaleto . swffill->skewxto . swffill->skewyto . swffill . swffont->getwidth . swffont . swfgradient->addentry . swfgradient . swfmorph->getshape1 . swfmorph->getshape2 . swfmorph . swfmovie->add . swfmovie->nextframe . swfmovie->output . swfmovie->remove . swfmovie->save . swfmovie->setbackground . swfmovie->setdimension . swfmovie->setframes . swfmovie->setrate . swfmovie->streammp3 . swfmovie . swfshape->addfill . swfshape->drawcurve . swfshape->drawcurveto . swfshape->drawline . swfshape->drawlineto . swfshape->movepen . swfshape->movepento . swfshape->setleftfill . swfshape->setline . swfshape->setrightfill . swfshape . swfsprite->add . swfsprite->nextframe . swfsprite->remove . swfsprite->setframes . swfsprite . swftext->addstring . swftext->getwidth . swftext->moveto . swftext->setcolor . swftext->setfont . swftext->setheight . swftext->setspacing . swftext . swftextfield->addstring . swftextfield->align . swftextfield->setbounds . swftextfield->setcolor . swftextfield->setfont . swftextfield->setheight . swftextfield->setindentation . swftextfield->setleftmargin . swftextfield->setlinespacing . swftextfield->setmargins . swftextfield->setname . swftextfield->setrightmargin . swftextfield
 
  | 
 
  7.59.11 swfaction()Crée une nouvelle action[ Exemples avec swfaction ]   PHP 4 >= 4.0.5 
new
 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 il 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 de d'historique.
	     Il est peut probable que le navigateur ou le lecteur ne fasse
	     quoi que ce soit avec.
	    
 
 
- startDrag(target, lock, [left, top, right, bottom])
 
- 
	     Comment à 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 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). L'argument optionnel method peut être post ou get, si vous
	     voulez envoyer des variables au serveur.
	    
 
 
- loadMovie(url, target)
 
- 
	     La même chose que ci-dessus, plus ou moins. En fait, je ne sais pas
	     trop quelle est la différence.
	    
 
 
- 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
     utilise 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'il est
     supposé faire, mais je ne l'ai jamais testé, 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 signifie abscisse du parent, c'est-à-dire (..).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; $y8; ++$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();
 
 |   
     Cet exemple simple gère le clavier (vous devrez cependant
     cliquer dans la fenêtre pour lui donner le focus, et vous
     devrez aussi laisser votre souris dans la fenêtre. Si vous
     savez comment faire cela automatiquement, dites-le moi!).
      
 | Exemple avec swfaction |  
<?php   /* Le sprite n'a qu'une lettre par image */   $p = new SWFSprite();   $p->add(new SWFAction("stop();"));   $chars = "abcdefghijklmnopqrstuvwxyz".        "ABCDEFGHIJKLMNOPQRSTUVWXYZ".            "1234567890!@#$%^&*()_+-=/[]{}|;:,.<>?`~";   $f = new SWFFont("_sans");   for($n=0; $nremove($i);     $t = new SWFTextField();     $t->setFont($f);     $t->setHeight(240);     $t->setBounds(600,240);     $t->align(SWFTEXTFIELD_ALIGN_CENTER);     $t->addString($c);     $i = $p->add($t);     $p->labelFrame($c);     $p->nextFrame();   }   /* région de clic pour le bouton : toute la fenêtre */   $s = new SWFShape();   $s->setFillStyle0($s->addSolidFill(0, 0, 0, 0));   $s->drawLine(600, 0);   $s->drawLine(0, 400);   $s->drawLine(-600, 0);   $s->drawLine(0, -400);   /* le bouton s'assure des touches pressées, et envoie le bon      sprite à l'image de droite */   $b = new SWFButton();   $b->addShape($s, SWFBUTTON_HIT);   for($n=0; $naddAction(new SWFAction(" setTarget('/char'); gotoFrame('$c');     "), SWFBUTTON_KEYPRESS($c));   }   $m = new SWFMovie();   $m->setDimension(600,400);   $i = $m->add($p);   $i->setName('char');   $i->moveTo(0,80);   $m->add($b);   header('Content-type: application/x-shockwave-flash');   $m->output();
 
 |   
 |