<?xml version="1.0" encoding="UTF-8" ?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
			<title>RevoluGame</title>
			<link>http://www.revolugame.com/feed.html</link>
			<description></description>
			<language>fr</language>
			<copyright>RevoluGame 2009</copyright>
			<ttl>120</ttl><item>
		<title>Sauvegarder une liste d'entiers dans un shared object</title>
		<link>http://www.revolugame.com/blog/sauvegarder-une-liste-dentier-dans-un-shared-object.html</link>
		<description><![CDATA[ <div>Voici une petite astuce qui peut vous simplifier la vie. Dans un grand nombre de jeux, nous avons besoin de stocker la liste des niveaux terminés par le joueur, et de pouvoir y accéder rapidement. La méthode la plus simple est de stocker cette donnée dans un <strong>SharedObject</strong> que nous retrouverons à chaque lancement de session.</div><p>&nbsp;</p>
<h3>Sauvegarde des données</h3><p>&nbsp;</p>
<div>
Pour stocker une <strong>liste d'entiers</strong> dans un <strong>SharedObject</strong> sous la forme d'<strong>un entier seul</strong>, il faut sauvegarder la somme des puissances de 2 des valeurs souhaitées.
</div>
<pre class="code haxe">var mySo:SharedObject = SharedObject.getLocal("myApplication");
var dataToSave : Array = [2, 5, 4];
var somme : int = 0;
for each(var data : int in dataToSave)
{
    somme += Math.pow(2, data);
}
mySo.data.savedValue = somme;
</pre>

<p>&nbsp;</p>
<h3>Récupération des données</h3><p>&nbsp;</p>
<div>Et pour récupérer les données :</div>
<pre class="code haxe">
var intValue : int = mySo.data.savedValue;
var currentIndex : int; // identifiant du niveau à tester
if( ( Math.pow(2, currentIndex) & intValue) > 0 )
{
    // L'entier est bien présent dans la liste
}</pre> ]]></description>
		<pubDate>Mon, 24 Oct 2011 13:32:18 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/sauvegarder-une-liste-dentier-dans-un-shared-object.html</guid>
