<?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 - actionscript</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>Sun, 09 Nov 2008 05:45:06 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <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>TextMate et Actionscript 3</title>
    <link>http://blog.pabloprieto.net/index.php/post/2008/01/07/TextMate-et-Actionscript-3</link>
    <guid isPermaLink="false">urn:md5:c4a7c30918d26022f18486ce4bd4513f</guid>
    <pubDate>Mon, 07 Jan 2008 11:47:00 +0100</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>mac</category><category>textmate</category>    
    <description>&lt;p&gt;je débarque un peu sur ce coup là, vu que ça fait quelque temps que j'ai pas développé sur Mac (PC au boulot oblige) mais un bundle Actionscript 3 est disponible pour TextMate depuis quelques mois...&lt;/p&gt;    &lt;p&gt;Ce bundle est disponible via Subversion (déjà présent dans Leopard, sinon &lt;a href=&quot;http://metissian.com/projects/macosx/subversion/&quot; hreflang=&quot;en&quot;&gt;installez-le&lt;/a&gt;). Il faut pour cela ouvrir le terminal (dans Applications/Utilitaires) et &lt;del&gt;recopier&lt;/del&gt; copier/coller les commandes suivantes&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
mkdir -p /Library/Application\ Support/TextMate/Bundles
cd /Library/Application\ Support/TextMate/Bundles
export LC_CTYPE=en_US.UTF-8
echo “… update Flex bundle”
svn co http://macromates.com/svn/Bundles/trunk/Review/Bundles/Flex.tmbundle
echo “… update As3 bundle”
svn co http://macromates.com/svn/Bundles/trunk/Review/Bundles/ActionScript\ 3.tmbundle
osascript -e ‘tell app “TextMate” to reload bundles’
&lt;/pre&gt;


&lt;p&gt;Voilà, vous avez maintenant un nouveau sous-menu &quot;Actionscript 3&quot; dans le menu Bundles, avec plein de commandes prêtes à l'emploi. Des templates de classe, interface, etc... sont également disponibles.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2008/01/07/TextMate-et-Actionscript-3#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2008/01/07/TextMate-et-Actionscript-3#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/34</wfw:commentRss>
      </item>
    
  <item>
    <title>Une classe pour manipuler une base de données dans AIR</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/10/04/Une-classe-pour-manipuler-une-base-de-donnees-dans-AIR</link>
    <guid isPermaLink="false">urn:md5:178e07647e55bfde8fd45b7e43f73f5c</guid>
    <pubDate>Thu, 04 Oct 2007 14:32:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>air</category><category>flex</category><category>sqlite</category><category>sqlitemanager</category>    
    <description>&lt;p&gt;Je viens d'écrire une petite classe assez simple pour faciliter la manipulation d'une base de données SQLLite dans une application &lt;a href=&quot;http://labs.adobe.com/technologies/air/&quot; hreflang=&quot;en&quot;&gt;AIR&lt;/a&gt;. Cette classe fonctionne comme une couche d'abstraction entre l'application et la base de données.&lt;/p&gt;


&lt;p&gt;La classe peut être &lt;a href=&quot;http://blog.pabloprieto.net/public/SQLiteManager.zip&quot; hreflang=&quot;fr&quot;&gt;téléchargée ici&lt;/a&gt;, sous licence &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; hreflang=&quot;en&quot;&gt;Creative Commons&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Par défaut la méthode &quot;select&quot; retourne un tableau d'objets mais il est possible d'indiquer une classe personnalisée à utiliser à la place. En effet, grâce à la propriété itemClass de la classe &lt;a href=&quot;http://livedocs.adobe.com/labs/flex/3/langref/flash/data/SQLStatement.html&quot; hreflang=&quot;en&quot;&gt;SQLStatement&lt;/a&gt; il est possible de faire correspondre facilement une classe Actionscript à une table de la base, les propriétés publiques de la classe sont alors remplies automatiquement avec les valeurs des colonnes de la table portant le même nom, super pratique :)&lt;/p&gt;


