<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.pabloprieto.net/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Pablo Prieto - Blog - flash</title>
  <link>http://blog.pabloprieto.net/index.php/</link>
  <description>&quot;Faire des sites web c'est pas facile tous les jours&quot;</description>
  <language>fr</language>
  <pubDate>Wed, 18 Aug 2010 15:35:35 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Flash et bugs : switch/case et variables de type XML</title>
    <link>http://blog.pabloprieto.net/index.php/post/2009/09/08/Flash-et-bugs-%3A-switch/case-et-variables-de-type-XML</link>
    <guid isPermaLink="false">urn:md5:c7366eee473603f7129e15ebaa6cb32d</guid>
    <pubDate>Tue, 08 Sep 2009 19:46:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>bug</category><category>flash</category>    
    <description>    &lt;p&gt;Bonjour les amis, aujourd'hui un bug tout en subtilité sur lequel je suis tombé hier&amp;nbsp;:&lt;/p&gt;


&lt;h3&gt;Conditions&amp;nbsp;:&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vous êtes à l'intérieur d'une clause switch/case&lt;/li&gt;
&lt;li&gt;Vous voulez déclarer une variable de type XML ou XMLList et lui affecter une valeur &lt;strong&gt;sur une même ligne&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bingo, &lt;strong&gt;le contenu de la variable sera null&lt;/strong&gt; ...&lt;/p&gt;


&lt;h3&gt;Exemple&amp;nbsp;:&lt;/h3&gt;

&lt;pre&gt;
switch(condition)
{	
  case 0:
  var content:XML = xmlListObject.node.(@id == id)[0]; // l'expression renvoie bien un noeud XML
  trace(content); // -&amp;gt; null
  break;

  case 1:
  ...
}
&lt;/pre&gt;


&lt;h3&gt;Solution&amp;nbsp;:&lt;/h3&gt;


&lt;p&gt;Très simple à résoudre, il suffit de déclarer puis affecter la valeur en 2 temps&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
switch(condition)
{	
  case 0:
  var content:XML;
  content = xmlListObject.node.(@id == id)[0];
  trace(content);
  break;

  case 1:
  ...
}
&lt;/pre&gt;


&lt;p&gt;Voilà, simple et efficace. Merci à &lt;a href=&quot;http://www.funky-monkey.nl/blog/2009/05/06/tracing-xmllist-within-a-switch-returns-null/&quot; hreflang=&quot;en&quot;&gt;ce billet&lt;/a&gt; pour avoir trouvé la solution, à &lt;a href=&quot;http://supasuga.com/&quot; hreflang=&quot;fr&quot;&gt;Fred&lt;/a&gt; pour avoir trouvé ce billet, et visiblement à Adobe pour avoir corrigé le souci dans la dernière version du player (la page du bug sur Jira est &lt;a href=&quot;http://bugs.adobe.com/jira/browse/ASC-2901&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;).&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2009/09/08/Flash-et-bugs-%3A-switch/case-et-variables-de-type-XML#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2009/09/08/Flash-et-bugs-%3A-switch/case-et-variables-de-type-XML#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/48</wfw:commentRss>
      </item>
    
  <item>
    <title>Flash et bugs : Mozilla, wmode et champs de saisie</title>
    <link>http://blog.pabloprieto.net/index.php/post/2009/06/30/Flash-et-bugs-%3A-Mozilla-et-champs-textes</link>
    <guid isPermaLink="false">urn:md5:e5f433c81e36be25a3723731ea4fbc1a</guid>
    <pubDate>Tue, 30 Jun 2009 11:54:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>bug</category><category>clavier</category><category>firefox</category><category>flash</category><category>windows</category><category>wmode</category>    
    <description>    &lt;p&gt;J'inaugure aujourd'hui une nouvelle rubrique consacrée aux bugs de Flash (oui ça mérite bien une rubrique à part entière).&lt;/p&gt;


&lt;p&gt;Pour commencer, un bug malheureusement assez connu et très ennuyeux, qui perdure depuis Flash 6 et toujours pas vraiment résolu à ce jour&amp;nbsp;: &lt;strong&gt;le bug &quot;du wmode&quot;&lt;/strong&gt;. Pour les chanceux qui ne seraient pas encore tombés dessus, &lt;a href=&quot;http://www.degree.no/flashbug/&quot; hreflang=&quot;en&quot;&gt;voici une démonstration&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;Conditions&amp;nbsp;:&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vous êtes sur Firefox, Safari ou Opera, &lt;strong&gt;sur Windows uniquement&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Vous n'êtes pas américain et votre clavier n'est pas en configuration qwerty US&lt;/li&gt;
&lt;li&gt;Vous avez une animation flash &lt;strong&gt;avec le paramètre wmode reglé sur &quot;transparent&quot;&lt;/strong&gt; (pour pouvoir superposer des éléments html)&lt;/li&gt;
&lt;li&gt;Vous avez un champ de saisie&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si vous réunissez ces conditions, bravo, vous vous rendez compte que vous ne pouvez pas taper le caractère &quot;@&quot;, &quot;?&quot; ou bien un chiffre de la rangée haute (les chiffres du pavé numériques fonctionnent). Plutôt gênant par exemple quand vous devez saisir une adresse email.&lt;/p&gt;


