Flash Platform // Actionscript // FDT // Pixlib - Mot-clé - osFlashEspace rassemblant différentes informations liées à la Flash plateforme d'Adobe, l'Open Screen Project, FDT de Powerflasher et l'excellent framework Actionscript Pixlib2015-01-12T10:03:24+01:00Laurent Deketelaereurn:md5:dc39f1be241e0e0f27311e2a6df9ed38Dotclear[Fever] - Welcome to the Fever Development Group !urn:md5:0e664b253a755e453d4f5d41c76f2fa52006-09-17T16:21:18+00:002007-11-16T07:41:02+00:00Laurent DeketelaereFlash plateformeActionscriptFDTFlashosFlashPixlib <pre>Hi all and Welcome to the Fever Development Group !
Group mission :
Discuss ( if you want ;) ) about a new available ActionScript 2.0
framework named Fever. ( SVN notifications, bug report, feedback, ... )
Fever presentation :
OpenSource (MPL1.1) ActionScript 2.0 Framework targeted for Flash
Player version >= 8.
It's composed in 2 main sections :
- The pure Fever Framework : which defines useful tools to create rich
application or web site ( data validation, history managment, visual
effect, keyboard managment, I/O and more to come...)
- AsWing extensions library : which gives extensions to existing AsWing
GUI Framework.
Fever is fully compliant with MTASC Compiler.
Fever profits from the power of the Pixlib Framework in many
implementations.
Why a new AS2 Framework again ?
To give a complete, easy and robust way for building Flash applications
or full Flash websites using the incredible team : Fever / AsWing /
Pixlib ( FAP )
Some useful links now :
- Google code page : http://code.google.com/p/as2fever/
- Google SVN: http://as2fever.googlecode.com/svn/
- My blog ( fr ) : http://www.customactions.net/webblog/
- Pixlib framework : http://www.osflash.org/pixlib/
- AsWing site : http://www.aswing.org
A first FAP application named "Samples viewer" can be viewed on
http://fever.customactions.net/samples_viewer/
Hope Fever can help some of you for their development ;)
Cheers,
Romain Ecarnot</pre>
<p>Celà faisait un moment que je l'attendais, c'est chose faite. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /><br />
Romain vient de rendre disponible Fever, sont framework. Ayant eu la chance de pouvoir déjà jouer un peu avec, je peux vous dire que Fever vient de rejoindre les "linked libraries" de mes projets FDT. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<pre class="actionscript">
//TODO learn Fever API
</pre>
<p>++ <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>[en vrac] - ça flash dans les chaumièresurn:md5:cad2ab965e03f190f7efe0f3580d05f42006-03-13T12:04:33+00:002006-03-14T21:58:09+00:00Laurent DeketelaereFlash plateformeActionscriptLinuxosFlashPixlib <p>Bientôt le printemps, le soleil brille, les oiseaux arrivent et ça flash dans les chaumières. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<ul>
<li>Eka vient de sortir <a href="http://www.ekameleon.net/blog/index.php?2006/03/04/26--vegas-framework-opensource-as2-qui-a-du-chien" hreflang="fr">VEGAS (ou Vision Etonnamment Générique de l'ecmAScript)</a> et devrait sortir d'ici la fin de la semaine NEO, une librairie qui permet de créer des composants en deux temps trois mouvements, basé sur pixLib.</li>
<li>Chez eRom l'heureux événement s'appel <a href="http://customactions.net/webblog/index.php/2006/03/09/40-fever-faire-part-de-naissance" hreflang="fr">Fever (ou quand le coderon partage son travail)</a>.</li>
<li><a href="http://www.osflash.org/pixlib">pixLib</a>, vient de se voir doté d'un nouveau package en version alpha, com.bourre.remoting disponible sur simple demande au près de Francis. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></li>
<li>Chez JeanPhi ça JSFL dans tous les sens : <a href="http://jeanphiblog.media-box.net/dotclear/index.php?2006/02/24/202-jsfl-snippetlibrary-command-v1" hreflang="fr">SnippetLibrary command</a>, <a href="http://jeanphiblog.media-box.net/dotclear/index.php?2006/03/12/203-flash-8-jsfl-biblioclean-command" hreflang="fr">BiblioClean Command</a>.</li>
<li>«<a href="http://www.shoe-box.org/blog/index.php?2006/03/09/143-microsoft-fout-le-bordel-chez-les-flasheurs" hreflang="fr">Microsoft fout le bordel chez les flasheurs !</a>», <a href="http://www.media-box.net/index.php/2006/03/13/95-flash-player-8-sous-linux" hreflang="fr">sinon ça Flash8 sous Linux</a>.</li>
<li><a href="http://www.dreammania.net/index.php?link=17.thread" hreflang="fr">Ca smiles du coté des mangeurs de chips</a>. :p</li>
<li><a href="http://osflash.org/components" hreflang="fr">osFlash</a> nous aide à faire le points sur les sets de composants disponible en actionscript. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></li>
<li><a href="http://blog.neolao.com/2006/01/18/1-first-post" hreflang="fr">NeoLao</a> : «il fallait bien que j'ouvre le mien pour être fashion».</li>
<li><a href="http://www.foxaweb.com/blog/?p=1" hreflang="fr">Foxy</a>, gumBlog est dans la place. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></li>
<li>la-rache.com est un site dévoué à la normalisation de <a href="http://www.la-rache.com" hreflang="fr">la rache ou «L’extrême programming heuristique»</a> (méthodologie que tout bon développeur à déjà éprouvé). <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" />
</li>
</ul>
<p>Sinon get-url.net vient de changer de serveur, j'ai rencontré quelques souci avec les DNS, ce qui explique ce manque d'activité ces derniers jours.</p>[MTASC] - la compilation libre.urn:md5:41d01ce2f042d39fba7dd2564ca61d2c2006-01-27T16:34:00+00:002009-01-26T21:56:14+00:00Laurent DeketelaereFlash plateformeActionscriptFlashhaXeLibreLinuxosFlashPixlib<p><strong>MTASC == Motion-Twin ActionScript 2 Compiler;</strong></p>
<p>Un an après la sortie de MTASC, je suis surpris du peu d'informations disponible en français sur le web à propos du compilateur ActionScript 2 open-source de <a href="http://www.motion-twin.fr/team.html#ncannasse">Nicolas Cannasse</a>.
Je me permets donc de vous offrir un billet sur le sujet. <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>
<p>
<a href="http://www.mtasc.org">
<img src="http://www.mtasc.org/img/mtasc_88x31.gif" title="MotionTwin AS2 Compiler" alt="MTASC" style="border:0;" />
</a>
</p>
<h3>Historique</h3>
<ul>
<li><p><strong>Décembre 2003, ASML == ActionScriptMetaLanguage;</strong><br />
Ce lançais avait le compilateur Flash<br />
Ajoute le «Type Inference» à l'ActionScript 2.<br />
Accélère la compilation.</p>
</li>
<li><p><strong>Avril 2004, Motion Types;</strong><br />
J'ai assez peut d'infos sur ce compilateur.</p>
</li>
<li><p><strong>Janvier 2005, MTASC 1.0;</strong><br />
Je passe le reste du billet à décrire MTASC. <img src="/themes/default/smilies/wink.png" alt=";-)" class="smiley" /></p>
</li>
<li><p><strong>Novembre 2005, haXe;</strong><br />
C'est fin octobre que <a href="http://www.aggelos.org/index.php?2005/10/24/57--mtasc-pas-pour-l-as3-donc" hreflang="fr">Nicolas nous annonce que MTASC n'irait pas plus loin que l'ActionScript2</a>.
Lors du Spark Europe, Nicolas nous a présenté son nouveau projet. <br />
La réalisation d'un nouveau langage de programmation open-source pour le web.<br />
Sous ce langage serrait regroupé la partie serveur et client, à partir de haXe on pourra créé des swf du javaScript et du Neko
(nouveau langage serveur créé pour l'occasion).
Un site est consacré au projet haXe - <a href="http://www.haxe.org" hreflang="fr">haXe.org</a>.</p>
</li>
</ul> <h3>Utilisation du compilateur MTASC</h3>
<p>Par défaut MTASC s'utilise en ligne de commande, pour un usage basic seul cinq paramètres sont nécessaire.</p>
<h4>Les paramètres de base</h4>
<ul>
<li><p><strong>-swf fichier.swf</strong><br />
Cible sur le fichier swf que l'on veut en entrée, ce qui permet d'imputer du code dans un swf existant.</p>
</li>
<li><p><strong>-cp chemin</strong><br />
Ajoute le chemin d'un dossier comme «ClassPath» (Flash < préférences < ActionScript < Paramètres d'ActionScript < Chemin de Classes).
Vous pouvez utiliser une série de -cp pour ajouter un série de dossiers.</p>
</li>
<li><p><strong>-main</strong><br />
Force l'appel de la fonction statique «main» dans toutes les classes enregistrée.</p>
</li>
<li><p><strong>-header width:height:fps:bgcolor</strong><br />
Si aucun swf n'est chargé en entrée (-swf fichier.swf), ces paramètres seront utilisé pour créer un nouveau swf. Le «bgcolor» est facultatif,
c'est une valeur hexadécimal.</p>
</li>
<li><p><strong><a href="http://blog.geturl.net/post/2006/01/27/26-mtasc-la-compilation-libre#mx">-mx</a></strong><br />
Permet d'utiliser les classes précompilé de Flash (en cas d'utilisation des composants V2 de MM).</p>
</li>
</ul>
<h4>Les paramètres avancées</h4>
<ul>
<li><p><strong>-version nombre</strong><br />
Défini la version du swf généré : 6 pour générer un swf compatible avec le Flash Player 6r89 ou 8 pour accéder au nouveautés de Flash 8.</p>
</li>
<li><p><strong>-v</strong><br />
Active le mode «verbose» (bavard) ce qui permet d'avoir des informations complémentaire dur le processus de compilation.</p>
</li>
<li><p><strong>-out fichier.swf</strong><br />
change le nom du fichier obtenu en sortie.</p>
</li>
<li><p><strong>-msvc</strong><br />
Emploie le formatage d'erreurs de Microsoft Visual Studio au lieu du modèle de Java (pour le le nom des fichiers et le nombre de lignes).</p>
</li>
<li><p><strong>-strict</strong><br />
Emploie le mode strict pour la compilation ce qui oblige d'avoir toutes les variables explicitement typé.</p>
</li>
<li><p><strong>-exclude chemin</strong><br />
Exclu la génération de code des classes contenu dans les dossiers imbriqué (un chemin par ligne).</p>
</li>
<li><p><strong><a href="http://blog.geturl.net/post/2006/01/27/26-mtasc-la-compilation-libre#trace">-trace fonction</a></strong><br />
Spécifie une fonction personnel pour la fonction trace, si le paramètre est vide toutes les fonctions trace sont neutralisé.</p>
</li>
<li><p><strong>-keep</strong><br />
Maintient les classes déjà présentent dans le swf utilisé en entré (il peut donc arriver d'avoir deux fois la même classe dans un swf).</p>
</li>
<li><p><strong>-frame image-clef</strong><br />
Défini l'image-clef où seront chargé les classes ActionScript.</p>
</li>
<li><p><strong>-pack chemin</strong><br />
Permet de définir un chemin de sortie, équivalent au chemin de sortie défini des paramètres de publication de l'IDE de Flash -
non récurcif (exemple sous osX pour compiler dans le dossier /User/ali_o_kan/document/monProjet/sortie faite -cp /User/ali_o_kan/document/monProjet
-pack monProjet/sortie).</p>
</li>
<li><p><strong>-group</strong><br />
Fusionne les classes dans un seul clip (permet de réduire le poids du swf mais peut poser problème si les paramètres -keep ou -mx sont utilisé).</p>
</li>
<li><p><strong>-wimp</strong><br />
Ajoute des messages d'erreur pour les import non utilisé dans les swf.</p>
</li>
<li><p><strong>-infer</strong><br />
Type automatiquement les variables locales, ce qui permet d'éviter des redondances(ex. var monOccurence:MaClasse = new MaClasse (); ).</p>
</li>
</ul>
<h4>Explication d'utilisation</h4>
<p>Pour pouvoir compiler avec MTASC il faut, MTASC et une classe d'entrée. Pour installer MTASC suivez les liens( Linux, osX, Win ).
Pour ce qui est de la classe d'entrée il s'agit d'une classe qui pocède une fonction statique «main». C'est par cette fonction que l'application sera lancé.
Chose interressante à savoir, la fonction «main» pocède un argument, il s'agit du level0 du swf (le _root).
Maintenant il ne vous reste plus qu'a publier avec MTASC et vous obtiendrez un joli swf en sortie, «elle est pas belle la vie?» <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<h3>Exemple basic</h3>
<p>Dans cette exemple aucun swf ne serra utilisé en entrée, uniquement une classe ActionScript2.</p>
<h4>La classe d'exemple</h4>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/class"><span class="kw2">class</span></a> Exemple
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/static"><span class="kw2">static</span></a> <a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> app : Exemple;
<a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> Exemple<span class="br0">(</span> mc:<a href="http://wiki.media-box.net/documentation/flash/MovieClip"><span class="kw3">MovieClip</span></a> <span class="br0">)</span>
<span class="br0">{</span>
<span class="co1">// créé un TextField 'tf' de 800x600 en position 0,0</span>
mc.<a href="http://wiki.media-box.net/documentation/flash/movieclip/createTextField"><span class="kw24">createTextField</span></a><span class="br0">(</span><span class="st0">"tf"</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">800</span>,<span class="nu0">600</span><span class="br0">)</span>;
<span class="co1">// ecrit le text «Hello world !» dedans</span>
mc.<span class="me1">tf</span>.<a href="http://wiki.media-box.net/documentation/flash/textfield/text"><span class="kw41">text</span></a> = <span class="st0">"Hello world !"</span>;
<span class="br0">}</span>
<span class="co1">// Point d'entrée</span>
<a href="http://wiki.media-box.net/documentation/flash/static"><span class="kw2">static</span></a> <a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> main<span class="br0">(</span> mcRoot:<a href="http://wiki.media-box.net/documentation/flash/MovieClip"><span class="kw3">MovieClip</span></a> <span class="br0">)</span> : Void
<span class="br0">{</span>
app = <a href="http://wiki.media-box.net/documentation/flash/new"><span class="kw1">new</span></a> Exemple<span class="br0">(</span> mcRoot <span class="br0">)</span>;
<span class="br0">}</span>
<span class="br0">}</span></pre>
<h4>La ligne de commande</h4>
<pre>/opt/mtasc/mtasc -swf exemple.swf -main -header 800:600:30 Exemple.as
</pre>
<p>
<strong>/opt/mtasc/mtasc</strong> -> cible le compilateur MTASC<br />
<strong>-swf exemple.swf</strong> -> cible le swf utilisé en entré, comme inexistant dans l'exemple exemple.swf sera le nom du fichier en sortie.<br />
<strong>-main</strong> -> Lance la fonction statique main de Exemple.as<br />
<strong>-header 800:600:30</strong> -> paramètres du fichier swf créé, 800px x 600px, 30fps.<br />
<strong>Exemple.as</strong> -> utilise Exemple.as comme fichier d'initialisation, qui contient la fonction statique main.<br />
Dans cette exemple aucun ciblage vers un chemin de classe (-cp) n'a du être fait, car l'objet TextField utilisé est un objet intrinsèque de Flash,
càd que sont code est contenu dans le Flash playeur.</p>
<h3 id="mx">Exemple d'utilisation d'un composant d'Adobe.</h3>
<p>Avant de continuer, je vous conseil d'aller jetter un oeil au projet <a href="http://www.osflash.org/actionstep" hreflang="fr">ActionStep</a>. <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>
<p>Pour utiliser les composant V2 d'Adobe avec MTASC, il faut utiliser le parametre -mx. </p>
<ul>
<li>Pour commencer on écrit la classe Test qui utilise le composant Alert.</li>
<li>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/class"><span class="kw2">class</span></a> Test <span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> Test<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
mx.<span class="me1">controls</span>.<span class="me1">Alert</span>.<a href="http://wiki.media-box.net/documentation/flash/mouse/show"><span class="kw23">show</span></a><span class="br0">(</span><span class="st0">"Salut les gens!"</span>,<span class="st0">"titre"</span><span class="br0">)</span>;
<span class="br0">}</span>
<span class="br0">}</span></pre>
</li>
<li>Ensuite dans l'IDE de Flash créer un nouveau fla (test.fla).</li>
<li>Placer sur la première image-clef le code suivant :
<pre>var t:Test = new Test();</pre>
</li>
<li>Placer le composant Alert dans la bibliothèque.</li>
<li>Publier, le composant devrait apparaître dans le swf (test.swf). <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></li>
<li>A partir de maintenant on peut fermer Flash, le swf contient tout ce dont on a besoin.</li>
<li>Il reste plus qu'a modifier la classe Test.as à notre guise et de publier avec MTASC. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></li>
<li>
<pre>mtasc -main -mx -swf test.swf -out sortie.swf
-cp "(le chemin de classe de Macromedia)" -cp Test.as</pre>
</li>
</ul>
<p>Petite remarque concernant le chemin de classe sous MacOsX, par défaut le chemin contient des espace dans le nom du dossier Flash :
"/Applications/Macromedia Flash 8/First Run/Classes", ce qui entraîne l'erreur suivante : "(unknown) :
type error class not found : Flash". erixtekila à donné une solution sur la ML d'osFlash cette semaine,
il suffit de créer un <a href="http://fr.wikipedia.org/wiki/Symlink" hreflang="fr">lien symbolique UNIX</a> («Alias»)
qui ne contient pas d'espace et qui renvoi directement sur le dossier mx. Enfin c'est la méthode élégante,
il en existe une autre, qui conciste à copier le dossier mx pour ne plus avoir le «Macromedia Flash 8/First Run», à vous de voir <img src="/themes/default/smilies/wink.png" alt=";)" class="smiley" /></p>
<h3 id="trace">Exemple d'utilisation du parametre -trace.</h3>
<p>Avec MTASC on peut utiliser des fonction trace personnalisée. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/class"><span class="kw2">class</span></a> Test <span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> Test<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
TRACE<span class="br0">(</span><span class="st0">"coucou, c'est moi!"</span><span class="br0">)</span>;
<span class="br0">}</span>
<span class="br0">}</span></pre>
<p>Après compilation avec MTASC</p>
<pre>mtasc -trace MaClasse.monTracePerso</pre>
<p>MTASC remplace les trace() par la fonction MaClasse.monTracePerso. <br />
MaClasse.monTracePerso("coucou, c'est moi!", "Test::test", "Test.as", 3 );</p>
<p>Comme on peut le voir MTASC ajoute 3 arguments :</p>
<ul>
<li>le nom de la classe suivit de la fonction</li>
<li>Le nom du fichier</li>
<li>le numéro de la ligne</li>
</ul>
<h4>Transformer les trace en Logger.LOG de pixLib</h4>
<p>La plus part de mes ancien projet j'utilisais la fonction trace() pour déboguer,
mais depuis quelques semaines j'utilise les logguer de pixLib,
je viens donc monté une petite classe pour transformer les trace() en Logger.LOG</p>
<pre class="actionscript"><span class="coMULTI">/**
* @author [ali_o_kan] - Laurent Deketelaere
*/</span>
<a href="http://wiki.media-box.net/documentation/flash/import"><span class="kw2">import</span></a> com.<span class="me1">bourre</span>.<a href="http://wiki.media-box.net/documentation/flash/math/log"><span class="kw21">log</span></a>.<span class="me1">LogLevel</span>;
<a href="http://wiki.media-box.net/documentation/flash/import"><span class="kw2">import</span></a> com.<span class="me1">bourre</span>.<a href="http://wiki.media-box.net/documentation/flash/math/log"><span class="kw21">log</span></a>.<span class="me1">LogChannel</span>;
<a href="http://wiki.media-box.net/documentation/flash/class"><span class="kw2">class</span></a> LOG2MTASC <a href="http://wiki.media-box.net/documentation/flash/extends"><span class="kw2">extends</span></a> com.<span class="me1">bourre</span>.<a href="http://wiki.media-box.net/documentation/flash/math/log"><span class="kw21">log</span></a>.<span class="me1">Logger</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/public"><span class="kw2">public</span></a> <a href="http://wiki.media-box.net/documentation/flash/static"><span class="kw2">static</span></a> <a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> traceChannel : LogChannel = <a href="http://wiki.media-box.net/documentation/flash/new"><span class="kw1">new</span></a> LogChannel<span class="br0">(</span><span class="st0">"TRACE"</span><span class="br0">)</span>;
<span class="coMULTI">/*
* @param o contenu du trace()
* @param sFunction nom de la classe et de la methode d'où est appelé le trace()
* @param sFile nom du fichier
* @param nLine numéro de la ligne
*/</span>
<a href="http://wiki.media-box.net/documentation/flash/public"><span class="kw2">public</span></a> <a href="http://wiki.media-box.net/documentation/flash/static"><span class="kw2">static</span></a> <a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> LOG<span class="br0">(</span> o, sFunction:<a href="http://wiki.media-box.net/documentation/flash/String"><span class="kw3">String</span></a>, sFile:<a href="http://wiki.media-box.net/documentation/flash/String"><span class="kw3">String</span></a>, nLine:<a href="http://wiki.media-box.net/documentation/flash/Number"><span class="kw3">Number</span></a> <span class="br0">)</span> : Void
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> oTrace = <span class="br0">{</span>_trace:o, _fonction:sFunction, _fichier:sFile, _ligne:nLine<span class="br0">}</span>;
getInstance<span class="br0">(</span><span class="br0">)</span>.<a href="http://wiki.media-box.net/documentation/flash/math/log"><span class="kw21">log</span></a><span class="br0">(</span> oTrace, LogLevel.<span class="me1">DEBUG</span>, traceChannel <span class="br0">)</span>;
<span class="br0">}</span>
<span class="br0">}</span></pre>
<h5>Utilisation</h5>
<pre class="actionscript"><span class="coMULTI">/**
* @author [ali_o_kan] - Laurent Deketelaere
*/</span>
<a href="http://wiki.media-box.net/documentation/flash/import"><span class="kw2">import</span></a> com.<span class="me1">bourre</span>.<span class="me1">utils</span>.<span class="me1">LuminicTracer</span>;
<a href="http://wiki.media-box.net/documentation/flash/import"><span class="kw2">import</span></a> com.<span class="me1">bourre</span>.<a href="http://wiki.media-box.net/documentation/flash/math/log"><span class="kw21">log</span></a>.<span class="me1">Logger</span>;
<a href="http://wiki.media-box.net/documentation/flash/class"><span class="kw2">class</span></a> Main <span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/static"><span class="kw2">static</span></a> <a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> app : Main;
<a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> Main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
Logger.<span class="me1">getInstance</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">addLogListener</span><span class="br0">(</span> LuminicTracer.<span class="me1">getInstance</span><span class="br0">(</span><span class="br0">)</span>, LOG2MTASC.<span class="me1">traceChannel</span> <span class="br0">)</span>;
boucle<span class="br0">(</span><span class="br0">)</span>;
<span class="br0">}</span>
<a href="http://wiki.media-box.net/documentation/flash/public"><span class="kw2">public</span></a> <a href="http://wiki.media-box.net/documentation/flash/static"><span class="kw2">static</span></a> <a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> main<span class="br0">(</span><span class="br0">)</span> : Void
<span class="br0">{</span>
app = <a href="http://wiki.media-box.net/documentation/flash/new"><span class="kw1">new</span></a> Main<span class="br0">(</span><span class="br0">)</span>;
<span class="br0">}</span>
<a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> boucle<span class="br0">(</span><span class="br0">)</span> : Void
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/for"><span class="kw1">for</span></a><span class="br0">(</span><a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> i:<a href="http://wiki.media-box.net/documentation/flash/Number"><span class="kw3">Number</span></a> = <span class="nu0">0</span>; i<<span class="nu0">15</span>; i++<span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/trace"><span class="kw2">trace</span></a><span class="br0">(</span><span class="st0">"une boucle"</span>+i<span class="br0">)</span>;
<span class="br0">}</span>
<span class="br0">}</span>
<span class="br0">}</span></pre>
<h5>MTASC</h5>
<pre>/opt/mtasc/mtasc -header 800:600:25 -main -swf test_trace.swf
-trace LOG2MTASC.LOG
-cp /Users/ali_o_kan/Documents/eclipse/tester/pixLib
-cp /Users/ali_o_kan/Documents/eclipse/pixLib/src Main
</pre>
<h5>Sortie</h5>
<p>Je retrouve dans le FlashInspector mes trace qui renvoit un objet contenant :</p>
<pre>{
_trace: une boucle0,
_function: Main::boucle,
_fichier: Users/ali_o_kan/Documents/eclipse/tester/src/Main.as
_ligne: 27
}
</pre>
<h4>-trace no</h4>
<p>Pour finir avec l'argument -trace, lorsque le débogue est fini, il suffit de faire:</p>
<pre>/opt/mtasc/mtasc -header 800:600:25 -main -swf test_trace.swf -trace no
-cp /Users/ali_o_kan/Documents/eclipse/tester/pixLib
-cp /Users/ali_o_kan/Documents/eclipse/pixLib/src Main
</pre>
<h3>Comparaison avec le compilateur de Macromedia (Adobe).</h3>
<ul>
<li><p>Plus rapide,<br />
il faut 3 à 4 secondes à MTASC pour compiler 300 classes, ce qui met entre 20 à 30 secondes avec le compilateur de MM.</p>
</li>
<li><p>Moins cher,<br />
MTASC est gratuit et open-source, ce qui fait qu'on est certains que son amélioration ne serra jamais stoppé.</p>
</li>
<li><p>Gestion du scoppage des variables local,</p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> f<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x = <span class="nu0">1</span>;
<a href="http://wiki.media-box.net/documentation/flash/if"><span class="kw1">if</span></a><span class="br0">(</span> <a href="http://wiki.media-box.net/documentation/flash/true"><span class="kw1">true</span></a> <span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x = <span class="st0">"hello"</span>;
<span class="co1">// ...</span>
<span class="br0">}</span>
<a href="http://wiki.media-box.net/documentation/flash/trace"><span class="kw2">trace</span></a><span class="br0">(</span>x+<span class="nu0">1</span><span class="br0">)</span>;
<span class="br0">}</span></pre>
<p><strong>Sortie MM</strong> : hello1, <strong>Sortie MTASC</strong> : type error Local variable redefinition : x, MTASC interdit la redéfinition de variable local pour éviter tous problèmes au niveau du typage.</p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x : <a href="http://wiki.media-box.net/documentation/flash/Number"><span class="kw3">Number</span></a> = <span class="nu0">1</span>;
<span class="co1">// ... ici x est un nombre</span>
<span class="br0">}</span>
<span class="co1">// ici aucun accès à x</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x : <a href="http://wiki.media-box.net/documentation/flash/String"><span class="kw3">String</span></a> = <span class="st0">"hello"</span>;
<span class="co1">// ... ici x est une chaine</span>
<span class="br0">}</span>
<span class="co1">// ici aucun accès à x</span>
<span class="br0">}</span></pre>
</li>
<li><p>#include,<br />
n'est plus géré car devenu obsolète avec l'ActionScript 2.</p>
</li>
<li><p>Fonctions local,<br />
alors que le compilateur Macromedia accèpte les fonctions nommé,</p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> f<span class="br0">(</span>x<span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> g<span class="br0">(</span>y<span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/return"><span class="kw2">return</span></a> x+y;
<span class="br0">}</span>
<span class="br0">}</span></pre>
<p>MTASC autorise que la définition de fonctions local anonyme.</p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a> f<span class="br0">(</span>x<span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> g:Function = <a href="http://wiki.media-box.net/documentation/flash/function"><span class="kw3">function</span></a><span class="br0">(</span>y<span class="br0">)</span>
<span class="br0">{</span>
<a href="http://wiki.media-box.net/documentation/flash/trace"><span class="kw2">trace</span></a><span class="br0">(</span>x+y<span class="br0">)</span>;
<span class="br0">}</span>
<span class="br0">}</span></pre>
</li>
<li><p>Typage strict des Tableaux,<br />
permet de typé les données contenu dans un Array.</p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> tmp = <a href="http://wiki.media-box.net/documentation/flash/new"><span class="kw1">new</span></a> <a href="http://wiki.media-box.net/documentation/flash/Array"><span class="kw3">Array</span></a><span class="br0">(</span><span class="br0">)</span>;
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> a : <span class="coMULTI">/*Number*/</span> <a href="http://wiki.media-box.net/documentation/flash/Array"><span class="kw3">Array</span></a> = tmp;</pre></li>
<li><p>Typage local des variable inférence (-infer),</p>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x : <a href="http://wiki.media-box.net/documentation/flash/String"><span class="kw3">String</span></a> = <span class="st0">"hello"</span>;
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x : <a href="http://wiki.media-box.net/documentation/flash/Number"><span class="kw3">Number</span></a> = <a href="http://wiki.media-box.net/documentation/flash/Math"><span class="kw3">Math</span></a>.<a href="http://wiki.media-box.net/documentation/flash/math/cos"><span class="kw21">cos</span></a><span class="br0">(</span><a href="http://wiki.media-box.net/documentation/flash/Math"><span class="kw3">Math</span></a>.<a href="http://wiki.media-box.net/documentation/flash/math/PI"><span class="kw21">PI</span></a><span class="br0">)</span>;
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x : MyClass = <a href="http://wiki.media-box.net/documentation/flash/new"><span class="kw1">new</span></a> MyClass<span class="br0">(</span><span class="br0">)</span>;</pre>
<pre class="actionscript"><a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x = <span class="st0">"hello"</span>;
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x = <a href="http://wiki.media-box.net/documentation/flash/Math"><span class="kw3">Math</span></a>.<a href="http://wiki.media-box.net/documentation/flash/math/cos"><span class="kw21">cos</span></a><span class="br0">(</span><a href="http://wiki.media-box.net/documentation/flash/Math"><span class="kw3">Math</span></a>.<a href="http://wiki.media-box.net/documentation/flash/math/PI"><span class="kw21">PI</span></a><span class="br0">)</span>;
<a href="http://wiki.media-box.net/documentation/flash/var"><span class="kw1">var</span></a> x = <a href="http://wiki.media-box.net/documentation/flash/new"><span class="kw1">new</span></a> MyClass<span class="br0">(</span><span class="br0">)</span>;</pre>
</li>
<li>Changements mineurs,<ul>
<li>arguments est supporté, mais pas via des appel dynamique (par exemple eval('arguments"); ).</li>
<li>Le retour variables getter doit être le même que celui des setter et doit être spécifié.</li>
<li>Les fonctions sans retour sont automatiquement typé en Void.</li>
<li>eval("this") n'est pas effectué.</li>
</ul>
</li>
</ul>
<p>Je terminerai en disant merci à Nicolas, qui nous offre un compilateur digne du nom.</p>
<h3>infos +</h3>
<ul>
<li><a href="http://ncannasse.free.fr/" hreflang="en">ncannasse.free.fr</a>, blog de Nicolas Cannasse.</li>
<li><a href="http://www.mtasc.org/" hreflang="en">mtasc.org</a>, site officiel de MTASC.</li>
<li><a href="http://www.haxe.org/" hreflang="en">haxe.org</a>, site officiel de haXe.</li>
<li><a href="http://www.osflash.org/hamtasc/" hreflang="en">Hacking Mtasc</a>, ajouter des fonctions à MTASC.</li>
<li><a href="http://wiki.media-box.net/tutoriaux/flash/utilisation_swfmill_ant_mtasc" hreflang="fr">MTASC + swfmill</a>, comment gèrer ses bibliothèques avec MTASC.</li>
<li><a href="http://blog.lalex.com/archives/200601/300-connecteur-a-console-sos.html" hreflang="fr">SOSTracer de LAlex</a>, une classe libre de toute librairies pour logguer.</li>
<li><a href="http://weblog.shaoken.be/index.php?2005/12/11/37-mtasc-tableaux-types" hreflang="fr">Tableaux typés</a>, comment utiliser le typage des Arrays.</li>
<li><a href="http://www.opinionz.be/blog/2005/05/30/415-mtasceclipse-installer-et-utiliser-un-environnement-actionscript-libre-et-productif-sous-linuxg/" hreflang="fr">opinionz.be</a>, MTASC + Eclipse sous Linux.</li>
<li><a href="http://flashdevelop.org/" hreflang="en">flashdevelop.org</a>, utiliser MTASC et SWFMILL de manière transparente (win only).</li>
<li><a href="http://www.animatlantique.net/index.php/2005/05/08/191-mtasc---le-compilateur-libre-das2" hreflang="fr">Animatlantique</a>, une bonne introduction, pour ceux qui on pas compris ce que j'ai marqué plus haut.</li>
</ul>[pixLib] - Comment se simplifier la vieurn:md5:e7279a67ee6f64bd226b8976299c7df02006-01-01T17:22:00+00:002007-11-16T07:41:02+00:00Laurent DeketelaereFlash plateformeActionscriptFlashosFlashPixlib<p>C'est mi 2004 que Francis Bourre commença le développement de pixLib. La beta test débuta en <a href="http://www.tweenpix.net/blog/index.php?2004/09/03/446-pixlib-cherche-collaborateurs">septembre 2004</a>, elle rassembla une bonne dizaine de personnes actives. Et c'est en octobre 2005 que pixLib fut présenté comme une librairie open-source sur le site d'<a href="http://www.osflash.org/pixlib">osFlash.org</a>. Aujourd'hui pixLib en est à sa revision 22 et est un framework stable.
A l'origine pixLib devait être une librairie qui faciliterait le développement de <a href="http://www.tweenpix.net/blog/index.php?2004/06/02/369-pixlib">jeu en Flash.</a> Mais avec le temps on c'est retrouvé avec une librairie légère, facile d'accès et qui encourage le polymorphisme, le typage fort et le débuggage, le tout compatible avec le player Flash 6. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
<p>Pour les personnes qui se demandent ce qu'est une librairie en ActionScript.
En faisant court il s'agit d'un ensemble de classes (AS2), qui dans le cadre de pixLib nous facilite le développement de tout les jours.</p>
<p>Dans ce premier post je ne rentrerai pas dans les détails, je vais faire un survol rapide du contenu de pixLib, d'autres billets suivront avec des exemples pratiques.</p> <h3>Les différents parties de pixLib</h3>
<ul>
<li><h3>commands</h3>
<p>Dans ce pack on retrouve un ensemble de classes qui nous permettent d'encapsuler le déroulement d'actions dans un objet (basé sur le pattern command).</p>
</li>
<li><h3>core</h3>
<p>Il me manque quelques explications, c'est encore nébuleux dans mon esprit, je crois que ça a pas mal bougé depuis la beta. Si j'ai bien compris ça permet de donner une valeur unique à chaque éléments dans l'animation, ce qui permet de parser des séries plus efficacement. la classe principale de ce pack est HashCodeFactory qui est importée dans la majorité des classes de pixLib.</p>
</li>
<li><h3>data</h3>
<p>data est une des plus grosse partie de pixLib, on y retrouve des classes comme AbstractFactory (pattern Fabrique Abstraite), GraphicLib (gestion de chargements multiples de swf) et l'excellant XMLToObject qui déserialise automatiquement un fichier XML en objet défini (Number, String, Array,…, Perso).</p>
</li>
<li><h3>events</h3>
<p>Je crois que son nom parle de lui même. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>
</li>
<li><h3>log</h3>
<p>Ici on retrouve tout ce qu'il faut pour débugguer une application.</p>
</li>
<li><h3>medias</h3>
<p>Gestion des médias de type son et vidéo</p>
</li>
<li><h3>mvc</h3>
<p>Version ActionScript du pattern Modèle-Vue-Contrôleur.</p>
</li>
<li><h3>structures</h3>
<p>Dans structures on retrouve un ensemble de classes génériques que Francis a développé pour faire de l'iso3d en Flash, développé à l'origine pour <a href="http://www.atomicboarder.com">Atomic Boarder</a></p>
</li>
<li><h3>transitions</h3>
<p>Avec cette implémentation des transitions on a la possibilité de travailler avec plusieurs tempo (frames rate) avec l'objet MSBeacon.</p>
</li>
<li><h3>utils</h3>
<p>Représente trois classes LuminicTracer, SharedObjectUtils, SosTracer</p>
</li>
<li><h3>visual</h3>
<p>Contient ViewHelper, cette classe n'est pas encore documentée, tout ce que je sais c'est qu'elle est liée à GraphicLibLocator. :p</p>
</li>
</ul>
<h3>Quelques Liens :</h3>
<ul>
<li><a href="http://osflash.org/pixlib" hreflang="uk">la page officielle</a></li>
<li><a href="http://www.geturl.net/pixlib" hreflang="uk">la documentation</a></li>
<li><a href="http://www.tweenpix.net/blog/index.php?q=pixlib" hreflang="fr">les articles sur tweenpix</a></li>
</ul>
<p>Je n'ai qu'une chose à dire, merci Francis. <img src="/themes/default/smilies/smile.png" alt=":)" class="smiley" /></p>