&lt;p&gt;Voici un exemple d'utilisation&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;mx:WindowedApplication xmlns:mx=&amp;quot;http://www.adobe.com/2006/mxml&amp;quot; layout=&amp;quot;vertical&amp;quot; creationComplete=&amp;quot;init()&amp;quot;&amp;gt;

	&amp;lt;mx:Script&amp;gt;
		&amp;lt;![CDATA[
			import net.burnyourbrowser.data.SQLiteManager;
			import User;
			
			[Bindable]
			private var db:SQLiteManager;
			
			private function init():void{		
				this.db = new SQLiteManager(&amp;quot;app-resource:/base.db&amp;quot;);
				this.db.select(&amp;quot;SELECT * FROM users&amp;quot;, User);
			}
			
			private function removeSelectedItem():void{
				var id:int = resultDataGrid.selectedItem.id;
				this.db.remove(&amp;quot;DELETE FROM profiles WHERE id=&amp;quot;+id);
			}
			
		]]&amp;gt;
	&amp;lt;/mx:Script&amp;gt;
	
	&amp;lt;mx:DataGrid id=&amp;quot;resultDataGrid&amp;quot; dataProvider=&amp;quot;{db.result}&amp;quot;&amp;gt;
		&amp;lt;mx:columns&amp;gt;
			&amp;lt;mx:DataGridColumn headerText=&amp;quot;id&amp;quot; dataField=&amp;quot;id&amp;quot;/&amp;gt;
			&amp;lt;mx:DataGridColumn headerText=&amp;quot;name&amp;quot; dataField=&amp;quot;firstname&amp;quot;/&amp;gt;
			&amp;lt;mx:DataGridColumn headerText=&amp;quot;url&amp;quot; dataField=&amp;quot;lastname&amp;quot;/&amp;gt;
		&amp;lt;/mx:columns&amp;gt;
	&amp;lt;/mx:DataGrid&amp;gt;
	
	&amp;lt;mx:Button label=&amp;quot;Supprimer&amp;quot; click=&amp;quot;removeSelectedItem()&amp;quot;/&amp;gt;
	
&amp;lt;/mx:WindowedApplication&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Pour la création initiale de la base, je vous conseille &lt;a href=&quot;http://sqliteadmin.orbmu2k.de/&quot; hreflang=&quot;en&quot;&gt;SQLite Administrator&lt;/a&gt;, gratuit et qui fonctionne plutôt bien.&lt;/p&gt;


&lt;p&gt;Je vous file le code sous licence &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot; hreflang=&quot;en&quot;&gt;Creative Commons&lt;/a&gt;, vous pouvez donc en faire ce que bon vous semble :)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/10/04/Une-classe-pour-manipuler-une-base-de-donnees-dans-AIR#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/10/04/Une-classe-pour-manipuler-une-base-de-donnees-dans-AIR#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/32</wfw:commentRss>
      </item>
    
  <item>
    <title>Invoquer le webservice XML/RPC de Dotclear avec Flex</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/09/24/Invoquer-le-webservice-XML/RPC-de-Dotclear-avec-Flex</link>
    <guid isPermaLink="false">urn:md5:1e27bd108ad6b0b118b5338924e251d1</guid>
    <pubDate>Mon, 24 Sep 2007 14:08:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>dotclear</category><category>flex</category><category>webservice</category><category>xml-rpc</category>    
    <description>&lt;p&gt;Voici un petit tutorial rapide pour apprendre à communiquer avec un webservice XML/RPC en Actionscript 3.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/XMLRPC&quot; hreflang=&quot;en&quot;&gt;XML/RPC&lt;/a&gt; est un protocole utilisé notamment par les principales plate-formes de blog pour permettre d'administrer ceux-ci sans devoir se connecter à l'interface d'administration. Nous allons justement dans l'exemple suivant nous connecter au webservice fourni par Dotclear pour afficher la liste des derniers billets.&lt;/p&gt;


&lt;p&gt;Dotclear implémente les principales API de blog, à savoir blogger, Movable Type et MetaWeblog. Nous allons donc pouvoir invoquer les méthodes fournies par ces 3 API. Pour info ce même exemple peut servir pour les autres plate-formes de blog comme Wordpress, qui implémente également ces API. J'ai choisi Dotclear uniquement  parce que c'est ce que j'utilise :)&lt;/p&gt;    &lt;p&gt;Avant de commencer, &lt;strong&gt;pensez à activer l'interface XML/RPC de votre blog dans l'interface d'administration&lt;/strong&gt;. Pour Dotclear cela se situe dans les paramètres du blog.&lt;/p&gt;


&lt;h3&gt;Création du projet&lt;/h3&gt;