&lt;h3&gt;Solutions possibles&amp;nbsp;:&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Attendre la saint glinglin qu'Adobe se bouge les fesses (le rapport de bug est &lt;a href=&quot;http://bugs.adobe.com/jira/browse/FP-501&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Prévenir votre client du souci le plus en amont possible (ne vous inquietez pas, votre client adore entendre ce genre de justification technique)&lt;/li&gt;
&lt;li&gt;Essayer un des hacks proposés &lt;a href=&quot;http://blog.madebypi.co.uk/2009/04/21/transparent-flash-text-entry/&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;, &lt;a href=&quot;http://nicolas.cynober.fr/blog/116,flex-workaround-for-wmode-bug.html&quot; hreflang=&quot;en&quot;&gt;ici&lt;/a&gt;, ou encore &lt;a href=&quot;http://blog.sebastian-martens.de/2009/05/swfinputs-solving-mozilla-transparent-mode-win-special-chars-within-inputs/&quot; hreflang=&quot;en&quot;&gt;là&lt;/a&gt;, principalement à base de javascript à la rescousse.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Pour aller plus loin...&lt;/h3&gt;


&lt;p&gt;Le souci vient en fait des deux cotés, Adobe et Mozilla, comme on peut le voir &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=347185#c56&quot; hreflang=&quot;en&quot;&gt;dans cette discussion&lt;/a&gt;. Voir notamment les messages de Masayuki Nakano pour Mozilla, et Jeff Mott pour Adobe.&lt;/p&gt;


&lt;p&gt;En résumé, un correctif vient d'être intégré récemment dans le lecteur Flash pour qu'il supporte correctement les entrées clavier unicode, et on attend maintenant la prochaine release de Firefox pour les corrections coté Mozilla. Je viens de tester avec Firefox 3.5 et ça fonctionne effectivement mais seulement à partir du deuxième caractère saisi (!). Bref, c'est pas encore trop ça mais ils y travaillent. À suivre donc...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2009/06/30/Flash-et-bugs-%3A-Mozilla-et-champs-textes#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2009/06/30/Flash-et-bugs-%3A-Mozilla-et-champs-textes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/47</wfw:commentRss>
      </item>
    
  <item>
    <title>3D isométrique et pathfinding</title>
    <link>http://blog.pabloprieto.net/index.php/post/2008/10/27/3D-isometrique-et-pathfinding</link>
    <guid isPermaLink="false">urn:md5:960eb1ddf751c553220c3d1b0216b031</guid>
    <pubDate>Mon, 27 Oct 2008 10:09:00 +0100</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>3d</category><category>actionscript</category><category>as3</category><category>flash</category><category>isométrique</category><category>pathfinding</category>    
    <description>&lt;p&gt;Voici quelques temps que je voulais me mettre au développement de jeux en Flash, je me suis donc confronté récemment à la réalisation d'un moteur 3D isométrique. Je me suis notamment intéressé à la génération et au positionnement des &quot;tiles&quot; et des différents objets de la carte, ainsi qu'à la gestion du &lt;a href=&quot;http://fr.wikipedia.org/wiki/Pathfinding&quot; hreflang=&quot;fr&quot;&gt;pathfinding&lt;/a&gt;, c'est à dire le déplacement des objets sur la carte en tenant compte des obstacles.&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/iso.png&quot; alt=&quot;3D isométrique&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Le code est très largement inspiré de &lt;a href=&quot;http://www.tonypa.pri.ee/tbw/start.html&quot; hreflang=&quot;en&quot;&gt;cet excellent tutorial&lt;/a&gt;, que j'ai réadaptée et réécrit en Actionscript 3.&lt;/p&gt;


&lt;p&gt;La principale différence concerne la gestion du Z-Sorting. En effet en Actionscript 3 plus question de placer un symbole sur un niveau au choix avec un &lt;code&gt;swapDepths()&lt;/code&gt;... Pour y remédier, la méthode &lt;code&gt;render()&lt;/code&gt; de la class Map se charge donc de réorganiser la profondeur de tous les objets de la carte lorsque l'un d'entre eux se déplace.&lt;/p&gt;