</item><item>
		<title>NME - Premiers pas sous android</title>
		<link>http://www.revolugame.com/blog/set-nme-android-workspace.html</link>
		<description><![CDATA[ <p>La version 3 de <strong>NME</strong> est enfin disponible sur <strong>haxelib </strong>!!</p>
<p>&nbsp;</p>
<p>Le r&ecirc;ve de tout d&eacute;veloppeur est en train de se r&eacute;aliser : developper une application, et la publier sur <strong>toutes les plates formes</strong> ! C'est enfin possible gr&acirc;ce &agrave; <strong>haXe </strong>et <strong>NME</strong>.</p>
<p>&nbsp;</p>
<h2>Quelques pr&eacute;cisions :</h2>
<p>Avant d'aller plus loin, voyons un peu de quoi il s'agit. Si vous &ecirc;tes familié avec <a href="http://www.haxe.org" target="_blank">haXe</a>, vous ne l'&ecirc;tes peut etre pas avec <strong>NME</strong>.</p>
<p>&nbsp;</p>
<p><strong>NME </strong>(pour Neko Media Engine) est un <strong>framework open source</strong> permettant de publier une application vers tout type de plate forme (windows, linux, android, ios, et j'en passe). Ce framework s'appui sur le langage <strong>haXe</strong>, ce qui permet d'avoir une syntaxe proche de l'<strong>Actionscript</strong>. <strong>NME </strong>s'occupe ensuite de mapper tout ca, et de publier pour la plate forme voulue.</p>
<p>&nbsp;</p>
<p>Nous ne nous interresserons pour le moment, qu'&agrave; la plate forme <strong>android</strong>. </p>
<p>&nbsp;</p>
<p>Voici un sch&eacute;ma permettant de comprendre le fonctionnement :</p> ]]></description>
		<pubDate>Fri, 09 Sep 2011 02:47:12 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/set-nme-android-workspace.html</guid>
</item><item>
		<title>Cool Pixel Effect</title>
		<link>http://www.revolugame.com/blog/cool-pixel-effect.html</link>
		<description><![CDATA[ <div>Voici une <strong>petite d&eacute;mo</strong> d'un effet pixels. </div>
<div>Importez l'image de votre choix, puis sauvegardez le png g&eacute;n&eacute;r&eacute; :</div>
<div>&nbsp;</div>
<div style="width: 100%; margin: 0 auto; text-align: center;">
<object id="myFlashContent" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="100">
  <param name="movie" value="assets/flash/ExportPixel.swf" />
  <!--[if !IE]>-->
  <object type="application/x-shockwave-flash" data="assets/flash/ExportPixel.swf" width="300" height="100">
  <!--<![endif]-->
Votre lecteur Flash n'est pas &agrave; jour. <a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&amp;Lang=French&amp;P5_Language=French" target="_blank">Installer la derni&egrave;re version</a>
  <!--[if !IE]>-->
  </object>
  <!--<![endif]-->
</object>
</div>
<div>&nbsp;</div>
<h3>Fonctionnement :</h3>
<div>&nbsp;</div>
<div>Chaque pixel de l'image source est r&eacute;cup&eacute;r&eacute;, puis &eacute;ventuellement dupliqu&eacute; (selon la valeur du zoom), et pour terminer on lui applique un effet de bordure.</div>
<div>&nbsp;</div>
<p class="info">L'effet de bordure n'est visible que pour un zoom d'au moins x3.<br />Il faut avoir la place de rajouter un pixel de bordure de chaque cot&eacute; du pixel de l'image source.</p>
<div>&nbsp;</div>
<div>D&ucirc; aux <strong>limitations</strong> du flash player 10, l'image de destination (taille image source x coefficient de zoom) <strong>ne peut d&eacute;passer 8191 pixels</strong> de haut et de large (restriction du <a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html" target="_blank">BitmapData</a>).</div> ]]></description>
		<pubDate>Fri, 26 Aug 2011 00:01:39 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/cool-pixel-effect.html</guid>
</item><item>
		<title>AS3 truncate function</title>
		<link>http://www.revolugame.com/blog/truncate-function.html</link>
		<description><![CDATA[ <p>En AS3, il n'y a pas de fonction native permettant de tronquer un nombre. Voici comment faire ça:</p>
<p>&nbsp;</p>
<pre class="code haxe">public function truncate(val:Number, precision:uint=0):Number
{
	var multiplier : Number = Math.pow(10, precision);
	return Math.round(val * multiplier) / multiplier;
}</pre>
<p>&nbsp;</p>
<pre class="code haxe">truncate(10.2653, 2); //-> va retourner 10.26</pre>
<p>Il existe une autre manière de le faire, mais nettement moins propre. Il s'agit de convertir le nombre en chaine de caractère, tronquer cette chaine, puis refaire la convertion ...</p> ]]></description>
		<pubDate>Fri, 15 Jul 2011 13:52:14 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/truncate-function.html</guid>
</item><item>
		<title>Dessiner un graphe via un BitmapData</title>
		<link>http://www.revolugame.com/blog/dessiner-un-graphe-via-un-bitmapdata.html</link>
		<description><![CDATA[ <p>Admettons que nous voulons monitorer et afficher sous forme de courbe le fps d'une application.</p>
<p>La manière la plus simple à mettre en place est de passer par un <strong>Shape</strong> sur lequel on utilise <strong>l'API de dessin</strong>.</p><p>&nbsp;</p>
<p>Cependant, si nous commencons à avoir plusieurs courbes à afficher en meme temps sur une grosse application, cela peut nous reduire de maniere importante les performances.</p>
<p>&nbsp;</p>
<p>Une manière moins couteuse de dessiner un graphe est donc de passer par un <strong>BitmapData</strong> sur lequel on remplit les pixels nécessaires avec la bonne couleur.</p>
<p>&nbsp;</p>
<p>Par exemple, admettons que nous avons les valeurs stockées sous la forme d'un vecteur:</p>
<pre class="code haxe">var fpsValues : Vector.< Int >;</pre>
<p class="info">Nous partons du principe que nous remplissons le vecteur en ayant toujours un nombre maximal d'entrée inférieurs ou égal à la taille max du graphe, pour éviter d'avoir trop de données inutiles.</p>
<p>&nbsp;</p><p class="alert">Attention: comme nous parlons en pixel, nous ne pouvons pas avoir de réels, seulement des entiers.</p><p>&nbsp;</p> ]]></description>
		<pubDate>Mon, 06 Jun 2011 19:09:02 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/dessiner-un-graphe-via-un-bitmapdata.html</guid>
</item><item>
		<title>PhotonStorm's FlxHealthBar update</title>
		<link>http://www.revolugame.com/blog/flxhealthbar-update.html</link>
		<description><![CDATA[ <p class="info">By default in the 1.7 version (FlxBar)</p><p>&nbsp;</p><p>In my last <a href="http://flixel.org" target="_blank">Flixel</a> project (<a href="labo/my-hero-factory.html">My Hero Factory</a>), i needed a vertical health bar. 
So i decided to use <a href="http://www.photonstorm.com/flixel-power-tools" target="_blank">Photon Storm's flixel power tools</a>, which has a health bar quickly usable.
But there is only an horizontal one.</p>
<p>&nbsp;</p>
<p>So here is my quick update to his <strong>FlxHealthBar</strong> class :</p>
<p>&nbsp;</p>
<p>First we need more possibilities :</p>
<pre class="code haxe">public static const FILL_LEFT_TO_RIGHT        :int = 1;
public static const FILL_RIGHT_TO_LEFT        :int = 2;
public static const FILL_INSIDE_OUT           :int = 3;
public static const FILL_TOP_TO_BOTTOM        :int = 4;
public static const FILL_BOTTOM_TO_TOP        :int = 5;
</pre>
<p>&nbsp;</p>
<p>The setup function :</p> ]]></description>
		<pubDate>Sun, 22 May 2011 11:04:20 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/flxhealthbar-update.html</guid>
</item><item>
		<title>AsLibraryHelper : interface graphique pour swfmill</title>
		<link>http://www.revolugame.com/blog/aslibraryhelper.html</link>
		<description><![CDATA[ <p>Utilisant beaucoup <a href="http://haxe.org" target="_blank">haXe</a> et <a href="http://swfmill.org/" target="_blank">swfmill</a> en parall&egrave;le sur mes projets personnels, j'ai derni&egrave;rement d&eacute;cid&eacute; de faire une application pour me simplifier la vie pour la cr&eacute;ation et l'utilisation de librairie flash.</p>
<p>&nbsp;</p>
<p>J'ai donc entreprit de coder une application <strong>AIR</strong> qui, &agrave; l'aide d'un simple <strong>drag and drop</strong> sur la fenetre, permettrait d'ajouter des &eacute;l&eacute;ments &agrave; la librairie qui sera ensuite compil&eacute;e directement en utilisant swfmill. </p>
<p>Il est &eacute;galement possible d'importer un fichier xml pour pouvoir r&eacute;cup&eacute;rer et &eacute;diter celle-ci depuis l'interface.</p>
<p>&nbsp;</p>
<p>Les sons et les images sont <strong>pr&eacute;-visualisable</strong> juste via un click sur l'&eacute;l&eacute;ment.</p>
<p>&nbsp;</p>
<p>Voici en image ce que ca rend :</p> ]]></description>
		<pubDate>Wed, 20 Apr 2011 21:52:49 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/aslibraryhelper.html</guid>
</item><item>
		<title>As3isolib - Déplacements</title>
		<link>http://www.revolugame.com/blog/as3isolib-déplacements.html</link>
		<description><![CDATA[ <p>Dans le <a href="blog/introduction-as3isolib.html">post précédent</a>, nous avions vu comment initialiser les données nécessaire à <a href="http://code.google.com/p/as3isolib/" target="_blank">as3isolib</a>. Ici nous allons simplement ajouter un écouteur sur le clic de la souris et déplacer l'objet.</p>
<p>&nbsp;</p>
<p>L'écouteur doit donc être ajouté sur la grille :</p>
<p>&nbsp;</p>

<pre class="code haxe">grid.addEventListener(MouseEvent.CLICK, gridMouseHandler);

private function gridMouseHandler(pEvt:ProxyEvent):void
{
    var evt:MouseEvent = MouseEvent(pEvt.targetEvent);
    var pt:Pt = new Pt(evt.localX, evt.localY);
    IsoMath.screenToIso(pt);
    
    monElement.moveTo( Math.floor(pt.x/CELL_SIZE) * CELL_SIZE, Math.floor(pt.y/CELL_SIZE) * CELL_SIZE, 0 );
}</pre>
<p>&nbsp;</p>
<p>Quelques informations complémentaires :</p>
<ul>
<li><strong>eDpLib.events.ProxyEvent</strong> hérite de la classe <strong>flash.events.Event</strong> et permet en plus à un proxy de redistribuer les informations de l'évènement au nom de l'<strong>IEventDispatcher</strong> qui n'est pas accessible directement depuis la liste d'affichage.<br />Pour faire simple, ne vous posez pas la question et utilisez systématiquement cette classe sur la gestion d'évènement :)</li>
<li><strong>as3isolib.geom.Pt</strong> est l'équivalent d'un <strong>Point</strong> avec une coordonnée <strong>Z</strong> supplémentaire.</li>
<li>La fonction statique <strong>screenToIso()</strong> permet de convertir les coordonnées dans l'espace 3D isométrique de la grille.</li>
</ul>
<p>&nbsp;</p>
<p>Pour faire quelque chose de plus joli, nous pourrions utiliser <a href="http://www.greensock.com/tweenlite/" target="_blank">TweenLite</a> (ou une quelconque librairie d'animation). Nous aurions donc :</p>
<p>&nbsp;</p>
<pre class="code haxe">TweenLite.to( monElement, 1, {x:Math.floor(pt.x/CELL_SIZE)*CELL_SIZE,
                              y:Math.floor(pt.y/CELL_SIZE)*CELL_SIZE});</pre> ]]></description>
		<pubDate>Wed, 02 Mar 2011 17:21:19 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/as3isolib-déplacements.html</guid>
</item><item>
		<title>Introduction à As3isolib</title>
		<link>http://www.revolugame.com/blog/introduction-as3isolib.html</link>
		<description><![CDATA[ <p><a href="http://code.google.com/p/as3isolib/" target="_blank">As3isolib</a> est une librairie open-source ActionScript3 qui permet de développer des jeux (ou tout type d'animation) basés sur un affichage isométrique.</p>
<p>Cette librairie est très simple d'utilisation, et ne nécessite pas un temps d'apprentissage enorme.</p>
<p>&nbsp;</p>
<p style="width:100%;text-align:center;">
<a href="http://code.google.com/p/as3isolib/" target="_blank"><img src="/assets/images/blog/isodemo/as3isolib_logo_main.jpg" /></a>
</p>
<p>&nbsp;</p>
<p>Nous allons voir ici les bases de l'affichage.</p>
<p>&nbsp;</p>
<p>Tout d'abords, commencons par créer un nouveau projet AS3, que nous allons appeler <strong>IsoDemo</strong>.</p>
<p>Il nous faut bien évidemment les sources de la librairie : <a href="http://code.google.com/p/as3isolib/source/browse/trunk/fp10/download" target="_blank">télécharger la v1</a>.</p><p>Ici nous allons nous baser sur les sources pour le <strong>flash player 10</strong>, du coup il faut bien faire attention de spécifier la version minimale du player dans les paramètres.</p>
<p>&nbsp;</p>
<p>Dans un premier temps, nous n'aurons besoin d'utiliser que les 3 classes principales de la librairie, qui sont :</p>
<ul><li><strong>IsoGrid</strong>  : qui correspond à la grille de l'environnement</li>
<li><strong>IsoScene</strong> : la scène en elle meme, sur laquelle nous allons placer nos élements d'affichages</li>
<li><strong>IsoView</strong>  : la vue, c'est a dire ce que l'utilisateur va voir a l'affichage.</li></ul>
<p>&nbsp;</p>
<p>Ces trois classes se trouvent dans le package <strong>as3isolib.display</strong>.</p>
<p>&nbsp;</p>
<p>Nous allons commencer par initialiser la grille :</p>
<p>&nbsp;</p>
<pre class="code haxe">_grid = new IsoGrid();
// Nous definissons une grille de 8*8 cases et 1 case en hauteur
_grid.setGridSize(8, 8, 1);
// Puis nous définissons la taille d'une seul case
_grid.cellSize = 50;</pre>
<p>&nbsp;</p>
<p>Maintenant, passons à la scène, qui correspond à l'élement d'affichage :</p>
<p>&nbsp;</p>
<pre class="code haxe">_scene = new IsoScene();
_scene.addChild( _grid );</pre>
<p>&nbsp;</p>
<p>Et pour terminer, nous devons définir notre vue :</p>
<p>&nbsp;</p>
<pre class="code haxe">_view = new IsoView();
_view.setSize(800, 600);
// Pour pouvoir afficher entièrement la scène,
// nous définissons un point sur lequel nous allons centrer la vue
_view.centerOnPt(new Pt(200, 200, 0));
_view.addScene(_scene);</pre>
<p>&nbsp;</p>
<p>Voici ce que nous obtenons :</p> ]]></description>
		<pubDate>Sun, 27 Feb 2011 12:43:31 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/introduction-as3isolib.html</guid>
</item><item>
		<title>AIR - schéma descriptif des mises à jour</title>
		<link>http://www.revolugame.com/blog/air-schéma-descriptif-des-mises-à-jour.html</link>
		<description><![CDATA[ <p>Un petit post qui permettra sans doute d'éviter bien des recherches. La compatibilité entre versions de <strong>AIR</strong> pour les mises en jours en passant par le framework <strong>ApplicationUpdater</strong> (<strong>ApplicationUpdaterUI</strong> pour utiliser l'interface par défault).</p>
<p>&nbsp;</p>
<p>Voici le schéma de description à utiliser pour les versions antérieurs ou égal à la version 2 de <strong>AIR</strong> :</p>
<p>&nbsp;</p>
<pre class="code xml">
< ?xml version="1.0" encoding="utf-8"?>
    < update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
        < version>1.0.1< /version>
        < url>http://www.example.com/updates/application_1.0.1.air< /url>
        < description>This is the latest version of the Sample application.< /description>
    < /update>
</pre>
<p>&nbsp;</p>
<p>Pour continuer les mises à jours, il faut tout simplement modifier ce fichier xml en mettant à jour le numéro de version, et la mise a jour se declenchera.</p>
<p>&nbsp;</p>
<p>Cependant, si au cours d'une mise a jour vous passer sur une version AIR 2.5 (packaging en utilisant le namespace : <strong>http://ns.adobe.com/air/application/2.5</strong>), la prochaine mise à jour ne se fera plus. Pour la simple et bonne raison que le schéma de descriptif des applications <strong>n'est pas le même et encore moins rétro-compatible</strong>.</p>
<p>&nbsp;</p>
<p>Deux gros changements sont à noter dans ce nouveau schéma :</p> ]]></description>
		<pubDate>Wed, 23 Feb 2011 23:45:23 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/air-schéma-descriptif-des-mises-à-jour.html</guid>
</item><item>
		<title>Gestion du clavier en AS3</title>
		<link>http://www.revolugame.com/blog/gestion-du-clavier-en-as3.html</link>
		<description><![CDATA[ <p>Dans les jeux, tout comme dans les applications, le clavier peut être autant utilisé que la souris.</p>
<p>Cependant, la gestion du clavier est un peu plus longue à mettre en place, par rapport à celle de la souris, car en règle générale, la souris ne possède que deux boutons (ou du moins, seuls ces deux boutons sont utilisés).</p>
<p>&nbsp;</p>
<p>Pour ce faire, nous n'avons besoin que d'un seul écouteur sur l'élèment <strong>stage</strong>.</p>
<p>La classe <strong>KeyboardEvent</strong> nous permet de gérer l'évènement <strong>KEY_DOWN</strong> et <strong>KEY_UP</strong>. Dans notre cas, nous allons simplement gérer l'appui sur les touches.</p>
<p>&nbsp;</p>
<pre class="code haxe">stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);</pre>
<p>&nbsp;</p>
<p>Maintenant que nous avons notre écouteur, nous pouvons simplement gérer les <strong>keyCode</strong> de l'évènement dispatché.</p>
<p>&nbsp;</p>
<pre class="code haxe">private function keyDownHandler(pEvt:KeyboardEvent):void
{
    trace(pEvt.keyCode);
}</pre><p>&nbsp;</p>
<p>La classe <strong>flash.ui.Keyboard</strong> liste la majeure partie des touches disponible sur le clavier.</p><p>Par exemple, la touche <strong>ENTER</strong> est accessible par <strong>Keyboard.ENTER</strong>.</p>
<p>&nbsp;</p>
<p>Maintenant, si vous souhaitez gérer l'appui sur les touches <strong>ctrl</strong>, <strong>shift</strong> et <strong>alt</strong>, l'évènement dispose d'attribut permettant de nous l'indiquer :</p>
<p>&nbsp;</p>
<pre class="code haxe">trace("ctrlKey: " + pEvt.ctrlKey);
trace("shiftKey: " + pEvt.shiftKey);
trace("altKey: " + pEvt.altKey);</pre>
<p>&nbsp;</p>
<p>Dans un cas un peu plus pratique, admettons que vous vouliez développer une calculatrice, sans pour autant utiliser <strong>TextInput</strong> (Flex) ou l'attribut <strong>type</strong> de la classe <strong>TextField</strong> (AS3).</p><p>Il vous faudrait alors gérer les différentes touches permettant d'écrire un 1.</p>
<p>&nbsp;</p>
<pre class="code haxe">if(pEvt.shiftKey && pEvt.keyCode == Keyboard.NUMBER_1 || pEvt.keyCode == Keyboard.NUMPAD_1)
{
    trace('touche 1');
}</pre><p>&nbsp;</p><p>Ce qui permet de gérer à la fois le pavé numérique, et les touches du clavier accessible par la touche shift.</p> ]]></description>
		<pubDate>Fri, 04 Feb 2011 12:37:32 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/gestion-du-clavier-en-as3.html</guid>
</item><item>
		<title>Démo de Color Shooter</title>
		<link>http://www.revolugame.com/blog/démo-de-color-shooter.html</link>
		<description><![CDATA[ <p>Suite aux trois derniers tutos, voici une version de d&eacute;monstration du jeu Color Shooter. Jeu class&eacute; dans la cat&eacute;gorie des <strong>shoot them up</strong>.&nbsp;Pour jouer, <a href="labo/color-shooter.html">c'est par l&agrave;</a> !</p> ]]></description>
		<pubDate>Sun, 30 Jan 2011 13:02:47 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/démo-de-color-shooter.html</guid>
</item><item>
		<title>Développer un petit moteur d'affichage</title>
		<link>http://www.revolugame.com/blog/développer-un-petit-moteur-d-affichage.html</link>
		<description><![CDATA[ <p>Sur certain petits jeux ne nécessitant <strong>pas trop de ressources graphiques</strong>, voir même pour une petite application, il est toujours question d'utiliser les mêmes éléments, et la même façon de fonctionner.</p>
<p>Dans un précédent <a href="blog/gestion-simple-de-changement-de-page-en-as3.html">article</a>, nous avions vu comment gérer les écrans d'affichage de manière simple et complètement indépendante du reste.</p>
<p>Maintenant nous allons voir comment <strong>mettre en pratique</strong> cette technique de manière à avoir un moteur de jeu relativement simple et basé sur les <strong>Sprite</strong>.</p>
<p>&nbsp;</p>


<h2>1- Le moteur</h2>

<p>Notre moteur est le <strong>pilier</strong>, les classes principales de nos jeux devront hériter de celle-ci.</p>
<p>&nbsp;</p>
<p class="info">Chose importante, nous avons besoin d'attendre que notre classe soit ajoutée à la liste d'affichage avant d'aller plus loin, sinon nous ne pourrions avoir accès à l'élément stage.</p>
<p>&nbsp;</p>
<p>Voici le code commenté :</p> ]]></description>
		<pubDate>Fri, 21 Jan 2011 16:01:38 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/développer-un-petit-moteur-d-affichage.html</guid>
</item><item>
		<title>Google Analytics for Flash</title>
		<link>http://www.revolugame.com/blog/google-analytics-for-flash.html</link>
		<description><![CDATA[ <p>Sur certains types de <strong>RIA</strong>, il peut être nécessaire de suivre les visites et le traffic générés.</p>
<p>Toute fois, en flash, à moins de passer par du JavaScript, c'est toujours difficile. Il existe cependant des projets permettant de profiter de la puissance de <strong>Google Analytics</strong>.</p>
<p>&nbsp;</p>
<p style="width:100%;text-align:center;"><img src="/assets/images/tuto/gaforflash.jpg" alt="image GAforflash"/>
<p>&nbsp;</p>
<p>Aujourd'hui nous allons voir l'utilisation de la librairie <strong>Google Analytics Tracking For Adobe Flash</strong> qui se trouve être développée par <strong>Adobe Systems, Inc.</strong> (pour les intimes).</p>
<p>&nbsp;</p>
<p>Deux pré-requis avant d'aller plus loin. Tout d'abord, il vous faudra télécharger le <strong>swc</strong> puis l'importer dans votre projet (<a href="http://code.google.com/p/gaforflash/downloads/list" target="_blank">page de téléchargement</a>).</p><p>Maintenant que tout est en place, <strong>deux méthodes</strong> s'offrent à vous.</p> ]]></description>
		<pubDate>Fri, 21 Jan 2011 15:04:22 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/google-analytics-for-flash.html</guid>
</item><item>
		<title>Ajout d'une trainée derrière un objet</title>
		<link>http://www.revolugame.com/blog/ajout-dune-trainée-derrière-un-objet.html</link>
		<description><![CDATA[ <p>Voici une méthode relativement <strong>simple à mettre en place</strong>, pour ajouter une trainée derrière un élément.</p>
<p>Dans le cas présent, l'objet sur lequel je veux ajouter une trainée hérite de la classe <strong>Shape</strong>. Nous allons donc nous baser la dessus.</p>
<p>&nbsp;</p>
<p>Dans le cas ou nous voudrions ajouter une trainée à <strong>plusieurs éléments</strong>, nous allons laisser la classe principale s'occuper d'ajouter et de supprimer les différents éléments composant la trainée. Ce qui nous permettrait également de supprimer un élement d'affichage, sans pour autant supprimer la trainée. Quand à la disparition de celle-ci, c'est à dire la diminution d'opacité, c'est elle même qui va s'en occuper, et dispatcher un évènement quand elle a besoin d'entre retirée de la liste d'affichage.</p>
<p>&nbsp;</p>
<p>Bien entendu, nous n'allons ajouter la trainée seulement si notre élément est en mouvement :</p>
<p>&nbsp;</p>
<pre class="code haxe">if(parent!=null && isMoving)
{
    var sh : Trail = new Trail( x, y, rotation, trailTimer, trailTimerCount);
    sh.graphics.copyFrom(graphics);
                
    var evt : GameEvent = new GameEvent(GameEvent.ON_NEW_TRAIL);
    evt.data = sh;
                
    dispatchEvent(evt);
}</pre> ]]></description>
		<pubDate>Thu, 20 Jan 2011 11:35:18 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/ajout-dune-trainée-derrière-un-objet.html</guid>
</item><item>
		<title>Déplacement d'un objet selon la souris</title>
		<link>http://www.revolugame.com/blog/deplacement-dun-objet-selon-la-souris.html</link>
		<description><![CDATA[ <p>Derni&egrave;rement, lors du d&eacute;veloppement d'un <strong>shoot them up</strong>, j'ai d&eacute;cid&eacute; que les mouvements du vaisseau devait être <strong>g&eacute;r&eacute; par le mouvement de la souris</strong>.</p> 
<p>Il était également plus intéressant de faire un <strong>effet d'accélération</strong> pour les déplacements, sans rendre cet effet trop important pour ne pas gêner le joueur.</p>
<p>&nbsp;</p>
<p>Tout d'abords, nous avons besoin de quelques variables :</p>
<p>&nbsp;</p>
<pre class="code haxe">private var _currentSpeed   :Float = 0; // La valeur de la vitesse du vaisseau (à l'instant t)
private var _speedMax       :Float = .1; // La vitesse maximale
private var _acceleration   :Float = .01; // l'accélération</pre>
<p>&nbsp;</p>
<p>Dans notre boucle principale, nous avons simplement besoin de rafraichir les déplacements du vaisseaux en appellant la fonction <strong>update()</strong> du notre classe <strong>Ship</strong>.</p>
<p>&nbsp;</p>
<pre class="code haxe">addEventListener(Event.ENTER_FRAME, loop);
private function loop(pEvt:Event):Void
{
    _ship.update();
}</pre> ]]></description>
		<pubDate>Thu, 20 Jan 2011 10:02:04 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/deplacement-dun-objet-selon-la-souris.html</guid>
</item><item>
		<title>Faire un dégradé sur un texte</title>
		<link>http://www.revolugame.com/blog/faire-un-dégradé-sur-un-texte.html</link>
		<description><![CDATA[ <p>En as3, il est relativement simple de faire un <strong>dégradé sur un élément graphique</strong> (cf <a href="blog/faire-un-degrade-en-flash.html">Faire un dégradé en Flash</a>). Mais dès lors que nous souhaitons le faire sur du texte, à première vue, la tache ce complique.<p>
<p>&nbsp;</p>
<p>Cependant, ce n'est pas extrèmement plus compliqué. En effet, il suffit de définir le dégradé, comme pour un élément graphique, mais au lieu de laisser cet élément seul, nous allons lui appliquer un masque. Et ce masque sera notre élément <strong>TextField</strong>.</p>
<p>Du coup, notre dégradé ce verra au travers de notre texte.</p>
<p>&nbsp;</p>
<p>Voici un exemple avec une <strong>police compilée</strong>, pour bien montrer que le principe reste le même :</p> ]]></description>
		<pubDate>Tue, 14 Dec 2010 11:57:08 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/faire-un-dégradé-sur-un-texte.html</guid>
</item><item>
		<title>Gestion simple de changement de page en AS3</title>
		<link>http://www.revolugame.com/blog/gestion-simple-de-changement-de-page-en-as3.html</link>
		<description><![CDATA[ <p>Dans un jeu, il est souvent nécessaire d'avoir plusieurs écran, comme par exemple, l'écran d'accueil, l'écran de jeu, puis l'écran de score une fois le jeu terminé.</p>
<p>Voici une implementation relativement simple, avec possibilité de faire communiquer les vues (ou ecran) entre elles.</p>
<p>&nbsp;</p>
<p>Tout d'abord, nous avons besoin de notre classe <strong>Screen</strong>, qui sera la classe parente de tous nos ecrans.</p>
<p>&nbsp;</p>
<pre class="code haxe">package com.afischer.ui
{
    import flash.display.Sprite;
	
    public class Screen extends Sprite
    {
        protected var params : Object;
		
        public function Screen(pParams:Object = null):void
        {
            params = pParams;
        }
    }
}</pre>
<p>&nbsp;</p>
<p>Nous avons donc une variable <strong>params</strong> qui nous permettra de faire <strong>communiquer les données</strong> entre les vues.</p> ]]></description>
		<pubDate>Fri, 03 Dec 2010 16:28:27 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/gestion-simple-de-changement-de-page-en-as3.html</guid>
</item><item>
		<title>Flex - compiler en ligne de commande</title>
		<link>http://www.revolugame.com/blog/flex-compiler-en-ligne-de-commande.html</link>
		<description><![CDATA[ <p>Si on ne passe pas par un <strong>IDE</strong> quelconque, pour pouvoir compiler une application flash, nous avons besoin de passer par un <strong>terminal</strong> et de compiler tout ca a la main.</p>
<p>Tout ce dont nous avons besoin est pr&eacute;sent dans le <strong>sdk de Flex</strong> (dossier bin)</p>
<p>&nbsp;</p>
<h2>Le fichier de configuration</h2>
<p>&nbsp;</p>
<p>Le plus simple et le plus propre pour compiler, c'est de cr&eacute;er un fichier de configuration (<strong>r&eacute;utilisable</strong>).</p>
<p>Voici un xml tr&egrave;s simple, que nous allons appeller <strong>config.xml</strong></p>
<p>&nbsp;</p>
<pre class="code xml">
< flex-config xmlns="http://www.adobe.com/2006/flex-config">
	< target-player>10.1.0< /target-player>
	< output>bin-debug/appli.swf< /output>
	< default-size>
	    < width>230
	    < height>800
	< /default-size>
	< compiler>
		< optimize>true< /optimize>
		< strict>true< /strict>
		< source-path append="true">
			< path-element>src< /path-element>
		< /source-path>
	< /compiler>
	< file-specs>
		< path-element>src/Application.mxml< /path-element>
	< /file-specs>
< /flex-config>
</pre><p>&nbsp;</p>
<p>Pour avoir la liste des param&egrave;tres possible :</p>
<pre class="code">~/sdks/flex_sdk_4.1.0.16076/bin/mxmlc -help list advanced</pre> ]]></description>
		<pubDate>Tue, 23 Nov 2010 16:10:41 +0100</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/flex-compiler-en-ligne-de-commande.html</guid>
</item><item>
		<title>AIR - Icone de la zone de notification</title>
		<link>http://www.revolugame.com/blog/air-icone-de-la-zone-de-notification.html</link>
		<description><![CDATA[ <h2>Créer l'icone</h2>
<p>Première chose à faire, détecter le type d'icone supporté.</p>
<p>Il existe <strong>deux types</strong> : l'icone dans la <strong>zone de notification</strong> (type Windows / Linux) ou l'icone dans la <strong>zone du dock</strong> (Mac) :</p>
<p>&nbsp;</p>
<pre class="code haxe">import flash.desktop.NativeApplication;

if (NativeApplication.supportsSystemTrayIcon) 
{ 
    // zone de notification
}
else if (NativeApplication.supportsDockIcon) 
{
    // dock
}</pre>
<p>&nbsp;</p>
<p>Il nous faut maintenant charger l'icone que nous voulons afficher via la classe <strong>flash.display.Loader</strong>.</p>
<p>&nbsp;</p>
<pre class="code haxe">var icon : Loader = new Loader();
icon.contentLoaderInfo.addEventListener(Event.COMPLETE, iconLoadComplete); 
icon.load(new URLRequest('icon_048.png'));</pre>
<p>&nbsp;</p>
<p>En ce qui concerne la taille, 48x48 pour la zone de notification, 128x128 pour le dock sont les tailles les plus adaptées.</p>
<p>&nbsp;</p>
<p>Voilà pour ce qui est de l'icone.</p> ]]></description>
		<pubDate>Fri, 22 Oct 2010 11:00:47 +0200</pubDate>
		<guid isPermaLink="false">http://www.revolugame.com/blog/air-icone-de-la-zone-de-notification.html</guid>
</item>	</channel>
</rss>