&lt;p&gt;Coté client, la librairie qui va nous simplifier le travail s'appelle &lt;a href=&quot;http://code.google.com/p/as3-rpclib/&quot; hreflang=&quot;en&quot;&gt;As3 RPC lib&lt;/a&gt;, disponible sur Google Code.&lt;/p&gt;


&lt;p&gt;Après avoir crée un nouveau projet Flex, &lt;a href=&quot;http://code.google.com/p/as3-rpclib/downloads/list&quot; hreflang=&quot;en&quot;&gt;téléchargez la librairie&lt;/a&gt; as3 RPC lib et copiez le fichier as3-rpclib.swc dans votre dossier projet. Allez ensuite dans les propriétés du projet puis dans &quot;Flex Build Path&quot;, onglet &quot;Library Path&quot;, et importez le fichier SWC en cliquant sur &quot;Add SWC...&quot;.&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/flex_xmlrpc_1.png&quot; alt=&quot;Importation de la librairie As3 RPC lib&quot; /&gt;&lt;/p&gt;


&lt;h3&gt;Utilisation de l'objet XMLRPCObject&lt;/h3&gt;


&lt;p&gt;Cette librairie nous permet de créer un objet XMLRPCObject qui appelera les fonctions du webservice avec la méthode &quot;call()&quot;. L'url du webservice est précisée avec les propriétés &lt;em&gt;endpoint&lt;/em&gt; et &lt;em&gt;destination&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;ak33m:XMLRPCObject id=&amp;quot;blogapi&amp;quot; endpoint=&amp;quot;http://www.burnyourbrowser.net/&amp;quot; destination=&amp;quot;index.php/xmlrpc/default&amp;quot; /&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Après invocation de la méthode &quot;call()&quot;, l'évenement ResultEvent permet de réceptionner les données directement &lt;strong&gt;sous forme d'objet&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;Voici le code final de l'application, composée pour l'affichage d'un DataGrid et d'un texte destiné à recevoir les eventuels messages d'erreur.&lt;/p&gt;


&lt;p&gt;L'objet XMLRPCObject est ici instancié en MXML, mais vous pouvez évidemment le faire en actionscript.&lt;/p&gt;


&lt;p&gt;Enfin les résultats retournés sont stockés dans un ArrayCollection &quot;bindable&quot;, ce qui nous permet de mettre à jour automatiquement le DataGrid&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;mx:Application 
	xmlns:mx=&amp;quot;http://www.adobe.com/2006/mxml&amp;quot; 
	xmlns:ak33m=&amp;quot;http://ak33m.com/mxml&amp;quot; 
	layout=&amp;quot;vertical&amp;quot; 
	horizontalAlign=&amp;quot;left&amp;quot; 
	creationComplete=&amp;quot;init()&amp;quot;&amp;gt;
	
	&amp;lt;mx:Script&amp;gt;
		&amp;lt;![CDATA[
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import mx.collections.ArrayCollection;
		
			private var login:String = &amp;quot;******&amp;quot;;
			private var password:String = &amp;quot;******&amp;quot;;
			
			[Bindable]
			private var recentPosts:ArrayCollection;
			
			private function init():void{				
				blogapi.call(&amp;quot;mt.getRecentPostTitles&amp;quot;,&amp;quot;1&amp;quot;,login,password,10);
				blogapi.addEventListener(ResultEvent.RESULT, showRecentPosts);
				blogapi.addEventListener(FaultEvent.FAULT, faultHandler);
			}
			
			private function showRecentPosts(e:ResultEvent):void{
				recentPosts = new ArrayCollection(e.result as Array);
			}
			
			private function faultHandler(e:FaultEvent):void{
				errorMessage.text = e.fault.faultCode+&amp;quot;: &amp;quot;+e.fault.faultString;
			}
			
		]]&amp;gt;
	&amp;lt;/mx:Script&amp;gt;
	
	&amp;lt;ak33m:XMLRPCObject id=&amp;quot;blogapi&amp;quot; endpoint=&amp;quot;http://www.burnyourbrowser.net/&amp;quot; destination=&amp;quot;index.php/xmlrpc/default&amp;quot; /&amp;gt;
	
	&amp;lt;mx:DataGrid dataProvider=&amp;quot;{recentPosts}&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;
		&amp;lt;mx:columns&amp;gt;
			&amp;lt;mx:DataGridColumn headerText=&amp;quot;ID&amp;quot; dataField=&amp;quot;postid&amp;quot; width=&amp;quot;30&amp;quot;/&amp;gt;
			&amp;lt;mx:DataGridColumn headerText=&amp;quot;Title&amp;quot; dataField=&amp;quot;title&amp;quot;/&amp;gt;
			&amp;lt;mx:DataGridColumn headerText=&amp;quot;Date&amp;quot; dataField=&amp;quot;dateCreated&amp;quot;/&amp;gt;
		&amp;lt;/mx:columns&amp;gt;
	&amp;lt;/mx:DataGrid&amp;gt;
	
	&amp;lt;mx:Text id=&amp;quot;errorMessage&amp;quot;/&amp;gt;
	