&lt;p&gt;Je suis donc arrivé à un petit moteur très basique que vous pouvez télécharger librement, le code étant sous &lt;a href=&quot;http://creativecommons.org/licenses/by/2.0/fr/&quot; hreflang=&quot;fr&quot;&gt;licence Creative Commons&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Et voici la démo, cliquez sur un des &quot;personnages&quot; puis sur n'importe quel endroit de la carte pour qu'il s'y déplace&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pabloprieto.net/demos/iso/&quot; hreflang=&quot;fr&quot;&gt;Voir la démo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.pabloprieto.net/public/tequila_iso_0.1.zip&quot; hreflang=&quot;fr&quot;&gt;Télécharger le code source&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enjoy :)&lt;/p&gt;</description>
    
          <enclosure url="http://blog.pabloprieto.net/public/tequila_iso_0.1.zip"
      length="63035" type="application/zip" />
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2008/10/27/3D-isometrique-et-pathfinding#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2008/10/27/3D-isometrique-et-pathfinding#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/42</wfw:commentRss>
      </item>
    
  <item>
    <title>Chargement dynamique de polices avec Flash et Actionscript 3</title>
    <link>http://blog.pabloprieto.net/index.php/post/2008/02/22/Chargement-dynamique-de-polices-avec-Flash-et-Actionscript-3</link>
    <guid isPermaLink="false">urn:md5:827e3ad64f12ddebc3840e91d7db01c5</guid>
    <pubDate>Fri, 22 Feb 2008 11:07:00 +0100</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>as3</category><category>flash</category><category>flex</category><category>polices</category>    
    <description>&lt;p&gt;Ayant eu récemment besoin de faire ce genre de choses sur un projet, voici un tutoriel sur le chargement dynamique de polices de caractères en Actionscript 3. Ceci peut être particulièrement utile dans le cas par exemple de sites multilingues comportant des langues asiatiques, les polices de caractères chinoises ou japonaises pouvant être particulièrement lourdes à charger...&lt;/p&gt;    &lt;p&gt;Le principe sera le suivant&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;La police de caractère est contenue dans un fichier SWF externe.&lt;/li&gt;
&lt;li&gt;Dans ce SWF, la police est exportée et est disponible sous la forme d'une classe héritant de la classe Font.&lt;/li&gt;
&lt;li&gt;Le SWF principal charge ce SWF avec un objet Loader, puis enregistre la classe de police dans la liste des polices disponibles.&lt;/li&gt;
&lt;li&gt;La police est ensuite utilisable dans l'application principale, dans un objet TextFormat ou pour un style CSS avec l'objet StyleSheet, comme vous voulez.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Création du SWF contenant la police&lt;/h3&gt;


&lt;p&gt;Pour générer le fichier de police, vous pouvez utiliser au choix Flex ou Flash. Le résultat est similaire, en revanche &lt;strong&gt;Flex permet de choisir une plage limitée de caractères à exporter&lt;/strong&gt; (par exemple uniquement les minuscules, uniquement les caractères cyrilliques, etc...). Ceci permet donc d'optimiser au mieux le poids de votre SWF en fonction de vos besoins. Avec Flash en revanche, vous êtes contraint d'embarquer tous les caractères de la police dans le SWF final, c'est tout ou rien :)&lt;/p&gt;


&lt;p&gt;Je vais détailler les deux méthodes, en commençant par Flex&amp;nbsp;:&lt;/p&gt;


&lt;h4&gt;Avec Flex&lt;/h4&gt;


&lt;p&gt;Nous allons ici utiliser le SDK de Flex pour générer ce fichier. Voici ce à quoi va ressembler notre classe pour générer le fichier SWF contenant la police. j'ai au préalable placé le fichier de police Futura.ttf dans un dossier &quot;assets&quot;.&lt;/p&gt;

&lt;pre&gt;
package{
	
	import flash.display.Sprite;
	
	[SWF(backgroundColor='0xFFFFFF', width='100', height='100')]

	public class Futura extends Sprite {
		
		[Embed(source = &amp;quot;assets/Futura.ttf&amp;quot;, fontName = &amp;quot;Futura&amp;quot;)]
		
		public static var Futura:Class;
		
	}
	
}
&lt;/pre&gt;


&lt;p&gt;Compilez et vous obtenez un magnifique SWF vide, mais contenant bien la police embarquée.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;En bonus, choisir la plage de caractères :&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Pour limiter l'exportation à une plage prédéfinie de caractères, la première chose à faire est d'éditer le fichier flex-config.xml présent dans le dossier &quot;frameworks&quot;, à l'intérieur du dossier d'installation du SDK Flex. Ouvrez également le fichier flash-unicode-table.xml qui se trouve dans le même dossier.&lt;/p&gt;


