dams Mon Apr 2 10:57:36 2001 EDT
Added files:
/phpdoc/fr/functions ming.xml
Log:
Translated in French.Should be translatable, but wait for another week .
Index: phpdoc/fr/functions/ming.xml
+++ phpdoc/fr/functions/ming.xml
<reference id="ref.ming">
<title>Fonctions Ming pour Flash</title>
<titleabbrev>Ming (Flash)</titleabbrev>
<partintro>
<sect1 id="ming.intro">
<title>Introduction</title>
<simpara>
Ming est une librairie open-source (LGPL) qui vous permet de
créer des animations au format Flash. Ming supporte toutes les
fonctionnalités de Flash 4 : les formes (shapes), les gradients,
les images bitmaps (JPEG et PNG), les morphing (transformations
d'une forme en une autre), les textes, actions, sprites (mini animations),
le streaming MP3 et les transformations de couleurs. Le seul ajout futur
est celui des événements sons.
</simpara>
<simpara>
Ming n'est pas un acronyme.
</simpara>
<simpara>
Notez que toutes les distances spécifiées (longeurs, distances,
tailles...) sont en "twips", c'est à dire 20 unités par pixels.
C'est plus ou moins arbitraire, car le lecteur Flash fait une
mise à l'échelle avec les valeurs qui lui sont fournis dans la
balise embed, ou la frame courante si la balise embed n'est pas
utilisée.
</simpara>
<simpara>
Ming propose de nombreux avantages par rapport à l'extension swf.
Vous pouvez utiliser Ming sur tous les OS où vous pouvez compiler
le code, tandis que swf est limité à Windows. Ming vous
évite
la déconcertante complexité du format SWF, en transformant les
éléments des animations en objets PHP. Enfin, Ming est toujours
en cours de développement et surveillé par son auteur : si vous
souhaitez une nouvelle fonctionnalité, dites le lui :
<ulink url="mailto:&email.ming;">&email.ming;</ulink>.
</simpara>
<simpara>
Ming et tous les objets cités ont été ajouté en PHP
4.0.5.
</simpara>
</sect1>
<sect1 id="ming.install">
<title>Installation</title>
<para>
Pour utiliser Ming avec PHP, vous devez d'abord installer la
librairy Ming. Le code source et les instructions d'installation
sont disponible sur la page d'accueil de Ming :
<ulink url="&url.ming;">&url.ming;</ulink>, avec des exemples
un tutorial et l'actualité Ming.
</para>
<para>
Téléchargez l'archive Ming. Décompressez la et allez dans
le dossier Ming. Faites "make", puis "make install".
</para>
<para>
Cela va compiler le fichier <filename>libming.so</filename> et
l'installer dans <filename>/usr/lib/</filename>, et copier
<filename>ming.h</filename> into <filename>/usr/include/</filename>.
Editez la ligne <literal>PREFIX=</literal> dans le fichier
<filename>Makefile</filename> pour indiquer votre dossier
d'installation.
</para>
<sect2 id="ming.install.php.unix">
<title>Compilation CGI avec PHP (Unix)</title>
<para>
<literallayout>
mkdir <phpdir>/ext/ming
cp php_ext/* <phpdir>/ext/ming
cd <phpdir>
./buildconf
./configure --with-ming <other config options>
Compilez et installez PHP comme d'habitude.
Redémarrez votre serveur web si nécessaire.
</literallayout>
</para>
</sect2>
<sect2 id="ming.install.php_module.unix">
<title>Compilation en module avec PHP (Unix)</title>
<para>
téléchargez <filename>php_ming.so.gz</filename>.
Décompressez le et copiez le dans votre dossier de modules
PHP (vous pouvez trouver votre dossier de module PHP
en utilisant la commande <command>php-config --extension-dir</command>).
Ensuite, ajoutez la ligne <literal>extension=php_ming.so</literal>
dans votre fichier <filename>php.ini</filename>, ou bien ajoutez
<literal>dl('php_ming.so');</literal> en haut de tous vos scripts
Ming.
</para>
</sect2>
</sect1>
<sect1 id="ming.use">
<title>Comment utiliser Ming</title>
<simpara>
Ming introduit 13 objet en PHP. Pour les utilisez, vous devez être
familez avec les <link linkend="language.oop">objets</link>.
</simpara>
<itemizedlist>
<listitem>
<simpara>
<function>swfmovie</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfshape</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfdisplayitem</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfgradient</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfbitmap</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swffill</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfmorph</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swftext</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swffont</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swftextfield</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfsprite</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfbutton</function>.
</simpara>
</listitem>
<listitem>
<simpara>
<function>swfaction</function>.
</simpara>
</listitem>
</itemizedlist>
</sect1>
</partintro>
<!-- SWFMovie -->
<refentry id="function.swfmovie">
<refnamediv>
<refname>SWFMovie</refname>
<refpurpose>Crée un objet 'animation'.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfmovie</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie</function> Crée un objet 'animation',
représentant une animation Flash version 4.
</para>
<simpara>
SWFMovie a les méthodes suivantes :
<function>swfmovie->output</function>,<function>swfmovie->save</function>,
<function>swfmovie->add</function>, <function>swfmovie->remove</function>,
<function>swfmovie->nextframe</function>,
<function>swfmovie->setbackground</function>,
<function>swfmovie->setrate</function>,
<function>swfmovie->setdimension</function>,
<function>swfmovie->setframes</function> et
<function>swfmovie->streammp3</function>.
</simpara>
<simpara>
Des exemples d'utilisation dans :
<function>swfdisplayitem->rotateto</function>,
<function>swfshape->setline</function>,
<function>swfshape->addfill</function>... En fait, tous les exemples
utilisent cet objet.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfmovie.output">
<refnamediv>
<refname>SWFMovie->output</refname>
<refpurpose>Envoie votre animation au navigateur.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->output</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->output</function> envoie votre animation
au navigateur. En PHP, faîte le précéder de la fonction
<function>header</function>.
<programlisting role="php">
<?php
header('Content-type: application/x-shockwave-flash');
?>
</programlisting>
Cela indique au navigateur que l'animation qui arrive est en
Flash.
</para>
<simpara>
Voir aussi
<function>swfmovie->save</function>.
</simpara>
<simpara>
Des exemples d'utilisation dans :
<function>swfmovie->streammp3</function>,
<function>swfdisplayitem->rotateto</function>,
<function>swfaction</function>...
En fait, tous les exemples utilisent cette méthode.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfmovie.save">
<refnamediv>
<refname>SWFMovie->save</refname>
<refpurpose>Sauve dans un fichier.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->save</function></funcdef>
<paramdef>string <parameter>filename</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->save</function> sauve votre animation dans
le fichier <parameter>filename</parameter>.
</para>
<simpara>
Voir aussi
<function>swfmovie->output</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfmovie.add">
<refnamediv>
<refname>SWFMovie->add</refname>
<refpurpose>Ajoute un objet dans une animation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->add</function></funcdef>
<paramdef>ressource <parameter>instance</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->add</function> ajoute l'objet <parameter>instance</parameter>
dans l'animation courante. <parameter>instance</parameter> peut être de
n'importe quel type : forme (shape), texte (text), police (font)... etc.
Ils doivent être ajouté à une animation pour être
utilisé.
</para>
<para>
Pour les objets affichables (formes, textes, boutons, sprites),
<function>swfmovie->add</function> retourne un objet
<function>swfdisplayitem</function> de la liste d'affichage. Ainsi,
vous pouvez ajouter la même forme plusieurs fois dans la même
animation, et obtenir des ressources différentes pour chaque
instance.
</para>
<simpara>
Voir aussi tous les autres objets et <function>swfmovie->remove</function>
</simpara>
<simpara>
Des exemples d'utilisation dans :
<function>swfdisplayitem->rotateto</function> et
<function>swfshape->addfill</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfmovie.remove">
<refnamediv>
<refname>SWFMovie->remove</refname>
<refpurpose>Supprime un objet d'une animation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->remove</function></funcdef>
<paramdef>ressource <parameter>instance</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->remove</function> supprime l'objet
<parameter>instance</parameter> de la liste d'affichage, pour
l'animation courante. L'objet ne sera plus disponible pour
être affiché ou utilisé.
</para>
<simpara>
Voir aussi
<function>swfmovie->add</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfmovie.setbackground">
<refnamediv>
<refname>SWFMovie->setbackground</refname>
<refpurpose>Modifie la couleur de fond.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->setbackground</function></funcdef>
<paramdef>int <parameter>red</parameter></paramdef>
<paramdef>int <parameter>green</parameter></paramdef>
<paramdef>int <parameter>blue</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->setbackground</function> modifie la couleur de fond.
Pourquoi est-ce que cette fonction n'accepte pas de canal alpha?
(réflechissez quelques instants :-) ). En fait, cela ne serait pas si
stupide : vous pouvez laisser apercevoir le fond HTML à travers
l'animation.
Il y a un moyen de faire cela, mais cela ne fonctionne qu'avec IE 4.
Recherchez sur le site de <ulink url="&url.macromedia;">&url.macromedia;</ulink>
pour plus de détails.
</para>
</refsect1>
</refentry>
<refentry id="function.swfmovie.setrate">
<refnamediv>
<refname>SWFMovie->setrate</refname>
<refpurpose>Modifie la vitesse de l'animation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->setrate</function></funcdef>
<paramdef>int <parameter>rate</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->setrate</function> fixe la vitesse de l'animation
à <parameter>rate</parameter> images par secondes. L'animation ralentira
d'elle-même si le lecteur Flash ne peut pas afficher suffisament rapidement,
à moins qu'il n'y ait du son en stream, auquel cas les images sont
sacrifiées
pour garder un son fluide.
</para>
</refsect1>
</refentry>
<refentry id="function.swfmovie.setdimension">
<refnamediv>
<refname>SWFMovie->setdimension</refname>
<refpurpose>Modifie les dimensions de l'animation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->setdimension</function></funcdef>
<paramdef>int <parameter>width</parameter></paramdef>
<paramdef>int <parameter>height</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->setdimension</function> modifie les dimensions de
l'animation : <parameter>width</parameter> est la largeur et
<parameter>height</parameter> la hauteur.
</para>
</refsect1>
</refentry>
<refentry id="function.swfmovie.setframes">
<refnamediv>
<refname>SWFMovie->setframes</refname>
<refpurpose>Modifie le nombre total d'images dans l'animation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->setframes</function></funcdef>
<paramdef>string <parameter>numberofframes</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->setframes</function> modifie le nombre total d'images
dans l'animation, et le fixe à <parameter>numberofframes</parameter>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfmovie.nextframe">
<refnamediv>
<refname>SWFMovie->nextframe</refname>
<refpurpose>Passe à l'image suivante.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->nextframe</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->setframes</function> passe à l'image suivante
de l'animation.
</para>
</refsect1>
</refentry>
<refentry id="function.swfmovie.streammp3">
<refnamediv>
<refname>SWFMovie->streammp3</refname>
<refpurpose>Envoie un fichier MP3 en streaming.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfmovie->streammp3</function></funcdef>
<paramdef>string <parameter>mp3FileName</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmovie->streammp3</function> envoie le fichier
MP3<parameter>mp3FileName</parameter> en stream audio.
<function>swfmovie->streammp3</function> n'est pas très robuste,
et se prend facilement les pieds dans le tapis (elle peut
éviter la balise initiale ID3, mais c'est bien tout).
Tout comme swfshape->addjpegfill(), ce n'est pas
une fonction stable. Il faudra sûrement faire un objet
séparé, pour
gérer les types de son.
</para>
<para>
Notez que l'animation n'est pas suffisament intelligente pour
ajouter un nombre suffisant d'images, afin de correspondre à la
durée
totale du stream MP3. Il vous faudra ajouter des images jusqu'à
durée de la musique multiplié par le nombre d'images par secondes.
</para>
<para>
Oui, vous pouvez utiliser Ming pour mettre un rock-'n-roll endiablé
dans vos animation. Evitez d'en parler à l'RIAA ou la SACEM.
<example>
<title>Exemple avec <function>swfmovie->streammp3</function></title>
<programlisting role="php">
<?php
$m = new SWFMovie();
$m->setRate(12.0);
$m->streamMp3("distortobass.mp3");
// utilisez vos propres MP3
// assurez vous des droits
// 11.85 secondes avec 12.0 images par secondes = 142 frames
$m->setFrames(142);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<!-- SWFDisplayItem -->
<refentry id="function.swfdisplayitem">
<refnamediv>
<refname>SWFDisplayItem</refname>
<refpurpose>Crée un nouvel objet d'affichage displayitem.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfdisplayitem</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem</function> crée un nouvel objet d'affichage
displayitem.
</para>
<para>
C'est là que toute l'animation prend vie. Une fois que vous avez
défini une
forme, un texte, un sprite ou un bouton, vous l'ajoutez à une animation,
puis
vous utilisez la resource retournée pour déplacer, étirer,
contracter, faire
tourner ou incliner la forme.
</para>
<simpara>
SWFDisplayItem a les méthodes suivantes :
<function>swfdisplayitem->move</function>,
<function>swfdisplayitem->moveto</function>,
<function>swfdisplayitem->scaleto</function>,
<function>swfdisplayitem->scale</function>,
<function>swfdisplayitem->rotate</function>,
<function>swfdisplayitem->rotateto</function>,
<function>swfdisplayitem->skewxto</function>,
<function>swfdisplayitem->skewx</function>,
<function>swfdisplayitem->skewyto</function>
<function>swfdisplayitem->skewyto</function>,
<function>swfdisplayitem->setdepth</function>
<function>swfdisplayitem->remove</function>,
<function>swfdisplayitem->setname</function>
<function>swfdisplayitem->setratio</function>,
<function>swfdisplayitem->addcolor</function>
et <function>swfdisplayitem->multcolor</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.moveto">
<refnamediv>
<refname>SWFDisplayItem->moveTo</refname>
<refpurpose>Déplace un objet en coordonnées globales.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->moveto</function></funcdef>
<paramdef>int <parameter>x</parameter></paramdef>
<paramdef>int <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->moveto</function> déplace la forme courante
jusqu'au point de coordonnées globales
(<parameter>x</parameter>,<parameter>y</parameter>).
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->move</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.move">
<refnamediv>
<refname>SWFDisplayItem->move</refname>
<refpurpose>Déplace un objet en coordonnées relatives.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->move</function></funcdef>
<paramdef>int <parameter>dx</parameter></paramdef>
<paramdef>int <parameter>dy</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->move</function> déplace la forme courante
de <parameter>dx</parameter> et <parameter>dy</parameter> unités, depuis
sa position courante.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->moveto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.scaleto">
<refnamediv>
<refname>SWFDisplayItem->scaleTo</refname>
<refpurpose>Etire un objet en coordonnées globales.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->scaleto</function></funcdef>
<paramdef>int <parameter>x</parameter></paramdef>
<paramdef>int <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->scaleto</function> étire un objet
jusqu'au dimensions (<parameter>x</parameter>,<parameter>y</parameter>).
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->scale</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.scale">
<refnamediv>
<refname>SWFDisplayItem->scale</refname>
<refpurpose>Etire un objet relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->scale</function></funcdef>
<paramdef>int <parameter>dx</parameter></paramdef>
<paramdef>int <parameter>dy</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->scale</function> étire un objet
de (<parameter>dx</parameter>,<parameter>dy</parameter>), à partir
de sa taille courante.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->scaleto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.rotateto">
<refnamediv>
<refname>SWFDisplayItem->rotateTo</refname>
<refpurpose>Tourne un objet en angle absolu.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->rotateto</function></funcdef>
<paramdef>double <parameter>degrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->rotateto</function> tourne l'objet jusqu'à
l'angle absolu<parameter>degrees</parameter>, en degrés.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<para>
Cet exemple amène trois chaînes tournoyantes depuis le fond de
l'écran. Plutôt sympa.
<example>
<title>Exemple avec <function>swfdisplayitem->rotateto</function></title>
<programlisting role="php">
<?php
$thetext = "ming!";
$f = new SWFFont("Bauhaus 93.fdb");
$m = new SWFMovie();
$m->setRate(24.0);
$m->setDimension(2400, 1600);
$m->setBackground(0xff, 0xff, 0xff);
// Les fonctions avec un nombre d'arguments sont vraiement une bonne idées.
// Sincèrement!
function text($r, $g, $b, $a, $rot, $x, $y, $scale, $string)
{
global $f, $m;
$t = new SWFText();
$t->setFont($f);
$t->setColor($r, $g, $b, $a);
$t->setHeight(960);
$t->moveTo(-($f->getWidth($string))/2, $f->getAscent()/2);
$t->addString($string);
// On peut ajouter des propriétés comme pour une variable PHP
standard
// tant que les noms ne sont pas déjà pris.
// e.g., vous ne pouvez pas utilisez $i->scale, car c'est une fonction.
$i = $m->add($t);
$i->x = $x;
$i->y = $y;
$i->rot = $rot;
$i->s = $scale;
$i->rotateTo($rot);
$i->scale($scale, $scale);
// mais les modification sont locales à une fonction, donc il faut
// retourner l'objet modifié. Pas pratique...
return $i;
}
function step($i)
{
$oldrot = $i->rot;
$i->rot = 19*$i->rot/20;
$i->x = (19*$i->x + 1200)/20;
$i->y = (19*$i->y + 800)/20;
$i->s = (19*$i->s + 1.0)/20;
$i->rotateTo($i->rot);
$i->scaleTo($i->s, $i->s);
$i->moveTo($i->x, $i->y);
return $i;
}
// Alors? Ca valait la peine, non?
$i1 = text(0xff, 0x33, 0x33, 0xff, 900, 1200, 800, 0.03, $thetext);
$i2 = text(0x00, 0x33, 0xff, 0x7f, -560, 1200, 800, 0.04, $thetext);
$i3 = text(0xff, 0xff, 0xff, 0x9f, 180, 1200, 800, 0.001, $thetext);
for($i=1; $i<=100; ++$i)
{
$i1 = step($i1);
$i2 = step($i2);
$i3 = step($i3);
$m->nextFrame();
}
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
<simpara>
Voir aussi
<function>swfdisplayitem->rotate</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.rotate">
<refnamediv>
<refname>SWFDisplayItem->Rotate</refname>
<refpurpose>Fait tourner une forme relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->rotate</function></funcdef>
<paramdef>double <parameter>ddegrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->rotate</function> fait tourner la forme
de <parameter>ddegrees</parameter> degrés, en plus de sa rotation
courante.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->rotateto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.skewxto">
<refnamediv>
<refname>SWFDisplayItem->skewXTo</refname>
<refpurpose>Incline suivant les X.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->skewxto</function></funcdef>
<paramdef>double <parameter>degrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->skewxto</function> modifie l'inclinaison
(x-skew) à <parameter>degrees</parameter>. Si
<parameter>degrees</parameter>
vaut 1.0, l'angle sera de 45�, en avant. S'il vaut plus, ce sera plus
penché, et s'il vaut moins, ce sera plus droit.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->skewx</function>,
<function>swfdisplayitem->skewy</function> and
<function>swfdisplayitem->skewyto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.skewx">
<refnamediv>
<refname>SWFDisplayItem->skewX</refname>
<refpurpose>Incline suivant les X relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->skewx</function></funcdef>
<paramdef>double <parameter>ddegrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->skewx</function> ajoute <parameter>ddegrees</parameter>
à l'inclinaison courante (x-skew).
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->skewx</function>,
<function>swfdisplayitem->skewy</function> and
<function>swfdisplayitem->skewyto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.skewyto">
<refnamediv>
<refname>SWFDisplayItem->skewYTo</refname>
<refpurpose>Incline suivant les Y.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->skewyto</function></funcdef>
<paramdef>double <parameter>degrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->skewyto</function> modifie l'inclinaison
(y-skew) à <parameter>degrees</parameter>. Si
<parameter>degrees</parameter>
vaut 1.0, l'angle sera de 45�, en haut. S'il vaut plus, ce sera plus
penché, et s'il vaut moins, ce sera plus droit.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->skewy</function>,
<function>swfdisplayitem->skewx</function> and
<function>swfdisplayitem->skewxto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.skewy">
<refnamediv>
<refname>SWFDisplayItem->skewY</refname>
<refpurpose>Incline suivant les Y relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->skewy</function></funcdef>
<paramdef>double <parameter>ddegrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->skewy</function> ajoute <parameter>ddegrees</parameter>
à l'inclinaison courante (y-skew).
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfdisplayitem->skewyto</function>,
<function>swfdisplayitem->skewx</function> and
<function>swfdisplayitem->skewxto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.setdepth">
<refnamediv>
<refname>SWFDisplayItem->setDepth</refname>
<refpurpose>Modifie la place en profondeur (z-order)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->setdepth</function></funcdef>
<paramdef>double <parameter>depth</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->rotate</function> place l'objet à
la profondeur <parameter>depth</parameter>. Par défaut, l'objet
est placé au niveau où il a été ajouté dans
l'animation. Les objets
les plus anciens sont placés tout en bas, et les nouveaux sont
superposés.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.remove">
<refnamediv>
<refname>SWFDisplayItem->remove</refname>
<refpurpose>Supprime un objet d'une animation</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->remove</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->remove</function> supprime cet objet de
la liste d'affichage.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<simpara>
Voir aussi
<function>swfmovie->add</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.setname">
<refnamediv>
<refname>SWFDisplayItem->setName</refname>
<refpurpose>Nomme un objet</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->setname</function></funcdef>
<paramdef>string <parameter>name</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->setname</function> donne à l'objet courant
le nom de <parameter>name</parameter>. Cela servira à repérer les
acteurs
d'un script d'action. Cela ne sert qu'avec les sprites.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.setratio">
<refnamediv>
<refname>SWFDisplayItem->setRatio</refname>
<refpurpose>Sets the object's ratio.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->setratio</function></funcdef>
<paramdef>double <parameter>ratio</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->setratio</function> modifie le ratio de l'objet,
et le fixe à <parameter>ratio</parameter>. Uniquement utile pour les
morphings.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<para>
Cet exemple simple effectue un morphing délicat de trois cercles
concentriques.
<example>
<title>Exemple <function>swfdisplayitem->setname</function></title>
<programlisting role="php">
<?php
$p = new SWFMorph();
$g = new SWFGradient();
$g->addEntry(0.0, 0, 0, 0);
$g->addEntry(0.16, 0xff, 0xff, 0xff);
$g->addEntry(0.32, 0, 0, 0);
$g->addEntry(0.48, 0xff, 0xff, 0xff);
$g->addEntry(0.64, 0, 0, 0);
$g->addEntry(0.80, 0xff, 0xff, 0xff);
$g->addEntry(1.00, 0, 0, 0);
$s = $p->getShape1();
$f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT);
$f->scaleTo(0.05);
$s->setLeftFill($f);
$s->movePenTo(-160, -120);
$s->drawLine(320, 0);
$s->drawLine(0, 240);
$s->drawLine(-320, 0);
$s->drawLine(0, -240);
$g = new SWFGradient();
$g->addEntry(0.0, 0, 0, 0);
$g->addEntry(0.16, 0xff, 0, 0);
$g->addEntry(0.32, 0, 0, 0);
$g->addEntry(0.48, 0, 0xff, 0);
$g->addEntry(0.64, 0, 0, 0);
$g->addEntry(0.80, 0, 0, 0xff);
$g->addEntry(1.00, 0, 0, 0);
$s = $p->getShape2();
$f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT);
$f->scaleTo(0.05);
$f->skewXTo(1.0);
$s->setLeftFill($f);
$s->movePenTo(-160, -120);
$s->drawLine(320, 0);
$s->drawLine(0, 240);
$s->drawLine(-320, 0);
$s->drawLine(0, -240);
$m = new SWFMovie();
$m->setDimension(320, 240);
$i = $m->add($p);
$i->moveTo(160, 120);
for($n=0; $n<=1.001; $n+=0.01)
{
$i->setRatio($n);
$m->nextFrame();
}
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.addcolor">
<refnamediv>
<refname>SWFDisplayItem->addColor</refname>
<refpurpose>Ajoute une couleur à une transoformation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->addcolor</function></funcdef>
<paramdef>integer <parameter><optional>red</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>green</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>blue</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->addcolor</function> ajoute une couleur à
la transformations courante. La couleur est donnée sous la forme
RGB.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfdisplayitem.multcolor">
<refnamediv>
<refname>SWFDisplayItem->multColor</refname>
<refpurpose>Multiplie la couleur de transformation.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfdisplayitem->multcolor</function></funcdef>
<paramdef>integer <parameter><optional>red</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>green</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>blue</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfdisplayitem->multcolor</function> multiplie la couleur de
transformation par les valeurs données.
</para>
<simpara>
L'objet peut être <function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function> ou
<function>swfsprite</function>. Il doit avoir été ajouté
à une animation
avec la fonction <function>swfmovie->add</function>.
</simpara>
<para>
Cet exemple simple modifie l'atmosphère de votre image, et
en fait une scène d'Halloween (utilisez un paysage ou une image claire
pour un meilleur effet)
<example>
<title>Exemple avec <function>swfdisplayitem->multcolor</function></title>
<programlisting role="php">
<?php
$b = new SWFBitmap("backyard.jpg");
// Utilisez une de vos images
$s = new SWFShape();
$s->setRightFill($s->addFill($b));
$s->drawLine($b->getWidth(), 0);
$s->drawLine(0, $b->getHeight());
$s->drawLine(-$b->getWidth(), 0);
$s->drawLine(0, -$b->getHeight());
$m = new SWFMovie();
$m->setDimension($b->getWidth(), $b->getHeight());
$i = $m->add($s);
for($n=0; $n<=20; ++$n)
{
$i->multColor(1.0-$n/10, 1.0, 1.0);
$i->addColor(0xff*$n/20, 0, 0);
$m->nextFrame();
}
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<!-- SWFShape -->
<refentry id="function.swfshape">
<refnamediv>
<refname>SWFShape</refname>
<refpurpose>Crée une nouvelle forme.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfshape</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfshape</function> crée une nouvelle forme.
</para>
<simpara>
SWFShape a les méthodes suivantes :
<function>swfshape->setline</function>,
<function>swfshape->addfill</function>,
<function>swfshape->setleftfill</function>,
<function>swfshape->setrightfill</function>,
<function>swfshape->movepento</function>,
<function>swfshape->movepen</function>,
<function>swfshape->drawlineto</function>,
<function>swfshape->drawline</function>,
<function>swfshape->drawcurveto</function>
et <function>swfshape->drawcurve</function>.
</simpara>
<para>
Ce exemple simple dessine un quadrant d'ellipse rouge.
<example>
<title>Exemple avec <function>swfshape</function></title>
<programlisting role="php">
<?php
$s = new SWFShape();
$s->setLine(40, 0x7f, 0, 0);
$s->setRightFill($s->addFill(0xff, 0, 0));
$s->movePenTo(200, 200);
$s->drawLineTo(6200, 200);
$s->drawLineTo(6200, 4600);
$s->drawCurveTo(200, 4600, 200, 200);
$m = new SWFMovie();
$m->setDimension(6400, 4800);
$m->setRate(12.0);
$m->add($s);
$m->nextFrame();
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfshape.setline">
<refnamediv>
<refname>SWFShape->setLine</refname>
<refpurpose>Modifie le style de ligne de la forme.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->setline</function></funcdef>
<paramdef>int <parameter>width</parameter></paramdef>
<paramdef>integer <parameter><optional>red</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>green</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>blue</optional></parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfshape->setline</function> modifie le style de ligne de la forme.
<parameter>width</parameter> est la largeur de la ligne. Si
<parameter>width</parameter> vaut 0, le style est supprimé (et tous les
autres arguments sont ignorés). Si <parameter>width</parameter> > 0,
alors la couleur de la ligne devient (<parameter>red</parameter>,
<parameter>green</parameter>, <parameter>blue</parameter>). Les couleurs
sonr représentées en RGB. Le dernier paramètre
<parameter>a</parameter> est optionnel.
</para>
<simpara>
<function>swfshape->setline</function> accepte 1, 4 ou 5 arguments
(mais jamais 3 ou 2).
</simpara>
<para>
Vous devez déclarer un style avant de l'utiliser (voir exemple).
</para>
<para>
Cet exemple enfantin dessine une chaîne "!#%*@", dans des couleurs
marrantes et un style rigolo.
<example>
<title>Exemple <function>swfshape->setline</function></title>
<programlisting role="php">
<?php
$s = new SWFShape();
$f1 = $s->addFill(0xff, 0, 0);
$f2 = $s->addFill(0xff, 0x7f, 0);
$f3 = $s->addFill(0xff, 0xff, 0);
$f4 = $s->addFill(0, 0xff, 0);
$f5 = $s->addFill(0, 0, 0xff);
// erreur : il faut déclarer tous les styles avant
// de les utiliser.
$s->setLine(40, 0x7f, 0, 0);
$s->setLine(40, 0x7f, 0x3f, 0);
$s->setLine(40, 0x7f, 0x7f, 0);
$s->setLine(40, 0, 0x7f, 0);
$s->setLine(40, 0, 0, 0x7f);
$f = new SWFFont('Techno.fdb');
$s->setRightFill($f1);
$s->setLine(40, 0x7f, 0, 0);
$s->drawGlyph($f, '!');
$s->movePen($f->getWidth('!'), 0);
$s->setRightFill($f2);
$s->setLine(40, 0x7f, 0x3f, 0);
$s->drawGlyph($f, '#');
$s->movePen($f->getWidth('#'), 0);
$s->setRightFill($f3);
$s->setLine(40, 0x7f, 0x7f, 0);
$s->drawGlyph($f, '%');
$s->movePen($f->getWidth('%'), 0);
$s->setRightFill($f4);
$s->setLine(40, 0, 0x7f, 0);
$s->drawGlyph($f, '*');
$s->movePen($f->getWidth('*'), 0);
$s->setRightFill($f5);
$s->setLine(40, 0, 0, 0x7f);
$s->drawGlyph($f, '@');
$m = new SWFMovie();
$m->setDimension(3000,2000);
$m->setRate(12.0);
$i = $m->add($s);
// note la chaine est ici!!!
$i->moveTo(1500-$f->getWidth("!#%*@")/2, 1000+$f->getAscent()/2);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfshape.addfill">
<refnamediv>
<refname>SWFShape->addFill</refname>
<refpurpose>Ajoute un remplissage plein à la forme.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->addfill</function></funcdef>
<paramdef>integer <parameter>red</parameter></paramdef>
<paramdef>integer <parameter>green</parameter></paramdef>
<paramdef>integer <parameter>blue</parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->addfill</function></funcdef>
<paramdef>SWFbitmap <parameter>bitmap</parameter></paramdef>
<paramdef>integer <parameter><optional>flags</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->addfill</function></funcdef>
<paramdef>SWFGradient <parameter>gradient</parameter></paramdef>
<paramdef>integer <parameter><optional>flags</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfshape->addfill</function> ajoute un remplissage plein à
la forme. <function>swfshape->addfill</function> accepte trois différents
types
d'arguments.
</para>
<para>
<parameter>red</parameter>, <parameter>green</parameter>,
<parameter>blue</parameter>
est une couleur (format RGB). Le dernier paramètre
<parameter>a</parameter>
est optionnel.
</para>
<para>
L'argument <parameter>bitmap</parameter> est un objet
<function>swfbitmap</function>. Le paramètre <parameter>flags</parameter>
peut être l'un des suivants : SWFFILL_CLIPPED_BITMAP ou
SWFFILL_TILED_BITMAP.
Par défault, c'est SWFFILL_TILED_BITMAP. Je crois.
</para>
<para>
L'argument <parameter>gradient</parameter> est un objet
<function>swfgradient</function>.
L'argument <parameter>flags</parameter> peut alors prendre
l'une des valeurs suivantes :
SWFFILL_RADIAL_GRADIENT ou SWFFILL_LINEAR_GRADIENT. Par défaut,
c'est SWFFILL_LINEAR_GRADIENT. Cette fois ci, j'en suis sûr.
</para>
<para>
<function>swfshape->addfill</function> retourne un objet
<function>swffill</function>
à utiliser avec <function>swfshape->setleftfill</function>,
et <function>swfshape->setrightfill</function> décrite un peu plus loin.
</para>
<simpara>
Voir aussi
<function>swfshape->setleftfill</function> et
<function>swfshape->setrightfill</function>.
</simpara>
<para>
Ceci est un exemple simple qui affiche un cadre sur une bitmap. Ah, il y a
un petit bug dans le lecteur Flash : il ne semble pas faire grand cas
de la transformation de la seconde forme en morphing. Suivant les specs,
la bitmap devrait s'étirer avec la forme dans cet exemple...
<example>
<title>Exemple avec <function>swfshape->addfill</function></title>
<programlisting role="php">
<?php
$p = new SWFMorph();
$b = new SWFBitmap("alphafill.jpg");
// utilisez vos propres bitmaps!
$width = $b->getWidth();
$height = $b->getHeight();
$s = $p->getShape1();
$f = $s->addFill($b, SWFFILL_TILED_BITMAP);
$f->moveTo(-$width/2, -$height/4);
$f->scaleTo(1.0, 0.5);
$s->setLeftFill($f);
$s->movePenTo(-$width/2, -$height/4);
$s->drawLine($width, 0);
$s->drawLine(0, $height/2);
$s->drawLine(-$width, 0);
$s->drawLine(0, -$height/2);
$s = $p->getShape2();
$f = $s->addFill($b, SWFFILL_TILED_BITMAP);
// ces déplacements n'ont aucun effet
$f->moveTo(-$width/4, -$height/2);
$f->scaleTo(0.5, 1.0);
$s->setLeftFill($f);
$s->movePenTo(-$width/4, -$height/2);
$s->drawLine($width/2, 0);
$s->drawLine(0, $height);
$s->drawLine(-$width/2, 0);
$s->drawLine(0, -$height);
$m = new SWFMovie();
$m->setDimension($width, $height);
$i = $m->add($p);
$i->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();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfshape.setleftfill">
<refnamediv>
<refname>SWFShape->setLeftFill</refname>
<refpurpose>Modifie la couleur de rastérisation de gauche.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->setleftfill</function></funcdef>
<paramdef>swfgradient <parameter>fill</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->setleftfill</function></funcdef>
<paramdef>integer <parameter>red</parameter></paramdef>
<paramdef>integer <parameter>green</parameter></paramdef>
<paramdef>integer <parameter>blue</parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
Tout ce sac de noeud fait qu'il y a deux couleurs de remplissage
des lignes. Lorsque l'objet est rasterisé, il est pratique de
savoir à l'avance quelle sont les remplissages, et le format
SWF les demande.
</para>
<para>
<function>swfshape->setleftfill</function> affecte à la couleur
de rastérisation de gauche, c'est à dire l'intérieur d'un
objet,
si vous définissez les contours d'un objet dans le sens inverse
des aiguilles d'une montre. L'objet de remplissage est un
objet <function>swffill</function>, retourné par la fonction
<function>swfshape->addfill</function> ci-dessus.
</para>
<para>
Cela semble être le contraire lorsque vous défnissez une forme
dans un morphing. Si votre navigateur crashe, essayez de placer
le remplissage sur l'autre coté.
</para>
<simpara>
Raccourci pour
<literal>swfshape->setleftfill($s->addfill($r, $g, $b [, $a]));</literal>.
</simpara>
<simpara>
Voir aussi
<function>swfshape->setrightfill</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.setrightfill">
<refnamediv>
<refname>SWFShape->setRightFill</refname>
<refpurpose>Sets right rasterizing color.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->setrightfill</function></funcdef>
<paramdef>swfgradient <parameter>fill</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->setrightfill</function></funcdef>
<paramdef>integer <parameter>red</parameter></paramdef>
<paramdef>integer <parameter>green</parameter></paramdef>
<paramdef>integer <parameter>blue</parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
Voir aussi
<function>swfshape->setleftfill</function>.
</simpara>
<simpara>
Raccourci pour
<literal>swfshape->setrightfill($s->addfill($r, $g, $b [, $a]));</literal>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.movepento">
<refnamediv>
<refname>SWFShape->movePenTo</refname>
<refpurpose>Déplace le stylo.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->movepento</function></funcdef>
<paramdef>integer <parameter>x</parameter></paramdef>
<paramdef>integer <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>swfshape->setrightfill</function> déplace le stylo dans la
forme jusqu'au coordonnées globales
(<parameter>x</parameter>,<parameter>y</parameter>).
</simpara>
<simpara>
Voir aussi
<function>swfshape->movepen</function>,
<function>swfshape->drawcurveto</function>,
<function>swfshape->drawlineto</function> et
<function>swfshape->drawline</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.movepen">
<refnamediv>
<refname>SWFShape->movePen</refname>
<refpurpose>Déplace le stylo relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->movepen</function></funcdef>
<paramdef>integer <parameter>dx</parameter></paramdef>
<paramdef>integer <parameter>dy</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>swfshape->setrightfill</function> déplace le stylo dans la
forme depuis les coordonnées (current x,current y) jusqu'au
coordonnées (current x + <parameter>dx</parameter>,
current y + <parameter>dy</parameter>), dans l'espace de coordonnées
de la forme.
</simpara>
<simpara>
Voir aussi
<function>swfshape->movepento</function>,
<function>swfshape->drawcurveto</function>,
<function>swfshape->drawlineto</function> et
<function>swfshape->drawline</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.drawlineto">
<refnamediv>
<refname>SWFShape->drawLineTo</refname>
<refpurpose>Dessine une ligne.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->drawlineto</function></funcdef>
<paramdef>integer <parameter>x</parameter></paramdef>
<paramdef>integer <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>swfshape->setrightfill</function> dessine une ligne
(avec le style courant de ligne, modifié par
<function>swfshape->setline</function>) depuis le point courant
jusqu'au point (<parameter>x</parameter>,<parameter>y</parameter>)
dans l'espace de coordonnées de la forme.
</simpara>
<simpara>
Voir aussi
<function>swfshape->movepento</function>,
<function>swfshape->drawcurveto</function>,
<function>swfshape->movepen</function> et
<function>swfshape->drawline</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.drawline">
<refnamediv>
<refname>SWFShape->drawLine</refname>
<refpurpose>Dessine une ligne relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->drawline</function></funcdef>
<paramdef>integer <parameter>dx</parameter></paramdef>
<paramdef>integer <parameter>dy</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>swfshape->setrightfill</function> dessine une ligne
(avec le style courant de ligne, modifié par
<function>swfshape->setline</function>) depuis le point courant,
et sur le déplacement de
(<parameter>dx</parameter>,<parameter>dy</parameter>).
</simpara>
<simpara>
Voir aussi
<function>swfshape->movepento</function>,
<function>swfshape->drawcurveto</function>,
<function>swfshape->movepen</function> et
<function>swfshape->drawlineto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.drawcurveto">
<refnamediv>
<refname>SWFShape->drawCurveTo</refname>
<refpurpose>Dessine une courbe.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->drawcurveto</function></funcdef>
<paramdef>integer <parameter>controlx</parameter></paramdef>
<paramdef>integer <parameter>controly</parameter></paramdef>
<paramdef>integer <parameter>anchorx</parameter></paramdef>
<paramdef>integer <parameter>anchory</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>swfshape->drawcurveto</function> dessine une courbe quadratique
(avec le style courant de ligne, modifié par
<function>swfshape->setline</function>) depuis le point courant
jusqu'au point (<parameter>anchorx</parameter>,<parameter>anchory</parameter>)
en utilisant (<parameter>controlx</parameter>,<parameter>controly</parameter>)
comme point de contrôle. C'est à dire qu'il commence en allant vers
le point
de contrôle, puis se dirigie sur le point d'ancrrage.
</simpara>
<simpara>
Voir aussi
<function>swfshape->drawlineto</function>,
<function>swfshape->drawline</function>,
<function>swfshape->movepento</function> et
<function>swfshape->movepen</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swfshape.drawcurve">
<refnamediv>
<refname>SWFShape->drawCurve</refname>
<refpurpose>Dessine une courbe relativement.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfshape->drawcurve</function></funcdef>
<paramdef>integer <parameter>controldx</parameter></paramdef>
<paramdef>integer <parameter>controldy</parameter></paramdef>
<paramdef>integer <parameter>anchordx</parameter></paramdef>
<paramdef>integer <parameter>anchordy</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<simpara>
<function>swfshape->drawcurve</function> dessine une courbe
quadratique (avec le style courant de ligne, modifié par
<function>swfshape->setline</function>) depuis le point courant
jusqu'au point (<parameter>anchordx</parameter>,<parameter>anchordy</parameter>)
relativement au point courant, et en utilisant le point de
contrôle
(<parameter>controldx</parameter>,<parameter>controldy</parameter>).
C'est à dire qu'il commence en allant vers le point
de contrôle, puis se dirigie sur le point d'ancrrage.
</simpara>
<simpara>
Voir aussi
<function>swfshape->drawlineto</function>,
<function>swfshape->drawline</function>,
<function>swfshape->movepento</function> et
<function>swfshape->movepen</function>.
</simpara>
</refsect1>
</refentry>
<!-- SWFGradient -->
<refentry id="function.swfgradient">
<refnamediv>
<refname>SWFGradient</refname>
<refpurpose>Crée un objet gradient</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfgradient</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfgradient</function> crée un nouvel objet gradient.
</para>
<simpara>
Une fois que vous avez ajouté les couleurs à votre gradient, vous
pouvez l'utiliser dans des formes, avec la fonction
<function>swfshape->addfill</function>.
</simpara>
<simpara>
SWFGradient a la méthode suivante :
<function>swfgradient->addentry</function>.
</simpara>
<para>
Cet exemple simple affiche un gradient noir-blanc comme fond,
et un gradient concentrique au centre.
<example>
<title>Exemple avec <function>swfgradient</function></title>
<programlisting role="php">
<?php
$m = new SWFMovie();
$m->setDimension(320, 240);
$s = new SWFShape();
// gradient noir-blanc
$g = new SWFGradient();
$g->addEntry(0.0, 0, 0, 0);
$g->addEntry(1.0, 0xff, 0xff, 0xff);
$f = $s->addFill($g, SWFFILL_LINEAR_GRADIENT);
$f->scaleTo(0.01);
$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);
$s = new SWFShape();
// gradient radial : rouge vers transparent
$g = new SWFGradient();
$g->addEntry(0.0, 0xff, 0, 0, 0xff);
$g->addEntry(1.0, 0xff, 0, 0, 0);
$f = $s->addFill($g, SWFFILL_RADIAL_GRADIENT);
$f->scaleTo(0.005);
$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();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfgradient.addentry">
<refnamediv>
<refname>SWFGradient->addEntry</refname>
<refpurpose>Ajoute une couleur à la liste du gradient.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfgradient->addentry</function></funcdef>
<paramdef>double <parameter>ratio</parameter></paramdef>
<paramdef>integer <parameter>red</parameter></paramdef>
<paramdef>integer <parameter>green</parameter></paramdef>
<paramdef>integer <parameter>blue</parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfgradient->addentry</function> ajoute une couleur à la liste
des couleurs du gradient. <parameter>ratio</parameter> est un nombre
de 0 à 1, qui indique l'ordre d'apparition des couleurs. Vous devez
ajouter les couleurs dans l'ordre croissant de ratio.
</para>
<para>
<parameter>red</parameter>, <parameter>green</parameter>,
<parameter>blue</parameter>
représente une couleur, au format RGB. Le dernier paramètre
<parameter>a</parameter> est optionnel.
</para>
</refsect1>
</refentry>
<!-- SWFBitmap -->
<refentry id="function.swfbitmap">
<refnamediv>
<refname>SWFBitmap</refname>
<refpurpose>Crée un objet bitmap</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfbitmap</function></funcdef>
<paramdef>string <parameter>filename</parameter></paramdef>
<paramdef>integer
<parameter><optional>alphafilename</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbitmap</function> crée un objet bitmap à partir d'un
fichier JPEG ou DBL, nommé <parameter>filename</parameter>.
<parameter>alphafilename</parameter> indique un fichier de masque à
utiliser comme canal alpha sur une image JPEG.
</para>
<note>
<para>
Seule les JPEG baseline (frame 0) sont supportés. Les baseline
optimisée
ou les JPEG progressives ne sont pas supportées.
</para>
</note>
<simpara>
SWFBitmap a les méthodes suivantes :
<function>swfbitmap->getwidth</function>
et <function>swfbitmap->getheight</function>.
</simpara>
<para>
Il n'est pas possible d'importer directement des images
PNG, il faut utiliser l'utilitaire de conversion
<filename>png2dbl</filename> pour en faire un fichier
.dbl ("define bits lossless"). La raison est que l'auteur ne
souhaite pas de dépendance avec la librairie PNG. Le fichier
d'autoconfiguration devrait régler ce problème, mais il n'est pas
encore fait.
<example>
<title>Importation de fichiers PNG sous Ming</title>
<programlisting role="php">
<?php
$s = new SWFShape();
$f = $s->addFill(new SWFBitmap("png.dbl"));
$s->setRightFill($f);
$s->drawLine(32, 0);
$s->drawLine(0, 32);
$s->drawLine(-32, 0);
$s->drawLine(0, -32);
$m = new SWFMovie();
$m->setDimension(32, 32);
$m->add($s);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
<para>
Et vous pouvez ajouter un masque alpha sur une image JPEG.
<example>
<title>Exemple avec <function>swfbitmap</function></title>
<programlisting role="php">
<?php
$s = new SWFShape();
//les fichiers .msk sont générés par l'utilitaire "gif2mask"
$f = $s->addFill(new SWFBitmap("alphafill.jpg", "alphafill.msk"));
$s->setRightFill($f);
$s->drawLine(640, 0);
$s->drawLine(0, 480);
$s->drawLine(-640, 0);
$s->drawLine(0, -480);
$c = new SWFShape();
$c->setRightFill($c->addFill(0x99, 0x99, 0x99));
$c->drawLine(40, 0);
$c->drawLine(0, 40);
$c->drawLine(-40, 0);
$c->drawLine(0, -40);
$m = new SWFMovie();
$m->setDimension(640, 480);
$m->setBackground(0xcc, 0xcc, 0xcc);
// décide un fond à damier
for($y=0; $y<480; $y+=40)
{
for($x=0; $x<640; $x+=80)
{
$i = $m->add($c);
$i->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: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfbitmap.getwidth">
<refnamediv>
<refname>SWFBitmap->getWidth</refname>
<refpurpose>Retourne la largeur d'une bitmap.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>swfbitmap->getwidth</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbitmap->getwidth</function> retourne la largeur d'une bitmap,
en pixels.
</para>
<para>
Voir aussi
<function>swfbitmap->getheight</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbitmap.getheight">
<refnamediv>
<refname>SWFBitmap->getHeight</refname>
<refpurpose>Retourne la hauteur d'une bitmap.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>swfbitmap->getheight</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbitmap->getheight</function> retourne la hauteur d'une bitmap,
en pixels.
</para>
<para>
Voir aussi
<function>swfbitmap->getwidth</function>.
</para>
</refsect1>
</refentry>
<!-- SWFFill -->
<refentry id="function.swffill">
<refnamediv>
<refname>SWFFill</refname>
<refpurpose>Crée un objet de remplissage</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
<function>swffill</function> vous permet de transformer
une image bitmap ou un gradient. Les objets <function>swffill</function>
sont créé par <function>swfshape->addfill</function>.
</para>
<simpara>
SWFFill a les méthodes suivantes :
<function>swffill->moveto</function>,<function>swffill->scaleto</function>,
<function>swffill->rotateto</function>,
<function>swffill->skewxto</function> et <function>swffill->skewyto</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swffill.moveto">
<refnamediv>
<refname>SWFFill->moveTo</refname>
<refpurpose>Moves fill origin</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swffill->moveto</function></funcdef>
<paramdef>integer <parameter>x</parameter></paramdef>
<paramdef>integer <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swffill->moveto</function> déplace l'origine de la forme
jusqu'au point de coordonnées globales
(<parameter>x</parameter>,<parameter>y</parameter>).
</para>
</refsect1>
</refentry>
<refentry id="function.swffill.scaleto">
<refnamediv>
<refname>SWFFill->scaleTo</refname>
<refpurpose>Modifie l'échelle de la forme</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swffill->scaleto</function></funcdef>
<paramdef>integer <parameter>x</parameter></paramdef>
<paramdef>integer <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swffill->scaleto</function> modifie l'échelle de
la forme de <parameter>x</parameter> dans le sens des
absisse et <parameter>y</parameter> dans le sens des
ordonnées.
</para>
</refsect1>
</refentry>
<refentry id="function.swffill.rotateto">
<refnamediv>
<refname>SWFFill->rotateTo</refname>
<refpurpose>Tourne la forme</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swffill->rotateto</function></funcdef>
<paramdef>double <parameter>degrees</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swffill->rotateto</function> tourne la forme depuis
sont orientation initiale jusqu'à un angle de
<parameter>degrees</parameter> degrés.
</para>
</refsect1>
</refentry>
<refentry id="function.swffill.skewxto">
<refnamediv>
<refname>SWFFill->skewXTo</refname>
<refpurpose>Incline (absisse)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swffill->skewxto</function></funcdef>
<paramdef>double <parameter>x</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swffill->skewxto</function> incline la forme de
<parameter>x</parameter> suivant l'axe des absisses. Si <parameter>x</parameter>
vaut 1.0,
l'inclinaison sera de 45� degrés, en avant. Si <parameter>x</parameter>
vaut plus, l'inclinaison sera plus forte, et sinon, la forme
sera plus droite.
</para>
</refsect1>
</refentry>
<refentry id="function.swffill.skewyto">
<refnamediv>
<refname>SWFFill->skewYTo</refname>
<refpurpose>Incline (ordonnées)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swffill->skewyto</function></funcdef>
<paramdef>double <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swffill->skewyto</function> incline la forme de
<parameter>y</parameter> suivant l'axe des absisses. Si <parameter>y</parameter>.
vaut 1.0, l'inclinaison sera de 45� degrés, en avant. Si
<parameter>x</parameter> vaut plus, l'inclinaison sera plus
forte, et sinon, la forme sera plus droite.
</para>
</refsect1>
</refentry>
<!-- SWFMorph -->
<refentry id="function.swfmorph">
<refnamediv>
<refname>SWFMorph</refname>
<refpurpose>Crée un morphing.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfmorph</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmorph</function> crée un morphing.
</para>
<para>
<function>swfmorph</function> s'appelle aussi "shape tween".
C'est cet objet qui permet toutes ces superbes animations
qui mettent à genou votre ordinateur. Joie!
</para>
<para>
Les méthodes ici sont plutôt bizarres. Il serait tellement plus
logique d'avoir seulement <literal>new SWFMorph(shape1, shape2);</literal>,
mais, telles que sont les choses aujourd'hui, la deuxième forme
a besoin de savoir qu'elle est l'aboutissement d'un morphing.
(Tout cela, parce que Flash commence à dessiner aussitôt qu'il a les
commandes de dessins. S'il conservait les descriptions de ses propres
formes, et attendait leur totalité avant d'écrire, ceci et bien
d'autres
choses serait tellement plus simple).
</para>
<simpara>
SWFMorph a les méthodes suivantes :
<function>swfmorph->getshape1</function> et
<function>swfmorph->getshape1</function>.
</simpara>
<para>
Cet exemple simple effectue le morphing d'une gros carré rouge en un
carré plus petit, bleu et bordé de noir.
<example>
<title>Exemple avec <function>swfmorph</function></title>
<programlisting role="php">
<?php
$p = new SWFMorph();
$s = $p->getShape1();
$s->setLine(0,0,0,0);
/* Notez que cela se fait dans l'ordre inverse de l'ordre habituel
(gauche au lieu de droite), mais je n'ai aucune idée de pourquoi... */
$s->setLeftFill($s->addFill(0xff, 0, 0));
$s->movePenTo(-1000,-1000);
$s->drawLine(2000,0);
$s->drawLine(0,2000);
$s->drawLine(-2000,0);
$s->drawLine(0,-2000);
$s = $p->getShape2();
$s->setLine(60,0,0,0);
$s->setLeftFill($s->addFill(0, 0, 0xff));
$s->movePenTo(0,-1000);
$s->drawLine(1000,1000);
$s->drawLine(-1000,1000);
$s->drawLine(-1000,-1000);
$s->drawLine(1000,-1000);
$m = new SWFMovie();
$m->setDimension(3000,2000);
$m->setBackground(0xff, 0xff, 0xff);
$i = $m->add($p);
$i->moveTo(1500,1000);
for($r=0.0; $r<=1.0; $r+=0.1)
{
$i->setRatio($r);
$m->nextFrame();
}
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfmorph.getshape1">
<refnamediv>
<refname>SWFMorph->getshape1</refname>
<refpurpose>Sélectionne la forme de départ</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>mixed <function>swfmorph->getshape1</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmorph->getshape1</function> sélectionne la forme de
début de morphing. <function>swfmorph->getshape1</function> retourne un
objet <function>swfshape</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfmorph.getshape2">
<refnamediv>
<refname>SWFMorph->getshape2</refname>
<refpurpose>Sélectionne la forme de fin</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>mixed <function>swfmorph->getshape2</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfmorph->getshape2</function> sélectionne la forme de
début de morphing. <function>swfmorph->getshape2</function> retourne un
objet <function>swfshape</function>.
</para>
</refsect1>
</refentry>
<!-- SWFText -->
<refentry id="function.swftext">
<refnamediv>
<refname>SWFMorph</refname>
<refpurpose>Crée un nouvel objet texte.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swftext</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext</function> crée un nouvel objet texte,
prêt à être manipulé.
</para>
<simpara>
SWFText a les méthodes suivantes :
<function>swftext->setfont</function>,
<function>swftext->setheight</function>, <function>swftext->setspacing</function>,
<function>swftext->setcolor</function>, <function>swftext->moveto</function>,
<function>swftext->addstring</function> et <function>swftext->getwidth</function>.
</simpara>
<para>
Cet exemple simple va afficher la phrase "PHP fait du Flash avec Ming"
sur un fond blanc.
<example>
<title>Exemle avec <function>swftext</function></title>
<programlisting role="php">
<?php
$f = new SWFFont("Techno.fdb");
$t = new SWFText();
$t->setFont($f);
$t->moveTo(200, 2400);
$t->setColor(0xff, 0xff, 0);
$t->setHeight(1200);
$t->addString("PHP fait du Flash avec Ming!!");
$m = new SWFMovie();
$m->setDimension(5400, 3600);
$m->add($t);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.setfont">
<refnamediv>
<refname>SWFText->setFont</refname>
<refpurpose>Sélectionne la police courante</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->setfont</function></funcdef>
<paramdef>string <parameter>font</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->setfont</function> remplace la police courante
par <parameter>font</parameter>.
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.setheight">
<refnamediv>
<refname>SWFText->setHeight</refname>
<refpurpose>Modifie la hauteur de la police courante</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->setheight</function></funcdef>
<paramdef>integer <parameter>height</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->setheight</function> fixe la hauteur courante de
la police courante à <parameter>height</parameter>. Par défaut,
c'est 240.
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.setspacing">
<refnamediv>
<refname>SWFText->setSpacing</refname>
<refpurpose>Modifie l'espacement de police</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->setspacing</function></funcdef>
<paramdef>double <parameter>spacing</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->setspacing</function> fixe l'espacement de
police à <parameter>spacing</parameter><parameter>spacing</parameter>.
par défaut, c'est 1.0. 0 signifie que toutes les lettres seront
écrites au même point. Cela fonctionne pas terrible, car l'avance
des lettres augmente, et l'espacement entre lettre n'est pas toujours
le même. Il faudra que je l'explique plus clairement. Ou bien que je
corrige les erreurs.
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.setcolor">
<refnamediv>
<refname>SWFText->setColor</refname>
<refpurpose>Modifie la couleur de la police</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->setcolor</function></funcdef>
<paramdef>integer <parameter>red</parameter></paramdef>
<paramdef>integer <parameter>green</parameter></paramdef>
<paramdef>integer <parameter>blue</parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->setspacing</function> change la couleur de la
police courante. Par défaut, c'est noir. La couleur est
représentée avec
la convention RGB.
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.moveto">
<refnamediv>
<refname>SWFText->moveTo</refname>
<refpurpose>Déplace le stylo de texte</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->moveto</function></funcdef>
<paramdef>integer <parameter>x</parameter></paramdef>
<paramdef>integer <parameter>y</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->moveto</function> déplace le style (ou le curseur, si
ça a un sens) jusqu'au coordonnées
(<parameter>x</parameter>,<parameter>y</parameter>)
dans l'espace de coordonnées du texte. Si <parameter>x</parameter>
ou <parameter>y</parameter> vaut 0, la valeur de coordonnées de la
dimension
reste la même. C'est ennuyeux, et cela devrait être corrigé.
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.addstring">
<refnamediv>
<refname>SWFText->addString</refname>
<refpurpose>Ajoute du texe</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->addstring</function></funcdef>
<paramdef>string <parameter>string</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->addstring</function> ajoute le texte
<parameter>string</parameter>
au texte courant, et le dessine. Le stylo est situé sur la ligne de base
du texte, c'est à dire que le texte sera écrit horizontalement.
</para>
</refsect1>
</refentry>
<refentry id="function.swftext.getwidth">
<refnamediv>
<refname>SWFText->getWidth</refname>
<refpurpose>Calcule la longueur d'une chaîne</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftext->addstring</function></funcdef>
<paramdef>string <parameter>string</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftext->addstring</function> retourne la taille de la chaîne
<parameter>string</parameter>, une fois qu'elle est dessinée avec la police
et l'espaceement courant.
</para>
</refsect1>
</refentry>
<!-- SWFFont -->
<refentry id="function.swffont">
<refnamediv>
<refname>SWFFont</refname>
<refpurpose>Charge une police</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swffont</function></funcdef>
<paramdef>string <parameter>filename</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
si <parameter>filename</parameter> est le nom d'un fichier
FDB (i.e., si le nom de fichier se termine par ".fdb"), charge la
police.
</para>
<para>
FDB ("font definition block") est un petit utilitaire pour Flash DefineFont2
qui contient une description complète de la police. Vous pouvez
créer des
fichiers FDB à partir du "SWT Generator", qui est inclus avec
les utilitaires makefdb - regardez dans le dossier utilitaire de Ming.
</para>
<para>
Les polices utilisateurs ne contiennent aucune information autre que
le nom de la police. On suppose que la police sera elle-même accessible
au lecteur. Les polices "_serif", "_sans", et "_typewriter" doivent être
universellement disponibles. Par exemple :
<programlisting role="php">
<?php
$f = newSWFFont("_sans");
?>
</programlisting>
vous donne la police standard "sans-serif", probablement identique à
celle
que vous obtenez avec le code <literal><font
name="sans-serif"></literal>.
</para>
<para>
<function>swffont</function> retourne une ressource de police, à
utiliser avec
les méthodes <function>swftext->setfont</function> et
<function>swftextfield->setfont</function>.
</para>
<simpara>
SWFFont a les méthodes suivantes :
<function>swffont->getwidth</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swffont.getwidth">
<refnamediv>
<refname>getwidth</refname>
<refpurpose>Retourne la taille de la chaîne</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>int <function>swffont->getwidth</function></funcdef>
<paramdef>string <parameter>string</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swffont->getwidth</function> retourne la taille de
la chaîne <parameter>string</parameter>, avec la police courante.
Vous utiliserez plutôt la même méthode de l'objet
<function>swftext</function>, qui utilise les paramètres de
l'objet.
</para>
</refsect1>
</refentry>
<!-- SWFTextField -->
<refentry id="function.swftextfield">
<refnamediv>
<refname>SWFTextField</refname>
<refpurpose>Crée un nouveau champs texte</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swftextfield</function></funcdef>
<paramdef>int <parameter><optional>flags</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield</function> crée un nouveau champs texte.
Les champs textes sont moins souples que les <function>swftext</function>,
car ils ne peuvent être tournés, mis à l'échelle
ou incliné, mais ils peuvent
être utilisés sous forme de champs de formulaire, et ils peuvent
utiliser
des polices navigateur.
</para>
<para>
Les flags optionnels modifient les comportements du champs. Ils peuvent
prendre
les valeurs suivantes :
<itemizedlist>
<listitem>
<simpara>
SWFTEXTFIELD_NOEDIT : indique que le champs ne doit pas être
éditable.
</simpara>
</listitem>
<listitem>
<simpara>
SWFTEXTFIELD_PASSWORD : indique que c'est un champs mot de passe
</simpara>
</listitem>
<listitem>
<simpara>
SWFTEXTFIELD_DRAWBOX : dessine le contour du champs
</simpara>
</listitem>
<listitem>
<simpara>
SWFTEXTFIELD_MULTILINE : autorise les lignes multiples
</simpara>
</listitem>
<listitem>
<simpara>
SWFTEXTFIELD_WORDWRAP : autorise la mise en forme du texte
</simpara>
</listitem>
<listitem>
<simpara>
SWFTEXTFIELD_NOSELECT : rend le champs non-sélectionnable
</simpara>
</listitem>
</itemizedlist>
Les flags peuvent être combinés avec l'opérateur
<link linkend="language.operators.bitwise">OR</link>. Par exemple :
<programlisting role="php">
<?php
$t = newSWFTextField(SWFTEXTFIELD_PASSWORD | SWFTEXTFIELD_NOEDIT);
?>
</programlisting>
crée un champs de mot de passe totalement inéditable (et inutile).
</para>
<simpara>
SWFTextField a les méthodes suivantes :
<function>swftextfield->setfont</function>,
<function>swftextfield->setbounds</function>,
<function>swftextfield->align</function>,
<function>swftextfield->setheight</function>,
<function>swftextfield->setleftmargin</function>,
<function>swftextfield->setrightmargin</function>,
<function>swftextfield->setmargins</function>,
<function>swftextfield->setindentation</function>,
<function>swftextfield->setlinespacing</function>,
<function>swftextfield->setcolor</function>,
<function>swftextfield->setname</function> et
<function>swftextfield->addstring</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setfont">
<refnamediv>
<refname>SWFTextField->setFont</refname>
<refpurpose>Modifie la police du champs</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setfont</function></funcdef>
<paramdef>string <parameter>font</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setfont</function> remplace la police courante
par la police <parameter>font</parameter> (police client?).
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setbounds">
<refnamediv>
<refname>SWFTextField->setbounds</refname>
<refpurpose>Sélectionne la largeur et hauteur du champs</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setbounds</function></funcdef>
<paramdef>int <parameter>width</parameter></paramdef>
<paramdef>int <parameter>height</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setbounds</function> fixe la longueu du champs
à <parameter>width</parameter> et sa hauteur à
<parameter>height</parameter>.
Si vous ne fixez pas les bords vous-mêmes, Ming tentera de les deviner
lui-même (mais ne le laissez pas faire!!).
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.align">
<refnamediv>
<refname>SWFTextField->align</refname>
<refpurpose>Modifie l'alignement du texte</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->align</function></funcdef>
<paramdef>int <parameter>alignement</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->align</function> change l'alignement du
texte par <parameter>alignement</parameter>. Les valeurs valides
pour <parameter>alignement</parameter> sont : SWFTEXTFIELD_ALIGN_LEFT,
SWFTEXTFIELD_ALIGN_RIGHT, SWFTEXTFIELD_ALIGN_CENTER et
SWFTEXTFIELD_ALIGN_JUSTIFY.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setheight">
<refnamediv>
<refname>SWFTextField->setHeight</refname>
<refpurpose>Modifie la hauteur de la police du champs texte.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setheight</function></funcdef>
<paramdef>int <parameter>height</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setheight</function> modifie la hauteur de
la police du champs texte par <parameter>height</parameter>. Par défaut,
c'est 240.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setleftmargin">
<refnamediv>
<refname>SWFTextField->setLeftMargin</refname>
<refpurpose>Modifie la marge de gauche.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setleftmargin</function></funcdef>
<paramdef>int <parameter>width</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setleftmargin</function> modifie la marge de
gauche du champs texte à <parameter>width</parameter>. Par défaut,
c'est 0.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setrightmargin">
<refnamediv>
<refname>SWFTextField->setrightMargin</refname>
<refpurpose>Modifie la marge de droite.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setrightmargin</function></funcdef>
<paramdef>int <parameter>width</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setrightmargin</function> modifie la marge de
gauche du champs texte à <parameter>width</parameter>. Par défaut,
c'est
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setmargins">
<refnamediv>
<refname>SWFTextField->setMargins</refname>
<refpurpose>Modifie les marges du champs texte.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setmargins</function></funcdef>
<paramdef>int <parameter>left</parameter></paramdef>
<paramdef>int <parameter>right</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setmargins</function> modifie les deux marges
du champs texte : <parameter>left</parameter> sera la nouvelle largeur de
la marge de gauche, et <parameter>right</parameter>, celle de gauche.
Par défaut, elles sont toutes les deux à 0.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setindentation">
<refnamediv>
<refname>SWFTextField->setindentation</refname>
<refpurpose>Modifie l'indentation de la première ligne.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setindentation</function></funcdef>
<paramdef>int <parameter>width</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setindentation</function> modifie l'indentation de
la première ligne du champs texte, en la fixant à
<parameter>width</parameter>.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setlinespacing">
<refnamediv>
<refname>SWFTextField->setLineSpacing</refname>
<refpurpose>Modifie l'espacement de lignes.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setlinespacing</function></funcdef>
<paramdef>int <parameter>height</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setlinespacing</function> modifie l'espacement de lignes,
en le fixant à <parameter>height</parameter>. Par défaut, c'est 40.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setcolor">
<refnamediv>
<refname>SWFTextField->setcolor</refname>
<refpurpose>Modifie la couleur du champs texte</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setcolor</function></funcdef>
<paramdef>integer <parameter>red</parameter></paramdef>
<paramdef>integer <parameter>green</parameter></paramdef>
<paramdef>integer <parameter>blue</parameter></paramdef>
<paramdef>integer <parameter><optional>a</optional></parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setcolor</function> modifie la couleur du
champs texte, en la remplacant par la couleur fournie. Par défaut, c'est
noir opaque. Les couleurs sont représentées en convention RGB.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.setname">
<refnamediv>
<refname>SWFTextField->setname</refname>
<refpurpose>Nomme le champs texte</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->setname</function></funcdef>
<paramdef>string <parameter>name</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setname</function> baptise le champs
texte <parameter>name</parameter>. Cela servira pour les formulaires
et les actions.
</para>
</refsect1>
</refentry>
<refentry id="function.swftextfield.addstring">
<refnamediv>
<refname>SWFTextField->addstring</refname>
<refpurpose>Ajoute au texte</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swftextfield->addstring</function></funcdef>
<paramdef>string <parameter>string</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swftextfield->setname</function> concatène la chaîne
<parameter>string</parameter> avec la chaîne courante.
</para>
</refsect1>
</refentry>
<!-- SWFSprite -->
<refentry id="function.swfsprite">
<refnamediv>
<refname>SWFSprite</refname>
<refpurpose>Crée un sprite</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfsprite</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfsprite</function> sont aussi connue sous le nom de
"clip" : ils permettent la création d'objet animé dans une
animation,
avec un scénario propre. De ce fait, un sprite a les mêmes
méthodes
qu'une animation.
</para>
<simpara>
<function>swfsprite</function> a les méthodes suivantes :
<function>swfsprite->add</function>,
<function>swfsprite->remove</function>, <function>swfsprite->nextframe</function>
et <function>swfsprite->setframes</function>.
</simpara>
<para>
Ce exemple pratique fait tourner un superbe carré rouge.
<example>
<title>Exemple de <function>swfsprite</function></title>
<programlisting role="php">
<?php
$s = new SWFShape();
$s->setRightFill($s->addFill(0xff, 0, 0));
$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);
$p->nextFrame();
$i->rotate(15);
$p->nextFrame();
$i->rotate(15);
$p->nextFrame();
$i->rotate(15);
$p->nextFrame();
$i->rotate(15);
$p->nextFrame();
$i->rotate(15);
$p->nextFrame();
$m = new SWFMovie();
$i = $m->add($p);
$i->moveTo(1500,1000);
$i->setName("blah");
$m->setBackground(0xff, 0xff, 0xff);
$m->setDimension(3000,2000);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfsprite.add">
<refnamediv>
<refname>SWFSprite->add</refname>
<refpurpose>Ajoute un objet à un sprite</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>mixed <function>swfsprite->add</function></funcdef>
<paramdef>ressource <parameter>object</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfsprite->add</function> ajoute une <function>swfshape</function>, un
<function>swfbutton</function>, un <function>swftext</function>,
une <function>swfaction</function> ou une autre animation
<function>swfsprite</function>.
</para>
<para>
Pour les objets affichables (<function>swfshape</function>,
<function>swfbutton</function>, <function>swftext</function>,
<function>swfaction</function> or <function>swfsprite</function>),
cela retourne une resource sur l'objet dans la liste d'affichage.
</para>
</refsect1>
</refentry>
<refentry id="function.swfsprite.remove">
<refnamediv>
<refname>SWFSprite->remove</refname>
<refpurpose>Supprime un objet dans un sprite</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfsprite->remove</function></funcdef>
<paramdef>ressource <parameter>object</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfsprite->remove</function> supprime une
<function>swfshape</function>, un
<function>swfbutton</function>, un <function>swftext</function>,
une <function>swfaction</function> ou un <function>swfsprite</function> du
sprite courant.
</para>
</refsect1>
</refentry>
<refentry id="function.swfsprite.setframes">
<refnamediv>
<refname>SWFSprite->setframes</refname>
<refpurpose>Fixe le nombre maximum d'image dans le sprite.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfsprite->setframes</function></funcdef>
<paramdef>integer <parameter>numberofframes</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfsprite->setframes</function> fixe le nombre total d'images
de l'animation à <parameter>numberofframes</parameter>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfsprite.nextframe">
<refnamediv>
<refname>SWFSprite->nextframe</refname>
<refpurpose>Va à la prochaine image du sprite.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfsprite->nextframe</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfsprite->setframes</function> se déplace à la prochaine
image
du sprite.
</para>
</refsect1>
</refentry>
<!-- SWFButton -->
<refentry id="function.swfbutton">
<refnamediv>
<refname>SWFbutton</refname>
<refpurpose>Crée un nouveau bouton.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfbutton</function></funcdef>
<paramdef>void</paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton</function> crée un nouveau bouton.
Cliquez-le, passez la souris dessus, et appelez des actions. Facile!
</para>
<simpara>
SWFButton a les méthodes suivantes :
<function>swfbutton->addshape</function>,
<function>swfbutton->setup</function>, <function>swfbutton->setover</function>
<function>swfbutton->setdown</function>, <function>swfbutton->sethit</function>
<function>swfbutton->setaction</function> et
<function>swfbutton->addaction</function>.
</simpara>
<para>
Cet exemple simplissime vous montre comme faire un
roll-over, un roll-on, un clic, un relaché de souris, et rien du tout (pas
d'action).
<example>
<title>Exemple avec <function>swfbutton</function></title>
<programlisting role="php">
<?php
$f = new SWFFont("_serif");
$p = new SWFSprite();
function label($string)
{
global $f;
$t = new SWFTextField();
$t->setFont($f);
$t->addString($string);
$t->setHeight(200);
$t->setBounds(3200,200);
return $t;
}
function addLabel($string)
{
global $p;
$i = $p->add(label($string));
$p->nextFrame();
$p->remove($i);
}
$p->add(new SWFAction("stop();"));
addLabel("NO ACTION");
addLabel("SWFBUTTON_MOUSEUP");
addLabel("SWFBUTTON_MOUSEDOWN");
addLabel("SWFBUTTON_MOUSEOVER");
addLabel("SWFBUTTON_MOUSEOUT");
addLabel("SWFBUTTON_MOUSEUPOUTSIDE");
addLabel("SWFBUTTON_DRAGOVER");
addLabel("SWFBUTTON_DRAGOUT");
function rect($r, $g, $b)
{
$s = new SWFShape();
$s->setRightFill($s->addFill($r, $g, $b));
$s->drawLine(600,0);
$s->drawLine(0,600);
$s->drawLine(-600,0);
$s->drawLine(0,-600);
return $s;
}
$b = new SWFButton();
$b->addShape(rect(0xff, 0, 0), SWFBUTTON_UP | SWFBUTTON_HIT);
$b->addShape(rect(0, 0xff, 0), SWFBUTTON_OVER);
$b->addShape(rect(0, 0, 0xff), SWFBUTTON_DOWN);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(1);"),
SWFBUTTON_MOUSEUP);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(2);"),
SWFBUTTON_MOUSEDOWN);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(3);"),
SWFBUTTON_MOUSEOVER);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(4);"),
SWFBUTTON_MOUSEOUT);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(5);"),
SWFBUTTON_MOUSEUPOUTSIDE);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(6);"),
SWFBUTTON_DRAGOVER);
$b->addAction(new SWFAction("setTarget('/label'); gotoFrame(7);"),
SWFBUTTON_DRAGOUT);
$m = new SWFMovie();
$m->setDimension(4000,3000);
$i = $m->add($p);
$i->setName("label");
$i->moveTo(400,1900);
$i = $m->add($b);
$i->moveTo(400,900);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
<para>
Cet exemple simple illustre le déplacement d'un gros bouton
rouge dans la fenêtre. Ce n'est pas du tirer-déposer, mais juste
du tirer.
<example>
<title>Exemple avec <function>swfbutton->addaction</function></title>
<programlisting role="php">
<?php
$s = new SWFShape();
$s->setRightFill($s->addFill(0xff, 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_HIT | SWFBUTTON_UP | SWFBUTTON_DOWN | SWFBUTTON_OVER);
$b->addAction(new SWFAction("startDrag('/test', 0);"),
SWFBUTTON_MOUSEDOWN);
// '0' signifie : ne pas verrouiller la souris
$b->addAction(new SWFAction("stopDrag();"),
SWFBUTTON_MOUSEUP | SWFBUTTON_MOUSEUPOUTSIDE);
$p = new SWFSprite();
$p->add($b);
$p->nextFrame();
$m = new SWFMovie();
$i = $m->add($p);
$i->setName('test');
$i->moveTo(1000,1000);
header('Content-type: application/x-shockwave-flash');
$m->output();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.addshape">
<refnamediv>
<refname>SWFbutton->addShape</refname>
<refpurpose>Ajoute une forme à un bouton</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->addshape</function></funcdef>
<paramdef>ressource <parameter>shape</parameter></paramdef>
<paramdef>integer <parameter>flags</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->addshape</function> ajoute la forme
<parameter>shape</parameter> au bouton. Les valeurs
possibles de <parameter>flags</parameter> sont :
SWFBUTTON_UP, SWFBUTTON_OVER, SWFBUTTON_DOWN ou SWFBUTTON_HIT.
SWFBUTTON_HIT n'est même pas affiché, elle désigne la
région du clic d'un bouton. C'est à dire que tout point
où le bouton est déssiné est considéré comme
accessible.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.setup">
<refnamediv>
<refname>SWFbutton->setUp</refname>
<refpurpose>Alias de SWFbutton->addShape(shape, SWFBUTTON_UP)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->setup</function></funcdef>
<paramdef>ressource <parameter>shape</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->setup</function> est un alias pour
<literal>SWFbutton->addShape(shape, SWFBUTTON_UP)</literal>.
</para>
<para>
Voir aussi :
<function>swfbutton->addshape</function> et
<function>swfaction</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.setover">
<refnamediv>
<refname>SWFbutton->setOver</refname>
<refpurpose>Alias de addShape(shape, SWFBUTTON_OVER)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->setover</function></funcdef>
<paramdef>ressource <parameter>shape</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->setover</function> est un alias pour
<literal>addShape(shape, SWFBUTTON_OVER)</literal>.
</para>
<para>
Voir aussi :
<function>swfbutton->addshape</function> et
<function>swfaction</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.setdown">
<refnamediv>
<refname>SWFbutton->setDown</refname>
<refpurpose>Alias de addShape(shape, SWFBUTTON_DOWN)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->setdown</function></funcdef>
<paramdef>ressource <parameter>shape</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->setdown</function> est un alias pour
<literal>addShape(shape, SWFBUTTON_DOWN)</literal>.
</para>
<para>
Voir aussi :
<function>swfbutton->addshape</function> et
<function>swfaction</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.sethit">
<refnamediv>
<refname>SWFbutton->setHit</refname>
<refpurpose>Alias de addShape(shape, SWFBUTTON_HIT)</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->sethit</function></funcdef>
<paramdef>ressource <parameter>shape</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->sethit</function> est un alias pour
<literal>addShape(shape, SWFBUTTON_HIT)</literal>.
</para>
<para>
Voir aussi :
<function>swfbutton->addshape</function> et
<function>swfaction</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.addaction">
<refnamediv>
<refname>SWFbutton->addAction</refname>
<refpurpose>Ajoute une action au bouton</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->addaction</function></funcdef>
<paramdef>ressource <parameter>action</parameter></paramdef>
<paramdef>integer <parameter>flags</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->setaction</function> ajoute l'action
<parameter>action</parameter> (créée par
<function>swfaction</function>)
au bouton courant, dans les conditions précisées par
<parameter>flags</parameter>.
Les valeurs valides de <parameter>flags</parameter> sont :
SWFBUTTON_MOUSEOVER, SWFBUTTON_MOUSEOUT, SWFBUTTON_MOUSEUP,
SWFBUTTON_MOUSEUPOUTSIDE, SWFBUTTON_MOUSEDOWN, SWFBUTTON_DRAGOUT
et SWFBUTTON_DRAGOVER
</para>
<para>
Voir aussi :
<function>swfbutton->addshape</function> et
<function>swfaction</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.swfbutton.setaction">
<refnamediv>
<refname>SWFbutton->setAction</refname>
<refpurpose>Assigne l'action du bouton</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>void <function>swfbutton->setaction</function></funcdef>
<paramdef>ressource <parameter>action</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfbutton->setaction</function> assigne l'action qui
sera exécutée lorsque le bouton sera cliqué. C'est un alias
de
<literal>addAction(shape, SWFBUTTON_MOUSEUP)</literal>.
<parameter>action</parameter> est une <function>swfaction</function>.
</para>
<para>
Voir aussi :
<function>swfbutton->addshape</function> et
<function>swfaction</function>.
</para>
</refsect1>
</refentry>
<!-- SWFAction -->
<refentry id="function.swfaction">
<refnamediv>
<refname>SWFAction</refname>
<refpurpose>Crée une nouvelle action.</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<funcsynopsis>
<funcprototype>
<funcdef>new <function>swfaction</function></funcdef>
<paramdef>string <parameter>script</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<para>
<function>swfaction</function> crée une nouvelle action, et
compile le script <parameter>script</parameter>.
</para>
<para>
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.
</para>
<para>
Alors, que reste-t-il? Le compilateur reconnait les mots suivants :
<itemizedlist>
<listitem>
<simpara>
break
</simpara>
</listitem>
<listitem>
<simpara>
for
</simpara>
</listitem>
<listitem>
<simpara>
continue
</simpara>
</listitem>
<listitem>
<simpara>
if
</simpara>
</listitem>
<listitem>
<simpara>
else
</simpara>
</listitem>
<listitem>
<simpara>
do
</simpara>
</listitem>
<listitem>
<simpara>
while
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
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 :
<variablelist>
<varlistentry>
<term>time()</term>
<listitem>
<simpara>
Retourne le nombre de milli-secondes depuis le début de
l'animation.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>random(seed)</term>
<listitem>
<simpara>
Retourne un nombre pseudo-aléatoire, entre 0 et seed.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>length(expr)</term>
<listitem>
<simpara>
Retourne la taille de l'expression donnée.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>int(number)</term>
<listitem>
<simpara>
Retourne le nombre number, arrondi à l'entier inférieur le
plus proche.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>concat(expr, expr)</term>
<listitem>
<simpara>
Retourne la concaténation des deux expressions.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>ord(expr)</term>
<listitem>
<simpara>
Retourne le code ASCII du caractère expr.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>chr(num)</term>
<listitem>
<simpara>
Retourne le caractère pour le code ASCII num.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>substr(string, location, length)</term>
<listitem>
<simpara>
Retourne la sous-chaîne, extraite de string, de longueur
length et commencant au caractère location.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
De plus, les commandes suivantes sont accessibles :
<variablelist>
<varlistentry>
<term>duplicateClip(clip, name, depth)</term>
<listitem>
<simpara>
Duplique le sprite nommé clip. La nouvelle animation a le nouveau
nom
name et la profondeur depth.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>removeClip(expr)</term>
<listitem>
<simpara>
Supprime l'animation nommée expr.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>trace(expr)</term>
<listitem>
<simpara>
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.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>startDrag(target, lock, [left, top, right, bottom])</term>
<listitem>
<simpara>
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.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>stopDrag()</term>
<listitem>
<simpara>
Cesse le déplacement de l'animation.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>callFrame(expr)</term>
<listitem>
<simpara>
Appelle l'image expr comme une fonction.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>getURL(url, target, [method])</term>
<listitem>
<simpara>
Charge l'URL url dans l'objet target. target peut etre 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.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>loadMovie(url, target)</term>
<listitem>
<simpara>
La même chose que ci-dessus, plus ou moins. En fait, je ne sais pas
trop quelle est la différence.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>nextFrame()</term>
<listitem>
<simpara>
Va à l'image suivante.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>prevFrame()</term>
<listitem>
<simpara>
Va à l'image précédente.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>play()</term>
<listitem>
<simpara>
Joue l'animation.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>stop()</term>
<listitem>
<simpara>
Cesse de jouer l'animation.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>toggleQuality()</term>
<listitem>
<simpara>
Passe de haute en basse qualité (et vice-versa).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>stopSounds()</term>
<listitem>
<simpara>
Cesse de jouer les sons.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>gotoFrame(num)</term>
<listitem>
<simpara>
Va à l'image numéro num. Les images sont
numérotées à
partir de 0.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>gotoFrame(name)</term>
<listitem>
<simpara>
Va à l'image nommée name. Ce qui est carrément cool,
car
les labels ne sont pas encore supportés pour les images.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>setTarget(expr)</term>
<listitem>
<simpara>
Modifie le contexte de l'action. C'est ce qu'ils disent, mais
je n'ai pas trop d'idées là-dessus.
</simpara>
</listitem>
</varlistentry>
</variablelist>
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.
</para>
<para>
Les sprites ont des propriétés. Vous pouvez les lire toutes
(vraiment?), en modifier quelques unes. Les voici :
<itemizedlist>
<listitem>
<simpara>
x
</simpara>
</listitem>
<listitem>
<simpara>
y
</simpara>
</listitem>
<listitem>
<simpara>
xScale
</simpara>
</listitem>
<listitem>
<simpara>
yScale
</simpara>
</listitem>
<listitem>
<simpara>
currentFrame - (lecture seule)
</simpara>
</listitem>
<listitem>
<simpara>
totalFrames - (lecture seule)
</simpara>
</listitem>
<listitem>
<simpara>
alpha - Niveau de transparence
</simpara>
</listitem>
<listitem>
<simpara>
visible - 1=on, 0=off (?)
</simpara>
</listitem>
<listitem>
<simpara>
width - (lecture seule)
</simpara>
</listitem>
<listitem>
<simpara>
height - (lecture seule)
</simpara>
</listitem>
<listitem>
<simpara>
rotation
</simpara>
</listitem>
<listitem>
<simpara>
target - (lecture seule) (???)
</simpara>
</listitem>
<listitem>
<simpara>
framesLoaded - (lecture seule)
</simpara>
</listitem>
<listitem>
<simpara>
name
</simpara>
</listitem>
<listitem>
<simpara>
dropTarget - (lecture seule) (???)
</simpara>
</listitem>
<listitem>
<simpara>
url - (lecture seule) (???)
</simpara>
</listitem>
<listitem>
<simpara>
highQuality - 1=high, 0=low (?)
</simpara>
</listitem>
<listitem>
<simpara>
focusRect - (???)
</simpara>
</listitem>
<listitem>
<simpara>
soundBufTime - (???)
</simpara>
</listitem>
</itemizedlist>
Modifier la position d'un sprite est aussi simple que
<literal>/box.x = 100;</literal>. 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 <literal>/box/biff.x = 100;</literal>.
En tous cas, ca marche pour moi. Corrigez moi si c'est faux!.
</para>
<para>
Cet exemple simple va déplacer le gros carré rouge dans la
fenêtre.
<example>
<title>Exemple avec <function>swfaction</function></title>
<programlisting role="php">
<?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();
?>
</programlisting>
</example>
</para>
<para>
Cet exemple suit votre souris sur l'écran.
<example>
<title>Exemple avec <function>swfaction</function></title>
<programlisting role="php">
<?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 absisse 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();
?>
</programlisting>
</example>
</para>
<para>
La même chose que ci-dessus, mais en couleurs.
<example>
<title><function>swfaction</function> example</title>
<programlisting role="php">
<?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();
?>
</programlisting>
</example>
</para>
<para>
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!).
<example>
<title>Exemple avec <function>swfaction</function></title>
<programlisting role="php">
<?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();
?>
</programlisting>
</example>
</para>
</refsect1>
</refentry>
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->