&amp;lt;/mx:Application&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Et voilà le résultat&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;img src=&quot;http://blog.pabloprieto.net/public/flex_xmlrpc_2.png&quot; alt=&quot;Affichage des derniers billets du blog avec XML/RPC&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Je vous laisse continuer, en vous aidant de &lt;a href=&quot;http://www.dotclear.net/trac/wiki/DotClear/fr/Dev/XML-RPC&quot; hreflang=&quot;fr&quot;&gt;la documentation des API&lt;/a&gt;, pour vous créer votre propre interface de gestion de blog en Flex :)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/09/24/Invoquer-le-webservice-XML/RPC-de-Dotclear-avec-Flex#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/09/24/Invoquer-le-webservice-XML/RPC-de-Dotclear-avec-Flex#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/31</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>Actionscript : délégation et passage d'arguments</title>
    <link>http://blog.pabloprieto.net/index.php/post/2007/03/05/Actionscript-%3A-delegation-et-passage-darguments</link>
    <guid isPermaLink="false">urn:md5:e84b3bc541bf39be664b3fc26801d4ff</guid>
    <pubDate>Mon, 05 Mar 2007 10:40:00 +0100</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>délégation</category><category>flash</category>    
    <description>&lt;p&gt;Le principe de la délégation en Actionscript&amp;nbsp;: à quoi ça sert, comment bien l'utiliser, contourner le problème du passage de paramètres et enfin ce qui va changer en AS 3.&lt;/p&gt;    &lt;h3&gt;La délégation&amp;nbsp;: à quoi ça sert&lt;/h3&gt;


&lt;p&gt;Un cas très courant nécessitant la délégation se présente dans l'exemple suivant&amp;nbsp;: un objet graphique (héritant de MovieClip) possède un bouton qui exécute une fonction de l'objet lorsque on lui clique dessus&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
Class MonObjet extends MovieClip{

	private var monBouton:MovieClip;

	public function MonObjet(){	
		monBouton.onRelease = this.faitUnTruc;
	}
	
	public function faitUnTruc(){
		trace(this);
	}

}
&lt;/pre&gt;


&lt;p&gt;Explication&amp;nbsp;: je passe la fonction faitUnTruc en référence à monBouton.onRelease. Ainsi, lorsque je vais cliquer sur monBouton, la fonction faitUnTruc sera exécutée. Enfin dans la fonction faitUnTruc, je fais un trace de l'objet courant (this).&lt;/p&gt;


&lt;p&gt;Et bien dans cette situation, this fera référence non pas à l'occurrence de MonObjet, mais à celle du bouton&amp;nbsp;! La faute au passage par référence de la fonction faitUnTruc à monBouton.onRelease&amp;nbsp;: la fonction faitUnTruc s'exécute bien, mais dans le &quot;scope&quot; du bouton, c'est à dire comme une fonction du bouton, et non de l'objet.&lt;/p&gt;


&lt;h3&gt;Mise en place de la délégation avec la classe Delegate&lt;/h3&gt;


&lt;p&gt;C'est à ce moment précis qu'arrive la classe Delegate pour contourner ce problème de manière simple et élégante. Cette classe, écrite par Mike Chambers, est disponible depuis Flash MX 2004. Voici la modification à apporter à notre exemple de départ&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
import mx.utils.Delegate;

Class MonObjet extends MovieClip{

	private var monBouton:MovieClip;

	public function MonObjet(){	
		monBouton.onRelease = Delegate.create(this, faitUnTruc);
	}
	
	public function faitUnTruc(){
		trace(this);
	}

}
&lt;/pre&gt;