&lt;p&gt;Dans flex-config.xml, rendez-vous dans la balise &amp;lt;fonts&amp;gt;, c'est ici que vous allez pouvoir créer des plages de caractères personnalisées, de cette manière&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
 &amp;lt;fonts&amp;gt;
 	[...]
	&amp;lt;languages&amp;gt;
		&amp;lt;language-range&amp;gt;
			&amp;lt;lang&amp;gt;Uppercase&amp;lt;/lang&amp;gt;
			&amp;lt;range&amp;gt;U+0020,U+0041-U+005A&amp;lt;/range&amp;gt;
		&amp;lt;/language-range&amp;gt;
	&amp;lt;/languages&amp;gt;
 	[...]
&amp;lt;/font&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Comme vous le voyez, il suffit de créer un noeud &amp;lt;language-range&amp;gt; avec à l'intérieur une balise &amp;lt;lang&amp;gt; pour donner un nom à votre plage, et une balise &amp;lt;range&amp;gt; pour spécifier les plages de caractères unicodes. Bien bien, mais comment connaitre ces plages&amp;nbsp;? C'est le moment d'ouvrir le fichier flash-unicode-table.xml qui se trouve juste à coté :) Vous y trouverez plein de plages prédéfinies (majuscules uniquement, Kanji japonais, etc...) que vous pouvez copier-coller dans votre flex-config.xml.&lt;/p&gt;


&lt;p&gt;Revenez ensuite à votre classe, et modifiez le metatag Embed comme ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
[Embed(source = &amp;quot;assets/Futura.ttf&amp;quot;, fontName = &amp;quot;Futura&amp;quot;, unicodeRange=&amp;quot;Uppercase&amp;quot;)]
&lt;/pre&gt;


&lt;p&gt;Compilez et c'est prêt&amp;nbsp;!&lt;/p&gt;


&lt;h4&gt;Avec Flash CS3&lt;/h4&gt;


&lt;p&gt;Si vous optez pour Flash, voici la procédure&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Créer un nouveau document&lt;/li&gt;
&lt;li&gt;Créez un nouveau symbole de police dans la librairie (clic droit -&amp;gt; &quot;Nouvelle police...&quot;)&lt;/li&gt;
&lt;li&gt;Dans le champ Nom, donnez lui... un nom (de préférence le même que le nom original de la police, ça évitera les confusions...)&lt;/li&gt;
&lt;li&gt;Vous pouvez choisir les version gras, italique, ou gras italique en cochant les cases appropriées, puis cliquez sur OK. Attention il s'agit d'un choix &lt;strong&gt;exclusif&lt;/strong&gt;, si vous voulez que la police soit disponible en version normale et gras par exemple, vous devrez avoir 2 symboles de police dans votre bibliothèque, comme deux polices distinctes.&lt;/li&gt;
&lt;li&gt;Faites ensuite un clic droit sur le symbole de police, puis cliquez sur &quot;Liaison...&quot;&lt;/li&gt;
&lt;li&gt;Choisissez un nom de classe pour votre police, puis cliquez sur OK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voilà, votre police est désormais exportée pour Actionscript et sera donc exportée et utilisable lors de la compilation du SWF. Cette police sera disponible sous la forme d'une classe héritant de &lt;a href=&quot;http://livedocs.adobe.com/flash/9.0_fr/ActionScriptLangRefV3/flash/text/Font.html&quot;&gt;la classe Font&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Compilez et votre fichier SWF de police est prêt.&lt;/p&gt;


&lt;h3&gt;Création de l'animation principale&lt;/h3&gt;


&lt;p&gt;L'application principale sera composée d'un simple champ texte auquel on va appliquer un objet TextFormat avec notre police chargée dynamiquement.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Créez un nouveau document FLA&lt;/li&gt;
&lt;li&gt;Placez un champ texte dynamique sur la scène, et donnez lui &quot;message_txt&quot; comme nom d'occurrence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Voici ensuite le code à placer sur la première frame de l'application (vous pouvez bien sûr créer une classe d'application à la place, je vous laisse adapter le code en fonction)&lt;/p&gt;


&lt;p&gt;Première étape, charger le fichier SWF contenant la police, avec la classe Loader&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var loader:Loader;

function init(){	
	loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontCompleteHandler);
	loader.load(new URLRequest(&amp;quot;Futura.swf&amp;quot;));
}
&lt;/pre&gt;


&lt;p&gt;Lorsque le chargement est fini, nous allons enregistrer la classe correspondant au symbole de police dans la liste des polices disponibles&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
function fontCompleteHandler(event:Event){	
	var domain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain;
	var font:Class = domain.getDefinition(&amp;quot;Futura&amp;quot;) as Class;
	Font.registerFont(font);
	
	initStyles();
}
&lt;/pre&gt;