&lt;p&gt;On commence par importer la classe qui se trouve dans le package mx.utils. Ensuite, au lieu de faire référence directement à la fonction faitUnTruc, on fait référence à la méthode statique Delegate.create avec deux arguments&amp;nbsp;: le premier est le scope, c'est à dire l'objet quoi doit garder la référence, et le deuxième est la fonction à exécuter. Cette fois bingo, this dans la fonction faitUnTruc désigne bien l'objet.&lt;/p&gt;


&lt;p&gt;Pour résumer, lorsque j'écris&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
Delegate.create(UnObjet, faitUnTruc);
&lt;/pre&gt;


&lt;p&gt;Cela peut se traduire par&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&quot;Exécute la fonction faitUnTruc comme étant une fonction de l'objet UnObjet&quot;&lt;/p&gt;


&lt;h3&gt;Passer des arguments&lt;/h3&gt;


&lt;p&gt;Passée l'euphorie (si si...), on tombe assez vite sur le prochain problème (ah flûte...)&amp;nbsp;: Delegate ne permet pas de passer de paramètres à la fonction appelée. Imaginons que la méthode faitUnTruc doit pouvoir recevoir un ou plusieurs paramètres pour s'exécuter correctement, on ne peut pas les spécifier au moment de la délégation.&lt;/p&gt;


&lt;p&gt;Il existe heureusement plusieurs techniques pour pouvoir le faire quand même&amp;nbsp;:&lt;/p&gt;


&lt;h4&gt;Rajouter des propriétés à la méthode appelante&lt;/h4&gt;


&lt;p&gt;Ne jamais oublier LE truc chouette en Actionscript&amp;nbsp;: (presque) tout est objet, donc une fonction est un objet. Et comme n'importe quel objet je peux donc lui rajouter des propriétés... c'est le principe de cette première solution&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
import mx.utils.Delegate;

Class MonObjet extends MovieClip{

	private var monBouton:MovieClip;

	public function MonObjet(){
		var d = Delegate.create(this, faitUnTruc);
		d.p1 = &amp;quot;toto&amp;quot;;
		d.p2 = 42;
		monBouton.onRelease = d;
	}
	
	public function faitUnTruc(){
		trace(arguments.caller.p1+&amp;quot;,&amp;quot;+arguments.caller.p2);
	}

}
&lt;/pre&gt;


&lt;p&gt;Je passe en référence à monBouton.onRelease une fonction qui est elle-même une référence à Delegate.create(this, faitUnTruc), à laquelle j'ai rajouté au préalable deux propriétés p1 et p2. Celle-ci est ensuite disponible dans la fonction faitUnTruc grâce à arguments.caller. C'est une solution simple et rapide, mais pas très propre car elle nécessite de connaître le nom des propriétés dans la fonction appelée.&lt;/p&gt;


&lt;h4&gt;Relegate&lt;/h4&gt;


&lt;p&gt;&lt;a href=&quot;http://www.tekool.net/&quot; hreflang=&quot;fr&quot;&gt;Tekool&lt;/a&gt; nous propose sur son site &lt;a href=&quot;http://www.tekool.net/flash/class/relegate/&quot; hreflang=&quot;fr&quot;&gt;une méthode&lt;/a&gt; plus élégante et moins verbeuse sous la forme d'une fonction Relegate qui ressemble en tous points à Delegate, excepté qu'elle accepte des paramètres supplémentaires qui seront transmis à la fonction appelée. Voici comment l'utiliser dans notre exemple&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
import Relegate;

Class MonObjet extends MovieClip{

	private var monBouton:MovieClip;

	public function MonObjet(){
		monBouton.onRelease = Relegate.create(this, faitUnTruc, &amp;quot;toto&amp;quot;, 42);
	}
	
	public function faitUnTruc(p1,p2){
		trace(p1+&amp;quot;,&amp;quot;+p2);
	}

}
&lt;/pre&gt;


&lt;h3&gt;La délégation et ActionScript 3&lt;/h3&gt;