&lt;p&gt;Petite subtilité ici, la classe Futura n'est pas directement disponible dans le contexte de l'application principale. En effet, chaque SWF contient son propre &quot;domaine d'application, c'est à dire que chaque classe est &quot;rangée&quot; dans un domaine distinct pour chaque SWF chargé, ceci pour éviter par exemple des conflits entre classes.&lt;/p&gt;


&lt;p&gt;Ici on récupère donc la classe en allant chercher le domaine d'application du SWF chargé, puis avec la méthode getDefinition(). Le paramètre à passer ici est &lt;strong&gt;le nom de la classe tel que vous l'avez renseigné dans la boite de dialogue Liaison&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;Enfin il nous reste à créer l'objet TextFormat, et à remplir et styler notre champ texte&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
function initStyles(){	
	var tf:TextFormat = new TextFormat(&amp;quot;Futura&amp;quot;,16,0xFF0000);
	
	message_txt.embedFonts = true;
	message_txt.antiAliasType = AntiAliasType.ADVANCED;
	message_txt.text = &amp;quot;Lorem ipsum dolor sit amet&amp;quot;;
	message_txt.setTextFormat(tf);
}
&lt;/pre&gt;


&lt;p&gt;Attention ici, le nom de la police à utiliser pour l'objet TextFormat est &lt;strong&gt;le nom que vous avez défini dans la boite de dialogue &quot;Propriétés&quot;&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;Voici donc le code complet de l'application&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var loader:Loader;

init();

function init(){	
	loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, fontCompleteHandler);
	loader.load(new URLRequest(&amp;quot;Futura.swf&amp;quot;));
}

function fontCompleteHandler(event:Event){	
	var domain:ApplicationDomain = loader.contentLoaderInfo.applicationDomain;
	var font:Class = domain.getDefinition(&amp;quot;Futura&amp;quot;) as Class;
	Font.registerFont(font);
	
	initStyles();
}

function initStyles(){	
	var tf:TextFormat = new TextFormat(&amp;quot;Futura&amp;quot;,16,0xFF0000);
	
	message_txt.embedFonts = true;
	message_txt.antiAliasType = AntiAliasType.ADVANCED;
	message_txt.text = &amp;quot;Hello Futura !&amp;quot;;
	message_txt.setTextFormat(tf);
}
&lt;/pre&gt;</description>
    
          <enclosure url="http://blog.pabloprieto.net/public/FontLoading-Flash.zip"
      length="38618" type="application/zip" />
          <enclosure url="http://blog.pabloprieto.net/public/FontLoading-Flex.zip"
      length="193402" type="application/zip" />
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2008/02/22/Chargement-dynamique-de-polices-avec-Flash-et-Actionscript-3#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2008/02/22/Chargement-dynamique-de-polices-avec-Flash-et-Actionscript-3#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/35</wfw:commentRss>
      </item>
    
  <item>
    <title>Du nouveau du coté de l'intégration Flash</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/11/12/Du-nouveau-du-cote-de-lintegration-Flash</link>
    <guid isPermaLink="false">urn:md5:a7f2a6993ff6dc4686cd560c3784af50</guid>
    <pubDate>Mon, 12 Nov 2007 11:26:00 +0100</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>adobe</category><category>flash</category><category>javascript</category><category>swfobject</category><category>ufo</category>    
    <description>    &lt;p&gt;Après avoir réglé son différent avec Eolas et conclu un accord &quot;à l'amiable&quot;, Microsoft &lt;a href=&quot;http://www.pcinpact.com/actu/news/39944-microsoft-eolas-internet-explorer-activex-in.htm&quot; hreflang=&quot;fr&quot;&gt;a décidé de supprimer l'avertissement d'activation pour les contenus Active X dans Internet Explorer&lt;/a&gt;. La mise à jour, prévue pour avril 2008 (!) nous fera donc enfin oublier le message &quot;Cliquez ici pour activer et utiliser ce contrôle&quot; sur les animations Flash.&lt;/p&gt;


&lt;p&gt;Pendant ce temps, le développement de SWFObject se poursuit, &lt;a href=&quot;http://blog.deconcept.com/&quot; hreflang=&quot;en&quot;&gt;Geoff Stearns&lt;/a&gt; travaille désormais avec &lt;a href=&quot;http://www.bobbyvandersluis.com/&quot; hreflang=&quot;en&quot;&gt;Bobby van der Sluis&lt;/a&gt; et Michael Williams d'Adobe sur SWFObject 2.0, qui deviendra la méthode standard d'intégration Flash préconisée par Adobe. SWFObject 2 sera donc le successeur désigné de &lt;a href=&quot;http://blog.deconcept.com/swfobject/&quot; hreflang=&quot;en&quot;&gt;SWFObject&lt;/a&gt;, &lt;a href=&quot;http://www.bobbyvandersluis.com/ufo/&quot; hreflang=&quot;en&quot;&gt;UFO&lt;/a&gt; et du &lt;a href=&quot;http://www.adobe.com/products/flashplayer/download/detection_kit/&quot; hreflang=&quot;en&quot;&gt;Flash player detection kit&lt;/a&gt; d'Adobe. La beta 6 est actuellement disponible sur &lt;a href=&quot;http://code.google.com/p/swfobject/&quot; hreflang=&quot;en&quot;&gt;Google Code&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/11/12/Du-nouveau-du-cote-de-lintegration-Flash#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/11/12/Du-nouveau-du-cote-de-lintegration-Flash#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/33</wfw:commentRss>
      </item>
    
  <item>
    <title>Classe principale en Actionscript 2</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/08/09/Classe-principale-en-Actionscript-2</link>
    <guid isPermaLink="false">urn:md5:0d9905377f4438094966eebe27fac20d</guid>
    <pubDate>Thu, 09 Aug 2007 11:24:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>classe</category><category>flash</category>    
    <description>    &lt;p&gt;La possibilité dans Flash CS3 de pouvoir spécifier une classe principale pour son application, ça donne envie de pouvoir faire la même chose en Actionscript 2/Flash 8 .&lt;/p&gt;


&lt;p&gt;Pas de souci, voici le code de la classe&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
class Application extends MovieClip{
	
	public function Application(){
		//...
	}
	
	public static function main(target:MovieClip):Void {
		target.__proto__ = Application.prototype;
		Function(Application).apply(target, null);
	}
	
}
&lt;/pre&gt;


&lt;p&gt;Oui alors bon il reste quand même une ligne de code à placer sur la première frame dans le FLA:&lt;/p&gt;

&lt;pre&gt;
Application.main(this);
&lt;/pre&gt;


&lt;p&gt;Voilà, c'est tout. La méthode main permet dans un premier temps, de spécifier le niveau 0 du swf comme une instance de la classe Application (&lt;em&gt;this&lt;/em&gt; dans notre classe fera donc bien référence à _root). La deuxième ligne permet ensuite d'appeler le constructeur.&lt;/p&gt;


&lt;p&gt;Astuce trouvée via &lt;a href=&quot;http://www.dannypatterson.com/Resources/Blog/EntryDetail.cfm?id=106&quot; hreflang=&quot;en&quot;&gt;Danny Patterson&lt;/a&gt; et &lt;a href=&quot;http://www.bit-101.com/blog/?p=857&quot; hreflang=&quot;en&quot;&gt;BIT-101&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/08/09/Classe-principale-en-Actionscript-2#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/08/09/Classe-principale-en-Actionscript-2#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/30</wfw:commentRss>
      </item>
    
  <item>
    <title>Sloppy, le simulateur de modem 56k</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/07/23/Sloppy-le-simulateur-de-modem-56k</link>
    <guid isPermaLink="false">urn:md5:f536de8d6e5e6c73d719581541576bf6</guid>
    <pubDate>Mon, 23 Jul 2007 14:06:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>flash</category><category>sloppy</category><category>tests</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://www.dallaway.com/sloppy/&quot; hreflang=&quot;en&quot;&gt;Sloppy&lt;/a&gt; est un petit logiciel bien pratique, puisqu'il permet de simuler une bande passante réduite. Ça permet par exemple de tester son site en local, dans son navigateur habituel, à la vitesse d'une connexion 56k ou autre (les choix vont de 9,6 à 512k).&lt;/p&gt;


&lt;p&gt;C'est particulièrement utile pour un site flash avec beaucoup de chargements asynchrones, cela permet de vérifier que ceux-ci se font correctement dans un environnement &quot;réel&quot;, contrairement au mode &quot;Simuler le téléchargement&quot; disponible dans Flash.&lt;/p&gt;


&lt;p&gt;Sloppy est une application Java, disponible donc sur Windows, Mac OS X et Linux.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/sloppy.png&quot; alt=&quot;Sloppy&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/07/23/Sloppy-le-simulateur-de-modem-56k#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/07/23/Sloppy-le-simulateur-de-modem-56k#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/27</wfw:commentRss>
      </item>
    
  <item>
    <title>Red5 : installation sous Mac OS X</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/05/15/Red5-%3A-installation-sous-Mac-OS-X</link>
    <guid isPermaLink="false">urn:md5:44c59fbed720890fb022064c03cde0f3</guid>
    <pubDate>Tue, 15 May 2007 12:58:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>flash</category><category>mac</category><category>red5</category>    
    <description>&lt;p&gt;Un petit tutoriel pour vous permettre de démarrer rapidement sous &lt;a href=&quot;http://osflash.org/red5&quot; hreflang=&quot;en&quot;&gt;Red5&lt;/a&gt;&amp;nbsp;: installer et configurer le serveur, puis créer votre première application. Je vais détailler l'installation sous Mac OS X mais à quelques détails prêt ce tutorial peut être suivi et adapté pour les autres plates-formes.&lt;/p&gt;    &lt;p&gt;Vous aurez besoin&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;de &lt;a href=&quot;http://osflash.org/red5&quot; hreflang=&quot;en&quot;&gt;Red5&lt;/a&gt;...&lt;/li&gt;