&lt;p&gt;Attention car avec ActionScript 3 tout ceci va changer&amp;nbsp;! Oui en gros tout ce que j'ai écrit juste au dessus sera bientôt obsolète (et l'est déjà pour les gens qui développent sous Flex 2)&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Le tout nouveau modèle événementiel, basé sur celui du DOM Level 3, permet donc que le scope soit conservé lors du passe d'une fonction par référence&amp;nbsp;! Ainsi en reprenant l'exemple inital en AS3&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
package{

	Class MonObjet extends MovieClip{

		private var monBouton:MovieClip;

		public function MonObjet(){
			monBouton.onRelease = this.faitUnTruc;
		}
	
		public function faitUnTruc(){
			trace(this);
		}

	}

}
&lt;/pre&gt;


&lt;p&gt;le this à l'intérieur de la fonction faitUnTruc désignera bien l'occurrence de MonObjet, et non plus le bouton, ce qui est quand même plus simple ;)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2007/03/05/Actionscript-%3A-delegation-et-passage-darguments#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2007/03/05/Actionscript-%3A-delegation-et-passage-darguments#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/18</wfw:commentRss>
      </item>
    
  <item>
    <title>Flash 8 : XML.idMap</title>
    <link>http://blog.pabloprieto.net/index.php/post/2006/08/18/Flash-8-%3A-XMLidMap</link>
    <guid isPermaLink="false">urn:md5:28df6e327aba638c865ae7c87eba11a8</guid>
    <pubDate>Fri, 18 Aug 2006 14:49:00 +0200</pubDate>
    <dc:creator>Pab.</dc:creator>
        <category>Actionscript/Flash/Flex</category>
        <category>actionscript</category><category>flash</category><category>xml</category>    
    <description>&lt;p&gt;Apparue avec Flash 8, XML.idMap permet de créer un objet contenant les noeuds XML possédants un attribut &quot;id&quot;. Chaque noeud XML possédant un tel attribut devient une proprieté de l'objet idMap, en prenant comme nom la valeur de l'attribut.&lt;/p&gt;    &lt;p&gt;Voici un exemple en pratique&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;produits&amp;gt;
	&amp;lt;produit id=&amp;quot;56&amp;quot;&amp;gt;Carrotes&amp;lt;/produit&amp;gt;
	&amp;lt;produit id=&amp;quot;73&amp;quot;&amp;gt;Chou-fleur&amp;lt;/produit&amp;gt;
	&amp;lt;produit id=&amp;quot;18&amp;quot;&amp;gt;Petits pois&amp;lt;/produit&amp;gt;
&amp;lt;/produits&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Et le code actionscript&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var doc = new XML();
doc.ignoreWhite = true;
doc.onLoad = traitement;
doc.load(&amp;quot;test.xml&amp;quot;);

function traitement(){
	for(var i in this.idMap){
		trace(i+&amp;quot; -&amp;gt; &amp;quot;+this.idMap[i]);
	}
}
&lt;/pre&gt;


&lt;p&gt;La fenêtre de sortie affichera la chose suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
18 -&amp;gt; &amp;lt;produit id=&amp;quot;18&amp;quot;&amp;gt;Petits pois&amp;lt;/produit&amp;gt;
73 -&amp;gt; &amp;lt;produit id=&amp;quot;73&amp;quot;&amp;gt;Chou-fleur&amp;lt;/produit&amp;gt;
56 -&amp;gt; &amp;lt;produit id=&amp;quot;56&amp;quot;&amp;gt;Carrotes&amp;lt;/produit&amp;gt;
&lt;/pre&gt;


&lt;p&gt;L'objet doc.idMap contient bien dans cet exemple 3 propriétés que l'on peut appeler directement comme ceci&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
doc.idMap[&amp;quot;18&amp;quot;]
&lt;/pre&gt;


&lt;p&gt;Attention tout de même, il y a un petit bug si vous tentez un typage fort votre objet XML. Ainsi le même code avec la déclaration suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
var doc:XML = new XML();
&lt;/pre&gt;


&lt;p&gt;générera une erreur à la compilation&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
Il n'existe aucune propriété nommée 'idMap'
&lt;/pre&gt;</description>
    
    
    
          <comments>http://blog.pabloprieto.net/index.php/post/2006/08/18/Flash-8-%3A-XMLidMap#comment-form</comments>
      <wfw:comment>http://blog.pabloprieto.net/index.php/post/2006/08/18/Flash-8-%3A-XMLidMap#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.pabloprieto.net/index.php/feed/rss2/comments/7</wfw:commentRss>
      </item>
    
</channel>
</rss>