&lt;li&gt;d'&lt;a href=&quot;http://www.eclipse.org/&quot; hreflang=&quot;en&quot;&gt;Eclipse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;de Java et &lt;a href=&quot;http://ant.apache.org/&quot; hreflang=&quot;en&quot;&gt;Apache Ant&lt;/a&gt;, qui sont déjà fournis avec Mac OS X, ce qui va nous faire gagner du temps, on peut donc directement commencer par configurer Eclipse. Pour Windows, ces 2 composants doivent être installés au préalable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Par défaut Red5 s'installe dans /Applications/Red5. Toutes les applications Red5 doivent être placées dans un dossier distinct à l'intérieur du dossier /webapps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Au lancement d'Eclipe, définir le workspace à /Applications/Red5/webapps/. Le dossier webapps est le dossier contenant toutes les applications Red5, chacune dans un dossier distinct. Dans chaque dossier d'application doit se trouver un dossier /WEB-INF contenant les classes java et les fichiers xml de configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Red5 propose dans le dossier /docs/templates un dossier d'application &quot;modèle&quot; qui va nous servir de base. Copiez donc le dossier /docs/templates/myapp dans le dossier /webapps et le renommer du nom de votre application (ici /webapps/monappli)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Dans Eclipse, créez un nouveau projet (&quot;File&quot; &amp;gt; &quot;New&quot; &amp;gt; &quot;Project...&quot;), choisir &quot;Java Project&quot;, puis donner un nom à l'application. Choisir en dessous &quot;Create project from existing source&quot; puis choisir le dossier crée à l'étape précédente (/webapps/monappli) comme dossier du projet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/red5-1/red5-2.png&quot; alt=&quot;red5-2.png&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dans le dossier /WEB-INF, créez les dossiers /src et /classes. Le dossier /src sera le dossier contenant les sources java, /classes sera le dossier d'export pour les classes compilées.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Définir le dossier /WEB-INF/src comme dossier de sources, par un clic droit sur ce dossier puis &quot;Build Path&quot; &amp;gt; &quot;Use as Source Folder&quot;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/red5-1/red5-5.png&quot; alt=&quot;red5-5.png&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faites un clic droit sur le dossier du projet puis &quot;Properties&quot;, &quot;Java Build Path&quot; à gauche, onglet &quot;Source&quot;, définir le dossier /WEB-INF/classes comme dossier de sortie (&quot;Default output folder&quot;)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Toujours dans la fenêtre de propriétés du projet, onglet &quot;Librairies&quot;, cliquez sur &quot;Add External JARs&quot; puis sélectionnez red5.jar situé dans le dossier d'installation de Red5. Ceci va nous permettre d'utiliser l'API de Red5 dans notre application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/red5-1/red5-6.png&quot; alt=&quot;red5-6.png&quot; /&gt;&lt;/p&gt;


&lt;h3&gt;Fichiers de configuration&lt;/h3&gt;


&lt;p&gt;Ouvrez le fichier red5-web.properties et changez l'url de votre application&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
webapp.contextPath=/monappli
&lt;/pre&gt;


&lt;p&gt;Ouvrez ensuite le fichier &lt;em&gt;red5-web.xml&lt;/em&gt;. Dans ce dernier il va falloir changer le chemin vers la classe principale de notre application. Comme nous allons le voir à l'étape suivante, celle-ci s'appelle &quot;Application&quot; et est située dans le package &quot;demo&quot;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;bean id=&amp;quot;web.handler&amp;quot; class=&amp;quot;demo.Application&amp;quot; singleton=&amp;quot;true&amp;quot; /&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Juste en dessous vous pouvez supprimer le noeud&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;bean id=&amp;quot;myhandler.service&amp;quot; class=&amp;quot;the.path.to.my.ServiceHandler&amp;quot; singleton=&amp;quot;true&amp;quot; /&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Ouvrez enfin &lt;em&gt;web.xml&lt;/em&gt; et modifiez la valeur de webAppRootKey avec le chemin vers votre application&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;context-param&amp;gt;
		&amp;lt;param-name&amp;gt;webAppRootKey&amp;lt;/param-name&amp;gt;
		&amp;lt;param-value&amp;gt;/monappli&amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;
&lt;/pre&gt;


&lt;h3&gt;Création de la classe Application&lt;/h3&gt;


&lt;p&gt;Dans le dossier de sources, créez un nouveau package &quot;demo&quot; (clic droit sur le dossier WEB-INF/src -&amp;gt; &quot;New&quot; -&amp;gt; &quot;Package&quot;) puis une nouvelle classe dans ce dernier. Nommez-là &quot;Application&quot;.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/red5-1/red5-8.png&quot; alt=&quot;red5-8.png&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Je vais ici reprendre l'exemple de base fourni dans la doc de Red5. Nous allons créer une application minimaliste qui possède une simple et unique fonction qui renvoie la somme entre 2 nombres. Plus simple tu meurs :)&lt;/p&gt;


&lt;p&gt;A noter, notre classe Application doit hériter de la classe org.red5.server.adapter.ApplicationAdapter.&lt;/p&gt;

&lt;pre&gt;
package demo;

import org.red5.server.adapter.ApplicationAdapter;

public class Application extends ApplicationAdapter {
	
	public double add(double a, double b){
		return a+b;
	}

}
&lt;/pre&gt;


&lt;h3&gt;Compilation et lancement du serveur&lt;/h3&gt;


&lt;p&gt;Red5 utilise &lt;a href=&quot;http://ant.apache.org/&quot; hreflang=&quot;en&quot;&gt;Ant&lt;/a&gt; pour simplifier et automatiser l'étape de compilation. Ant se configure à l'aide d'un fichier build.xml qui se trouve à l'intérieur du dossier d'installation de Red5 (/Application/Red5). Il va donc falloir modifier ce fichier afin d'intégrer notre classe dans le processus de compilation.&lt;/p&gt;


&lt;p&gt;Ouvrez le fichier build.xml puis à l'intérieur du noeud &amp;lt;target name=&quot;compile_demos&quot;&amp;gt;, rajoutez un nouveau noeud comme ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;javac sourcepath=&amp;quot;&amp;quot; srcdir=&amp;quot;${webapps.dir}/monappli/WEB-INF/src&amp;quot; destdir=&amp;quot;${webapps.dir}${tmp.war.dir}/monappli/WEB-INF/classes&amp;quot;
	 classpathref=&amp;quot;webapps.classpath&amp;quot; optimize=&amp;quot;${build.optimize}&amp;quot; verbose=&amp;quot;${build.verbose}&amp;quot;
	 fork=&amp;quot;${build.fork}&amp;quot; nowarn=&amp;quot;${build.nowarn}&amp;quot; deprecation=&amp;quot;${build.deprecation}&amp;quot;
	 debug=&amp;quot;${debug.state}&amp;quot; compiler=&amp;quot;${compiler}&amp;quot; source=&amp;quot;${java.target_version}&amp;quot; target=&amp;quot;${java.target_version}&amp;quot;/&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Voilà, à présent tout est configuré, il ne reste plus qu'à lancer le processus de compilation et lancer le serveur. Pour ce faire, ouvrez une fenêtre du terminal, déplacez vous dans le dossier /Applications/Red5 puis lancez la commande&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
sudo ant server
&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;A noter :&lt;/strong&gt; sudo est nécessaire car les droits root sont requis dans le dossier /Applications pour y créer et modifier des dossiers et/ou fichiers. Si vous avez installé Red5 dans votre dossier personnel, vous pouvez vous passer de sudo.&lt;/p&gt;


&lt;p&gt;A la fin de la compilation, le serveur démarre, Red5 est lancé&amp;nbsp;!&lt;/p&gt;


&lt;h3&gt;Coté client&lt;/h3&gt;


&lt;p&gt;Nous allons désormais créer l'application cliente sous Flash. Dans un nouveau FLA, tapez le code suivant sur la première frame&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var nc:NetConnection = new NetConnection();

nc.connect(&amp;quot;rtmp://localhost/monappli&amp;quot;);

nc.onResult = function(obj) {
	trace(&amp;quot;Le résultat est &amp;quot; + obj);
}

nc.call(&amp;quot;add&amp;quot;, nc, 1, 2);
&lt;/pre&gt;


&lt;p&gt;Vous l'avez déjà deviné, la méthode call permet d'appeler une méthode de l'application distante, puis le gestionnaire onResult permet de capter la réponse du serveur.&lt;/p&gt;


&lt;p&gt;Sauvegardez, testez, et admirez :)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/05/15/Red5-%3A-installation-sous-Mac-OS-X#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/05/15/Red5-%3A-installation-sous-Mac-OS-X#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/22</wfw:commentRss>
      </item>
    
</channel>
</rss>