<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blauhgue</title>
	<atom:link href="http://www.turboconnard.com/b/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.turboconnard.com/b</link>
	<description>sweet !</description>
	<lastBuildDate>Fri, 05 Nov 2010 12:33:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>La détection de collision</title>
		<link>http://www.turboconnard.com/b/2010/11/04/la-detection-de-collision/</link>
		<comments>http://www.turboconnard.com/b/2010/11/04/la-detection-de-collision/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 18:58:07 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Jeux indépendants]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[axe séparateur]]></category>
		<category><![CDATA[collision]]></category>
		<category><![CDATA[collisions]]></category>
		<category><![CDATA[detection de collision]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=279</guid>
		<description><![CDATA[A mes débuts de &#8220;flasher&#8221; j&#8217;avais était super impressionné par &#8220;N&#8221; : un vrai jeu avec un moteur de collisions + physique poussé. Ce jeu fonctionne vraiment bien et on ne tombe jamais sur aucun glitch de collision très courant à l&#8217;époque des jeux flashs : Passage au travers d&#8217;un mur, décalage plus qu&#8217;approximatif dans [...]]]></description>
			<content:encoded><![CDATA[<p>A mes débuts de &#8220;flasher&#8221; j&#8217;avais était super impressionné par <a href="http://www.metanetsoftware.com/" target="_blank">&#8220;N&#8221; : un vrai jeu avec un moteur de collisions + physique poussé</a>. Ce jeu fonctionne vraiment bien et on ne tombe jamais sur aucun glitch de collision très courant à l&#8217;époque des jeux flashs : Passage au travers d&#8217;un mur, décalage plus qu&#8217;approximatif dans le calcul de la trajectoire etc. Je me suis replongé dans la détection de collision l&#8217;autre jour et j&#8217;ai tout de suite pensé à ce jeu comme base de réflexion.</p>
<p>Je sais qu&#8217;il existe des moteurs très puissant de physique tel que <a href="http://www.box2d.org/" target="_blank">box 2D </a>(largement exploité en minigame iphone, android flash&#8230;) mais malheureusement je trouve que trop de physique peut nuire grandement au gameplay et j&#8217;ai pas envie de m&#8217;embêter avec des poids, vélocité etc&#8230; pour un jeu de plateforme. Sur le plutôt bon <a href="http://www.rovio.com/index.php?page=angry-birds" target="_blank">Angrybirds </a>la physique m&#8217;énerve un peu trop des fois.</p>
<p>Dans &#8220;new super mario bros wii&#8221; par exemple, il y a une super bonne détection de collisions qui est loin d&#8217;être réaliste (heureusement) et pourtant on s&#8217;en passe et le jeu arrache tout. Mario est soumis à la gravité, il peut marcher sur des plateformes rondes (qui tournent), en pentes, qui bougent, des rectangulaires qui tournent etc&#8230; C&#8217;est ce compromis que je recherche et aujourd&#8217;hui, à ma connaissance, il n&#8217;y a pas de moteur de collisions / faussement physique.</p>
<p>Exemple de belles plateformes rectangulaires qui tournent dans le niveau 9-1 :<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/ScTh4eK5KpA?fs=1&amp;hl=en_US&amp;color1=0x5d1719&amp;color2=0xcd311b" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/ScTh4eK5KpA?fs=1&amp;hl=en_US&amp;color1=0x5d1719&amp;color2=0xcd311b" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>En cherchant un peu je suis tombé sur les tutoriels de N : http://www.metanetsoftware.com/technique/tutorialA.html<br />
Ils expliquent assez bien et sont très utiles pour comprendre les concepts de collisions entre différents objets. Et bien sûr la fameuse technique de l&#8217;axe séparateur qui semble faire l&#8217;unanimité chez les développeurs.</p>
<p>Récap :</p>
<ul>
<li> on peut dire que deux objets ne se touchent pas tant qu&#8217;on peut tirer un trait entre les deux.</li>
<li> un de ces traits est forcément parallèle à un coté d&#8217;un des objets.</li>
</ul>
<p>Partant de là, il est assez facile par &#8220;projection&#8221; de trouver (ou pas) les collisions. Encore faut il comprendre la projection, sur quoi projeter et pourquoi.</p>
<p>En informatique 2D on teste souvent la collision entre &#8220;hitbox&#8221; (une boîte rectangulaire qui entoure la totalité ou une partie seulement d&#8217;un sprite.) Ça facilite grandement les calculs, on gagne en performance mais des fois c&#8217;est pas suffisant. On verra néanmoins que ce calcul rapide est à effectué dans certains cas. Le principe est simple : si les distances respectives en x et y entre les centres des deux objets sont inférieures à la moitié de la somme de leurs longueurs et hauteurs, il y a collision.</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre.png"><img class="alignnone size-full wp-image-283" title="carre" src="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre.png" alt="" width="540" height="400" /></a></p>
<p>La soustraction de ces distances et des sommes des longueurs et hauteurs donnent des valeurs de superpositions des objets : des vecteurs de pénétration.</p>
<p>Ça marche très bien, mais seulement pour les AABB : Axis Aligned Bounding Box. Comprendre &#8220;Boites rectangulaires sans rotation&#8221;</p>
<p>Ce principe de détection de collisions marche super bien dans beaucoup de cas (Shmup, jeux de plateforme etc&#8230;) mais il est limite quand on veut pousser l&#8217;expérience de l&#8217;utilisateur un peu plus loin. (voir exemple de mario ci dessus)</p>
<p>Si on commence à faire tourner les boites ca devient compliqué car la petite astuce précédente ne marche plus :</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre2.png"><img class="alignnone size-full wp-image-289" title="carre2" src="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre2.png" alt="" width="150" height="170" /></a></p>
<p>Pourtant, on voit bien que l&#8217;on peut tracer ce fameux trait entre les deux boites ! et on voit bien qu&#8217;il devrait être parallèle au côté de la boite rouge comme précédemment énoncé.</p>
<p>Avec la précédente technique ça ne marche pas car on ne vérifie que le recouvrement sur les axes x et y. Sauf qu&#8217;ici, ce n&#8217;est pas sur ces axes qu&#8217;il faut chercher mais bien sur tous les axes décrits par les arêtes des boites. Pour &#8220;voir&#8221; que les boîtes ne se touchent pas, il faut se positionner au niveau de la boite rouge et de regarder le long de son côté à droite sur le dessin.</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre3.png"><img class="alignnone size-full wp-image-290" title="carre3" src="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre3.png" alt="" width="350" height="350" /></a></p>
<p>en supprimant les doublons on trouve 4 axes&#8230;</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre3.png"></a><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre4.png"><img class="alignnone size-full wp-image-291" title="carre4" src="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre4.png" alt="" width="350" height="350" /></a></p>
<p>Pour le cas des AABB il n&#8217;y avait que 2 axes, ici on en a 4 mais le principe reste le même. Il faut calculer les superpositions des deux boites sur les 4 axes. Je ne vais pas vous expliquer comment faire parce que pour le coup, les tutoriels de N expliquent très bien les vecteurs et tout le bordel mais le principe est pas forcément simple à comprendre.</p>
<p>En écartant les axes ca devient un peu plus lisible (c&#8217;est pas nécessaire pour le code, en général on teste les axes en 0,0).</p>
<p>Première projection, je trouve une collision.</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre5.png"><img class="alignnone size-full wp-image-295" title="carre5" src="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre5.png" alt="" width="540" height="400" /></a></p>
<p>Deuxième projection, pas de collision&#8230;</p>
<p><a href="../wp-content/uploads/2010/11/carre6.png"><img title="carre6" src="http://www.turboconnard.com/b/wp-content/uploads/2010/11/carre6.png" alt="" width="540" height="400" /></a></p>
<p>En faisant les mêmes calculs sur tous les axes séparateurs, on obtient donc les collisions ou pas. En prenant le vecteur de pénétration le plus court de toutes les collisions des projections on trouve la position &#8220;idéale&#8221; où l&#8217;objet devrait être.</p>
<p>Dans ce test, on ne parle pas de physique, de rebonds ou de gravité&#8230; C&#8217;est un autre sujet, cependant un petit test flash donne déjà des résultats surprenants :<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.turboconnard.com/sources/collisions/Test.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.turboconnard.com/sources/collisions/Test.swf" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Dans cet exemple, on peut déplacer les formes à la souris et le rectangle gris à l&#8217;aide des touches. Le moteur physique se résume à &#8220;vitY += 1; &#8221; autrement dit seulement une gravité basique. C&#8217;est pour ça que les plateformes ne transmettent pas leur vitesse de rotation au sprite rectangulaire. Mais ce n&#8217;est pas ce que l&#8217;on teste ici.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/11/04/la-detection-de-collision/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TCGMLPlayer</title>
		<link>http://www.turboconnard.com/b/2010/10/27/tcgmlplayer/</link>
		<comments>http://www.turboconnard.com/b/2010/10/27/tcgmlplayer/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 19:10:44 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[gml]]></category>
		<category><![CDATA[000000book]]></category>
		<category><![CDATA[graffiti analysis]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=273</guid>
		<description><![CDATA[bon ben voila, je crois que j&#8217;ai assez creusé la piste flash pour cette appli&#8230; les sources par la.]]></description>
			<content:encoded><![CDATA[<p>bon ben voila, je crois que j&#8217;ai assez creusé la piste flash pour cette appli&#8230;</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.turboconnard.com/sources/tcgmlplayer/tcgmlplayer.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="640" height="480" src="http://www.turboconnard.com/sources/tcgmlplayer/tcgmlplayer.swf" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://www.turboconnard.com/sources/tcgmlplayer/tcgmlplayer.zip" target="_blank">les sources par la.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/10/27/tcgmlplayer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Graffiti Analysis Flash Test 2</title>
		<link>http://www.turboconnard.com/b/2010/10/06/graffiti-analysis-flash-test-2/</link>
		<comments>http://www.turboconnard.com/b/2010/10/06/graffiti-analysis-flash-test-2/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 20:20:31 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[flash]]></category>
		<category><![CDATA[gml]]></category>
		<category><![CDATA[graffiti]]></category>
		<category><![CDATA[graffiti analysis]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=268</guid>
		<description><![CDATA[Ok, j&#8217;avais laissé en plan le &#8220;graffiti analysis test&#8221; mais il fallait quand même que je règle ce problème de vecteur &#8220;UP&#8221;. J&#8217;ai donc trouvé la formule magique pour orienter les graffitis dans le &#8220;bon&#8221; sens. En gros les applications qui enregistrent les tags doivent préciser un vecteur &#8220;UP&#8221; qui détermine l&#8217;orientation du graffiti. Certaines [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, j&#8217;avais laissé en plan le &#8220;graffiti analysis test&#8221; mais il fallait quand même que je règle ce problème de vecteur &#8220;UP&#8221;. J&#8217;ai donc trouvé la formule magique pour orienter les graffitis dans le &#8220;bon&#8221; sens.</p>
<p>En gros les applications qui enregistrent les tags doivent préciser un vecteur &#8220;UP&#8221; qui détermine l&#8217;orientation du graffiti. Certaines applications (ex : Coding With Attitude GML Drawer : MFF2010  ) ne le font pas donc on prendra l&#8217;axe Y par défaut, c&#8217;est l&#8217;orientation qui est la plus &#8220;normale&#8221;.</p>
<p>Mais d&#8217;autres applications (presque toutes d&#8217;ailleurs puisqu&#8217;il s&#8217;agit de portages) ont par défaut un vecteur &#8220;UP&#8221; sur l&#8217;axe des x  : (1,0,0);</p>
<p>Si on opère pas de transformation, certains graffitis vont s&#8217;écrire de haut en bas et non pas de gauche à droite. La première solution est de choisir arbitrairement : &#8220;bon ben si c&#8217;est Y, on touche à rien et si c&#8217;est X ben on fait une rotation de -90° et c&#8217;est marre&#8230;&#8221; Mais on vaut quand même mieux que ça !</p>
<p>Donc la technique c&#8217;est de trouver l&#8217;axe et l&#8217;angle de rotation puis d&#8217;appliquer la transformation.<br />
Le code est dans le &#8220;onload&#8221; du xml.</p>
<p><object width="320" height="240"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="/sources/gml/gml2.swf" /><param name="bgcolor" value="#999999"/><embed src="/sources/gml/gml2.swf" type="application/x-shockwave-flash" bgcolor="#999999" allowfullscreen="true" allowscriptaccess="always" width="320" height="240"></embed></object></p>
<div class="dean_ch" style="white-space: nowrap;">
package <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">DisplayObject</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">MovieClip</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">Event</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">MouseEvent</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">geom</span>.<span class="me1">Matrix3D</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">geom</span>.<span class="me1">Rectangle</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">geom</span>.<span class="me1">Vector3D</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLLoader</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @author Turboconnard<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">class</span> Test3D <span class="kw3">extends</span> <span class="kw3">MovieClip</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> yaxis : Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> zaxis : Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> xaxis : DisplayObject;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> axe : Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> container : Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> graf : Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Test3D<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//waiting for stage to be instanciate</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEventListener<span class="br0">&#40;</span>Event.<span class="me1">ADDED_TO_STAGE</span>, _add<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> _add<span class="br0">&#40;</span>event : Event<span class="br0">&#41;</span> : <span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/* remember 3D objects may have a z if you want transform thme */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">RESIZE</span>,resize<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//creating global container</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.<span class="me1">z</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graf = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graf.<span class="me1">z</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span class="br0">&#40;</span>container<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.<span class="me1">addChild</span><span class="br0">&#40;</span>graf<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//building 3D axis viewer</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xaxis = getLine<span class="br0">&#40;</span>0x0000ff<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yaxis = getLine<span class="br0">&#40;</span>0x00ff00<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zaxis = getLine<span class="br0">&#40;</span>0xff0000<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xaxis.<span class="me1">z</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yaxis.<span class="me1">z</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zaxis.<span class="me1">z</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yaxis.<span class="me1">transform</span>.<span class="me1">matrix3D</span>.<span class="me1">appendRotation</span><span class="br0">&#40;</span><span class="nu0">90</span>, Vector3D.<span class="me1">Z_AXIS</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; zaxis.<span class="me1">transform</span>.<span class="me1">matrix3D</span>.<span class="me1">appendRotation</span><span class="br0">&#40;</span><span class="nu0">90</span>, Vector3D.<span class="me1">Y_AXIS</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">z</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">addChild</span><span class="br0">&#40;</span>xaxis<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">addChild</span><span class="br0">&#40;</span>yaxis<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">addChild</span><span class="br0">&#40;</span>zaxis<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span class="br0">&#40;</span>axe<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//load a graffiti</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">load</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//resize</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resize<span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* load a random graffiti<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">load</span><span class="br0">&#40;</span><span class="kw3">e</span>:MouseEvent<span class="br0">&#41;</span> : <span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">removeEventListener</span><span class="br0">&#40;</span>MouseEvent.<span class="me1">CLICK</span>,<span class="kw3">load</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alpha = <span class="nu0">0.2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> urlLoader : URLLoader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlLoader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, _onLoad<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlLoader.<span class="kw3">load</span><span class="br0">&#40;</span><span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;http://000000book.com/data/&quot;</span> +<span class="st0">&quot;random&quot;</span>+ <span class="st0">&quot;.gml&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> _onLoad<span class="br0">&#40;</span>event : Event<span class="br0">&#41;</span> : <span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>MouseEvent.<span class="me1">CLICK</span>,<span class="kw3">load</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alpha = <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> gml:<span class="kw3">XML</span> = <span class="kw3">XML</span><span class="br0">&#40;</span>URLLoader<span class="br0">&#40;</span>event.<span class="kw3">target</span><span class="br0">&#41;</span>.<span class="kw3">data</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> env:XMLList = gml.<span class="me1">tag</span>.<span class="me1">environment</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Some graffitis aren&#8217;t drawn with Y as up axis.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//we have to rotate our world to mach our Y up axis.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//my up vector in flash&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="kw3">up</span>:Vector3D = &nbsp;<span class="kw2">new</span> Vector3D<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">1</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//graffiti&#8217;s up vector</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> modelup:Vector3D;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">int</span><span class="br0">&#40;</span>env.<span class="kw3">up</span>.<span class="me1">x</span><span class="br0">&#41;</span> + <span class="kw3">int</span><span class="br0">&#40;</span>env.<span class="kw3">up</span>.<span class="me1">y</span><span class="br0">&#41;</span> + <span class="kw3">int</span><span class="br0">&#40;</span>env.<span class="kw3">up</span>.<span class="me1">z</span><span class="br0">&#41;</span> == <span class="nu0">0</span> <span class="br0">&#41;</span> modelup = <span class="kw2">new</span> Vector3D<span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">1</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> modelup = <span class="kw2">new</span> Vector3D<span class="br0">&#40;</span>env.<span class="kw3">up</span>.<span class="me1">x</span>, env.<span class="kw3">up</span>.<span class="me1">y</span>, env.<span class="kw3">up</span>.<span class="me1">z</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//looking for axis to rotate</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> rotationaxis:Vector3D = <span class="kw3">up</span>.<span class="me1">crossProduct</span><span class="br0">&#40;</span>modelup<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//looking for rotation angle</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> angle:<span class="kw3">Number</span> = <span class="kw3">Math</span>.<span class="kw3">acos</span><span class="br0">&#40;</span> <span class="kw3">up</span>.<span class="me1">dotProduct</span><span class="br0">&#40;</span>modelup<span class="br0">&#41;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//rotate objects</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">transform</span>.<span class="me1">matrix3D</span> = <span class="kw2">new</span> Matrix3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graf.<span class="me1">transform</span>.<span class="me1">matrix3D</span> = <span class="kw2">new</span> Matrix3D<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">transform</span>.<span class="me1">matrix3D</span>.<span class="me1">appendRotation</span><span class="br0">&#40;</span>angle/<span class="kw3">Math</span>.<span class="kw3">PI</span>*<span class="nu0">180</span>, rotationaxis<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graf.<span class="me1">transform</span>.<span class="me1">matrix3D</span>.<span class="me1">appendRotation</span><span class="br0">&#40;</span>angle/<span class="kw3">Math</span>.<span class="kw3">PI</span>*<span class="nu0">180</span>, rotationaxis<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//draw graffiti</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graf.<span class="me1">graphics</span>.<span class="kw3">clear</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; graf.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="nu0">8</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">int</span>=<span class="nu0">0</span>;i&lt;XMLList<span class="br0">&#40;</span>gml.<span class="me1">tag</span>.<span class="me1">drawing</span>.<span class="me1">stroke</span><span class="br0">&#41;</span>.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;i++<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> pts:XMLList = XMLList<span class="br0">&#40;</span>gml.<span class="me1">tag</span>.<span class="me1">drawing</span>.<span class="me1">stroke</span><span class="br0">&#41;</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">pt</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> k:<span class="kw3">int</span>=<span class="nu0">0</span>;k&lt;pts.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;k++<span class="br0">&#41;</span><span class="br0">&#123;</span>&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>k==<span class="nu0">0</span><span class="br0">&#41;</span> graf.<span class="me1">graphics</span>.<span class="kw3">moveTo</span><span class="br0">&#40;</span>pts<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">x*env</span>.<span class="me1">screenBounds</span>.<span class="me1">x</span>,pts<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">y*env</span>.<span class="me1">screenBounds</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> graf.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span>pts<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">x*env</span>.<span class="me1">screenBounds</span>.<span class="me1">x</span>,pts<span class="br0">&#91;</span>k<span class="br0">&#93;</span>.<span class="me1">y*env</span>.<span class="me1">screenBounds</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resize<span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* resize<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param e Event<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> resize<span class="br0">&#40;</span><span class="kw3">e</span>:Event<span class="br0">&#41;</span> : <span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">x</span> = <span class="kw3">stage</span>.<span class="me1">stageWidth</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; axe.<span class="me1">y</span> = <span class="kw3">stage</span>.<span class="me1">stageHeight</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//moving objects to center</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> box:Rectangle = container.<span class="me1">getRect</span><span class="br0">&#40;</span>container<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.<span class="me1">x</span> = &#8211; box.<span class="me1">x</span> + <span class="kw3">stage</span>.<span class="me1">stageWidth</span>/<span class="nu0">2</span> &#8211; box.<span class="kw3">width</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; container.<span class="me1">y</span> = &#8211; box.<span class="me1">y</span> + <span class="kw3">stage</span>.<span class="me1">stageHeight</span>/<span class="nu0">2</span> &#8211; box.<span class="kw3">height</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* draw an arrow<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param pColor arraow color<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span>&nbsp; <span class="kw2">function</span> getLine<span class="br0">&#40;</span>pColor : uint<span class="br0">&#41;</span> : Sprite <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> s : Sprite = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="nu0">1</span>, pColor,<span class="nu0">1</span>,<span class="kw2">false</span>,<span class="st0">&quot;none&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span><span class="nu0">20</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span><span class="nu0">15</span>, <span class="nu0">-2</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">graphics</span>.<span class="kw3">moveTo</span><span class="br0">&#40;</span><span class="nu0">20</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span><span class="nu0">15</span>, <span class="nu0">2</span><span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> s;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/10/06/graffiti-analysis-flash-test-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Jeux vidéo et accessibilité</title>
		<link>http://www.turboconnard.com/b/2010/09/28/jeux-video-et-accessibilite/</link>
		<comments>http://www.turboconnard.com/b/2010/09/28/jeux-video-et-accessibilite/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 17:43:17 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[Jeux indépendants]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[accessibilité]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=262</guid>
		<description><![CDATA[J&#8217;ai lu un article traitant de l&#8217;accessibilité des jeux vidéo dans le sensass magazine Amusement. Cet article ne traite pas du tout la partie technique liée au développement d&#8217;un jeu et je me demandais bien ce que ça implique en terme de dev. J&#8217;ai donc fait un tour sur le site mentionné :  www.ablegamers.com Le [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai lu un article traitant de l&#8217;accessibilité des jeux vidéo dans le sensass magazine <a href="http://amusement.fr/">Amusement</a>. Cet article ne traite pas du tout la partie technique liée au développement d&#8217;un jeu et je me demandais bien ce que ça implique en terme de dev. J&#8217;ai donc fait un tour sur le site mentionné :  <a href="http://www.ablegamers.com">www.ablegamers.com</a></p>
<p>Le site portail teste les jeux récents et note l&#8217;accessibilité de ces derniers. On y trouve en outre pas mal de news, tests de matériels, interviews etc&#8230; et bien sur le lien que j&#8217;espérais trouver &#8220;Developper ressources&#8221;.</p>
<p>Le lien mène <a href="http://www.gameaccessibility.org/">à un autre site </a>(un peu confus) qui tente de recenser des demandes récurrentes des joueurs handicapés et des informations sur les handicaps.<br />
Après avoir parcouru le site je me rends compte qu<strong>&#8216;il est extrêmement facile de développer un jeu accessible. </strong>Je ne prétends pas pouvoir créer des jeux accessibles à tous types de handicap mais certaines features faciliteraient bien les choses à certains gamers et sont hyper simple à mettre en place.</p>
<p><em>La customisation des touches/commandes. </em></p>
<p>Pas mal de joueurs ont du hardware spécifique : pad hacké, clavier mappé sur divers boutons, système de pointage différent, etc&#8230;<br />
Laissez les joueurs définir leurs boutons/touches et paramétrer la vélocité de la souris. C&#8217;est peanuts en code et en plus ça fait classe un écran de configuration de plus.</p>
<p><em>Difficulté</em></p>
<p>Une feature qui devrait être présente sur TOUS les jeux. J&#8217;avais déjà lu ça dans un précédent Amusement.Un mec se plaignait de Gears of War. Il avait fait passer le monstre aveugle 3 fois à travers le mur  avant la serre là. Puis il s&#8217;est dit &#8220;ben merde, c&#8217;est pas ça qu&#8217;il faut faire&#8221; donc il a tenté plein de trucs, est mort à chaque fois et à abandonner le jeu. Normal. (J&#8217;ai eu la même sur certains boss de RE5)</p>
<p>C&#8217;est hyper frustrant d&#8217;acheter un jeu à 60€ et de n&#8217;en voir que 10% parce que le boss du deuxième niveau est trop balèze. Du coup on se décourage et on passe à un autre jeu. Pourquoi ne pas ajouter une option, &#8220;passer à la suite&#8221; ?</p>
<p>Non mais sans dèc, ça change quoi ? Tu les as déjà lâché tes 60€ j&#8217;veux dire, t&#8217;es pas en train de voler l&#8217;éditeur du jeu en lui carottant quoi que ce soit&#8230; Qu&#8217;est ce que ça peux lui foutre à l&#8217;éditeur que t&#8217;aille au niveau final sans avoir réellement buter le boss du deuxième niveau ?<br />
Franchement, j&#8217;aurais aimé que cette option existe sur lostplanet parceque j&#8217;ai jamais vu la fin de ce putain de jeu à cause du boss de fin imprenable. J&#8217;ai du faire 5000 tentatives et je l&#8217;ai jamais eu. Ça me reste encore en travers de la gorge.</p>
<p>Bref, facile à mettre en place et hyper bien pour quand on est bloqué.</p>
<p>Autre exemple, t&#8217;achètes Street Figther  4 pour te friter avec tes potes et en fait, t&#8217;es obligé de terminer 50 fois le jeux pour avoir tous les persos&#8230; Honnêtement, j&#8217;ai mis le jeux en mode ultra easy avec un round gagnant et j&#8217;ai passé plusieurs heures comme un con à latter du Tchounli et autre Dalmish en regardant la télé. Il pourrait pas y avoir un bouton &#8220;Afficher tous les persos&#8221; et c&#8217;est marre ! En économisant la xbox et la télé HD de 102cm qui tournent pendant 12 heures pour débloquer ce nazbrok de Seth chez chaque acheteur du jeu, tu refroidis la planète de 2 degrés.</p>
<p><em>Le son</em></p>
<p>Facile à mettre en place aussi, des notifications visuelles pour accompagner le son.<br />
J&#8217;imagine un exemple à la con qui me frustrerait bien, un grand classic du jeu vidéo :</p>
<p>&#8220;L&#8217;interrupteur Timer qui ouvre une porte pendant un certain temps.&#8221;</p>
<p>C&#8217;est toujours pareil, t&#8217;actionne l&#8217;interrupteur et t&#8217;entends un petit (clic&#8230;&#8230;&#8230;clic&#8230;&#8230;..clic&#8230;&#8230;clic&#8230;clic..clic.cliccliccclclclclc, BOUM !). Bref, sans ce son t&#8217;es perdu, niqué. Ça me rendrait dingue.<br />
Certains jeux montrent l&#8217;ouverture de la porte, d&#8217;autres montrent l&#8217;interrupteur se remettre en place (ex:cordes qui remontent, manivelles qui tournent, etc&#8230;)<br />
Ya forcément moyen de trouver des astuces visuelles pour toutes ces notifications sonores.</p>
<p>Bon et sans parler des sous-titres paramétrables qui devraient être obligatoires pour tous les dialogues.</p>
<p><em>Graphisme</em></p>
<p>Je me rappelle jouer à &#8220;addidas power soccer&#8221; contre un pote légèrement daltonien (ou peut être tout simplement nul aux jeux vidéo). Il choisissait obligatoirement une équipe avec des maillots différents des miens, et moi forcément je le faisais chier en prenant une équipe avec des maillots sensiblement identiques aux siens&#8230;</p>
<p>Bref sans pour autant penser le graphisme avec toutes les contraintes des différents handicaps il est plutôt bon d&#8217;avoir un fort contraste sur les éléments interactifs et ou textes.</p>
<p>Récemment j&#8217;ai joué à l&#8217;excellent &#8220;limbo&#8221;. Ce jeu est super et non, il n&#8217;est pas court (comprenne qui pourra). Ce jeu plutôt facile propose une aventure aux interactions limitées mais sympas. Ça ne m&#8217;a pas empêché de rester bloqué pendant pas mal de temps sur un passage :</p>
<p>La glissade sur le toit après la tyrolienne.</p>
<p>J&#8217;ai dû chercher sur le net la solution : En fait ya un mini panneau avec une flèche qu&#8217;on voit presque pas, faut sauter et appuyer dessus pour actionner un changement de gravité. Ok. Appuyer sur un panneau, pourquoi pas. Je suis passé 50 fois devant et je l&#8217;ai pas vu&#8230;</p>
<p>Avec un bon contraste, des objets clairement reconnaissables on doit pouvoir s&#8217;en sortir.</p>
<p>Conclusion :</p>
<p>Voilà une première réflexion sur l&#8217;accessibilité dans le jeu vidéo. Rien de bien extraordinaire mais tellement logique quand on y pense. Pour finir, une demande que je trouvais super pertinente mais qui n&#8217;a rien à voir avec le jeu en lui même c&#8217;est d&#8217;avoir une documentation online pour chaque jeu. Pourquoi ? ben déjà tout simplement pour savoir si le jeu est accessible ou pas ! et ensuite pour pouvoir appréhender le jeu avant de l&#8217;acheter ou tout simplement d&#8217;en connaitre les règles&#8230;</p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/09/28/jeux-video-et-accessibilite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Graffiti Analysis Flash Test</title>
		<link>http://www.turboconnard.com/b/2010/08/11/graffiti-analysis-flash-test/</link>
		<comments>http://www.turboconnard.com/b/2010/08/11/graffiti-analysis-flash-test/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 11:50:59 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[gml]]></category>
		<category><![CDATA[graffiti]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=251</guid>
		<description><![CDATA[Faisant du flash depuis pas mal d&#8217;annése, c&#8217;était plus facile pour moi de faire un prototype en flash avant d&#8217;attaquer la version Java / android de l&#8217;application. La première partie consiste à charger les tags et les afficher. J&#8217;ai fait une classe simple pour tenter de lisser un peu mieux mes &#8220;bords de courbe&#8221;. Je [...]]]></description>
			<content:encoded><![CDATA[<p>Faisant du flash depuis pas mal d&#8217;annése, c&#8217;était plus facile pour moi de faire un prototype en flash avant d&#8217;attaquer la version Java / android de l&#8217;application.<br />
La première partie consiste à charger les tags et les afficher. J&#8217;ai fait une classe simple pour tenter de lisser un peu mieux mes &#8220;bords de courbe&#8221;. Je suis pas mal satisfait du résultat que voila :</p>
<p><object width="620" height="480"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="/sources/gml/gml.swf" /><embed src="/sources/gml/gml.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="620" height="480"></embed></object></p>
<p>Il reste un truc à faire mais j&#8217;ai la flemme&#8230; dans un fichier gml il y a un vecteur &#8220;up&#8221; qui définit la verticale du monde 3D. Il faudrait appliquer une rotation au container pour que les tags soient toujours bien orientés. Il arrive de tomber sur des tags qui sont dans le mauvais sens. </p>
<p>Cliquer pour charger un tag aléatoire.</p>
<p>sources :</p>
<div class="dean_ch" style="white-space: nowrap;">
package <br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">Event</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">MouseEvent</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">geom</span>.<span class="me1">Point</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLLoader</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">import</span> flash.<span class="me1">utils</span>.<span class="kw3">getTimer</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @author turboconnard<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* http://www.turboconnard.com<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> <span class="kw3">HEIGHT</span>:<span class="kw3">Number</span> = <span class="nu0">400</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> <span class="kw3">LINESTYLE</span>:<span class="kw3">Number</span> = <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> LINEALPHA:<span class="kw3">Number</span> = <span class="nu0">1</span> &nbsp;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> ALPHA:<span class="kw3">Number</span> = <span class="nu0">0.8</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> FADEIN:<span class="kw3">Number</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> FADEOUT:<span class="kw3">Number</span> = <span class="nu0">8</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> STROKEBASE:<span class="kw3">Number</span> = <span class="nu0">30</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> STROKE:<span class="kw3">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> MAXSTROKE:<span class="kw3">Number</span> = <span class="nu0">20</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw3">static</span> <span class="kw2">var</span> EASE:<span class="kw3">Number</span> = <span class="nu0">5</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> tag:<span class="kw3">String</span> = <span class="st0">&quot;19126&quot;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> gml:<span class="kw3">XML</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _count:<span class="kw3">int</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _container:Sprite;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _startTime:<span class="kw3">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _strokes:Vector.&lt;XMLList &gt; ;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _stroke:<span class="kw3">int</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> oldPoint:Point;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> oldP1:Point;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> oldP2:Point;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> oldStroke:<span class="kw3">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> angle:<span class="kw3">Number</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>MouseEvent.<span class="me1">CLICK</span>, _clic<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> _clic<span class="br0">&#40;</span>event : MouseEvent<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">load</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> urlLoader : URLLoader = <span class="kw2">new</span> URLLoader<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlLoader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, _onLoad<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlLoader.<span class="kw3">load</span><span class="br0">&#40;</span><span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;http://000000book.com/data/&quot;</span>+tag+<span class="st0">&quot;.gml&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tag = <span class="st0">&quot;random&quot;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> _onLoad<span class="br0">&#40;</span>event : Event<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">HEIGHT</span> = <span class="kw3">stage</span>.<span class="me1">stageHeight</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>numChildren<span class="br0">&#41;</span>&nbsp; &nbsp; &nbsp;removeChildAt<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _strokes = <span class="kw2">new</span> Vector.&lt;XMLList&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _stroke = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gml = <span class="kw3">XML</span><span class="br0">&#40;</span>URLLoader<span class="br0">&#40;</span>event.<span class="kw3">target</span><span class="br0">&#41;</span>.<span class="kw3">data</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i : <span class="kw3">int</span> = <span class="nu0">0</span>; i &lt; gml.<span class="me1">tag</span>.<span class="me1">drawing</span>.<span class="me1">stroke</span>.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _strokes.<span class="kw3">push</span><span class="br0">&#40;</span>gml.<span class="me1">tag</span>.<span class="me1">drawing</span>.<span class="me1">stroke</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">pt</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; createStroke<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _startTime = <span class="kw3">getTimer</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addEventListener<span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, _draw<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> <span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removeEventListener<span class="br0">&#40;</span>Event.<span class="me1">ENTER_FRAME</span>, _draw<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> _draw<span class="br0">&#40;</span>event : Event<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">getTimer</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; _startTime<span class="br0">&#41;</span> &gt; <span class="br0">&#40;</span>_strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span>_count<span class="br0">&#93;</span>.<span class="kw3">time</span> * <span class="nu0">1000</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _count++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>_count &gt;= _strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span>.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _stroke++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>_stroke &gt;= _strokes.<span class="kw3">length</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; createStroke<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; draw<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> createStroke<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _count = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldPoint = <span class="kw2">new</span> Point<span class="br0">&#40;</span>_strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">x</span> * <span class="kw3">HEIGHT</span>,_strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">y</span> * <span class="kw3">HEIGHT</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldP1 = oldPoint.<span class="me1">clone</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldP2 = oldPoint.<span class="me1">clone</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldStroke = STROKE = MAXSTROKE/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _container = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _container.<span class="me1">y</span> = <span class="kw3">HEIGHT</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _container.<span class="me1">rotation</span> = <span class="nu0">-90</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span class="br0">&#40;</span>_container<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> drawOne<span class="br0">&#40;</span>point:Point<span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> a:<span class="kw3">Number</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>_count ==<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a = &nbsp;<span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span> &#8211; <span class="kw3">Math</span>.<span class="kw3">atan2</span><span class="br0">&#40;</span>_strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">x</span> * <span class="kw3">HEIGHT</span> &#8211; oldPoint.<span class="me1">x</span>, _strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">y</span> * <span class="kw3">HEIGHT</span> &#8211; oldPoint.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a = &nbsp;<span class="kw3">Math</span>.<span class="kw3">atan2</span><span class="br0">&#40;</span>point.<span class="me1">y</span> &#8211; oldPoint.<span class="me1">y</span>,point.<span class="me1">x</span> &#8211; oldPoint.<span class="me1">x</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> dist:<span class="kw3">Number</span> = <span class="kw3">Math</span>.<span class="kw3">sqrt</span><span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">pow</span><span class="br0">&#40;</span>point.<span class="me1">x</span> &#8211; oldPoint.<span class="me1">x</span>,<span class="nu0">2</span><span class="br0">&#41;</span> + <span class="kw3">Math</span>.<span class="kw3">pow</span><span class="br0">&#40;</span>point.<span class="me1">y</span> &#8211; oldPoint.<span class="me1">y</span>,<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STROKE += <span class="br0">&#40;</span><span class="br0">&#40;</span>STROKEBASE / dist &gt; MAXSTROKE ? MAXSTROKE : STROKEBASE / dist<span class="br0">&#41;</span> &#8211; STROKE<span class="br0">&#41;</span>/EASE;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p0:Point = oldPoint.<span class="kw3">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Point<span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>a + <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke,<span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>a + <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p1:Point = oldPoint.<span class="kw3">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Point<span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>a &#8211; <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke,<span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>a &#8211; <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p2:Point = point.<span class="kw3">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Point<span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>a + <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * STROKE,<span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>a + <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * STROKE<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p3:Point = point.<span class="kw3">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Point<span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>a &#8211; <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * STROKE,<span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>a &#8211; <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * STROKE<span class="br0">&#41;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> c : Sprite = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _container.<span class="me1">addChild</span><span class="br0">&#40;</span>c<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> leng = _strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span>.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>_count&lt;FADEIN<span class="br0">&#41;</span>c.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span>0xffffff, _count/FADEIN * ALPHA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>_count &gt;leng-FADEOUT<span class="br0">&#41;</span> c.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span>0xffffff,<span class="br0">&#40;</span>leng-_count<span class="br0">&#41;</span>/FADEOUT * ALPHA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> c.<span class="me1">graphics</span>.<span class="kw3">beginFill</span><span class="br0">&#40;</span>0xffffff, ALPHA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//c.graphics.beginFill(0xffffff, ALPHA);</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="kw3">undefined</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>LINESTYLE&gt;<span class="nu0">0</span><span class="br0">&#41;</span> c.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="kw3">LINESTYLE</span>, <span class="nu0">0</span>, LINEALPHA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">moveTo</span><span class="br0">&#40;</span>oldP1.<span class="me1">x</span>, oldP1.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span>p0.<span class="me1">x</span>, p0.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span>p2.<span class="me1">x</span>, p2.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="kw3">undefined</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span>p3.<span class="me1">x</span>, p3.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>LINESTYLE&gt;<span class="nu0">0</span><span class="br0">&#41;</span> c.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="kw3">LINESTYLE</span>, <span class="nu0">0</span>, LINEALPHA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span>p1.<span class="me1">x</span>, p1.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineTo</span><span class="br0">&#40;</span>oldP2.<span class="me1">x</span>, oldP2.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">graphics</span>.<span class="kw3">lineStyle</span><span class="br0">&#40;</span><span class="kw3">undefined</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldStroke = STROKE;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldP1 = point.<span class="kw3">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Point<span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>a + <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke,<span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>a + <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldP2 = point.<span class="kw3">add</span><span class="br0">&#40;</span><span class="kw2">new</span> Point<span class="br0">&#40;</span><span class="kw3">Math</span>.<span class="kw3">cos</span><span class="br0">&#40;</span>a &#8211; <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke,<span class="kw3">Math</span>.<span class="kw3">sin</span><span class="br0">&#40;</span>a &#8211; <span class="kw3">Math</span>.<span class="kw3">PI</span> / <span class="nu0">2</span><span class="br0">&#41;</span> * oldStroke<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldPoint = point;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> draw<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> curPoint:Point = <span class="kw2">new</span> Point<span class="br0">&#40;</span>_strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span>_count<span class="br0">&#93;</span>.<span class="me1">x</span> * <span class="kw3">HEIGHT</span>,_strokes<span class="br0">&#91;</span>_stroke<span class="br0">&#93;</span><span class="br0">&#91;</span>_count<span class="br0">&#93;</span>.<span class="me1">y</span> * <span class="kw3">HEIGHT</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; drawOne<span class="br0">&#40;</span>curPoint<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/08/11/graffiti-analysis-flash-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grafitti Analysis : WIP</title>
		<link>http://www.turboconnard.com/b/2010/08/05/grafitti-analysis-wip/</link>
		<comments>http://www.turboconnard.com/b/2010/08/05/grafitti-analysis-wip/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 16:44:16 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Jeux indépendants]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[le site]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[softs]]></category>
		<category><![CDATA[agd]]></category>
		<category><![CDATA[gml]]></category>
		<category><![CDATA[graffiti]]></category>
		<category><![CDATA[graffiti analysis]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[turboconnard]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=249</guid>
		<description><![CDATA[J&#8217;espère que vous connaissez déjà graffiti Analysis (un super projet d&#8217;Evan Roth) qui tente de mémoriser et d&#8217;archiver des données de &#8220;tag&#8221;. La base de données est ouverte et on peut donc charger les tags au format &#8220;GML&#8221; (graffiti mark up language). Je vais essayer de terminer une appli de lecture de tags et écriture [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;espère que vous connaissez déjà <a href="http://www.graffitianalysis.com">graffiti Analysis</a> (un super projet d&#8217;Evan Roth) qui tente de mémoriser et d&#8217;archiver des données de &#8220;tag&#8221;. La base de données est ouverte et on peut donc charger les tags au format &#8220;GML&#8221; (graffiti mark up language). Je vais essayer de terminer une appli de lecture de tags et écriture de tag. J&#8217;ai déjà réussi à lire de tags, la j&#8217;en crée. Il ne me reste plus qu&#8217;a tout mettre ensemble pour faire une appli finie. Je balancerai bien sûr toutes les sources.</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13829273&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=13829273&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/08/05/grafitti-analysis-wip/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Turboconnard AGD : Exemple 2 Connard jump</title>
		<link>http://www.turboconnard.com/b/2010/07/21/turboconnard-agd-exemple-2-connard-jump/</link>
		<comments>http://www.turboconnard.com/b/2010/07/21/turboconnard-agd-exemple-2-connard-jump/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 13:16:53 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Jeux indépendants]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[jump]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=244</guid>
		<description><![CDATA[Je continue peinard les tests du framework. Hier j&#8217;ai essayé de faire &#8220;Connard Jump&#8221;. Un peu plus de 100 lignes de code pour un gameplay bien connu des détenteurs de webphones (comme ils disent) : J&#8217;ai ajouté un schtroumpfeur de textures qui charge tout les ressources de R.drawable en texture opengl. Du coup on a [...]]]></description>
			<content:encoded><![CDATA[<p>Je continue peinard les tests du framework. Hier j&#8217;ai essayé de faire &#8220;Connard Jump&#8221;. Un peu plus de 100 lignes de code pour un gameplay bien connu des détenteurs de webphones (comme ils disent) :</p>
<p>J&#8217;ai ajouté un schtroumpfeur de textures qui charge tout les ressources de R.drawable en texture opengl. Du coup on a plus à se soucier de charger les textures on peut directement faire :</p>
<div class="dean_ch" style="white-space: nowrap;">Bitmap b = <span class="kw2">new</span> Bitmap<span class="br0">&#40;</span>R.<span class="me1">drawable</span>.<span class="me1">machin</span><span class="br0">&#41;</span>;<br />
&nbsp;stage.<span class="me1">addChild</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span>;</div>
<p>Voila donc la source de Connard Jump :</p>
<p> </p>
<p> </p>
<div class="dean_ch" style="white-space: nowrap;"><span class="kw2">package</span> com.<span class="me1">hello</span>;</p>
<p><span class="co2">import java.util.Vector;</span></p>
<p><span class="co2">import com.turboconnard.core.Agd;</span><br />
<span class="co2">import com.turboconnard.display.Bitmap;</span><br />
<span class="co2">import com.turboconnard.display.Sprite;</span><br />
<span class="co2">import com.turboconnard.events.AccelerometerEvent;</span><br />
<span class="co2">import com.turboconnard.events.Event;</span><br />
<span class="co2">import com.turboconnard.geom.Point3D;</span><br />
<span class="co2">import com.turboconnard.hardware.Accelerometer;</span></p>
<p><span class="kw2">public</span> <span class="kw2">class</span> HelloWorld2D <span class="kw2">extends</span> Agd <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw4">float</span> MINISPACE = <span class="nu0">40</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw4">double</span> SPACE = <span class="nu0">50</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> Bitmap hero;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> vitY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> vitX = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> cibleX = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> Sprite decors;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> Vector&lt;Sprite&gt; pfCheck;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> _y;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> _lastY;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> HelloWorld2D<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bitmap b = <span class="kw2">new</span> Bitmap<span class="br0">&#40;</span>R.<span class="me1">drawable</span>.<span class="me1">background</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.<span class="me1">x</span> = stage.<span class="me1">width</span> / <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b.<span class="me1">y</span> = stage.<span class="me1">height</span> / <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vitY = <span class="nu0">-10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero = <span class="kw2">new</span> Bitmap<span class="br0">&#40;</span>R.<span class="me1">drawable</span>.<span class="me1">test</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">x</span> = stage.<span class="me1">width</span> / <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">y</span> = stage.<span class="me1">height</span> &#8211; <span class="nu0">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decors = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decors.<span class="me1">z</span> = <span class="nu0">0</span>;<span class="co1">//1;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">z</span> = &nbsp;<span class="nu0">0</span>;<span class="co1">//-1;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stage.<span class="me1">addChild</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stage.<span class="me1">addChild</span><span class="br0">&#40;</span>decors<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stage.<span class="me1">addChild</span><span class="br0">&#40;</span>hero<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Accelerometer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>AccelerometerEvent.<span class="me1">ON_CHANGE</span>, <span class="kw2">this</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generateLevel<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* create FirstPlatforms<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> generateLevel<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _y = stage.<span class="me1">height</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>_y &gt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _y = _y &#8211; <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * SPACE<span class="br0">&#41;</span> &#8211; MINISPACE;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addPlateform<span class="br0">&#40;</span>_y<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> addPlateform<span class="br0">&#40;</span><span class="kw4">float</span> pY<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _lastY = pY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bitmap pf = <span class="kw2">new</span> Bitmap<span class="br0">&#40;</span>R.<span class="me1">drawable</span>.<span class="me1">plate</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pf.<span class="me1">y</span> = pY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pf.<span class="me1">x</span> = <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * stage.<span class="me1">width</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decors.<span class="me1">addChild</span><span class="br0">&#40;</span>pf<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> update<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//gravity</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vitY += <span class="nu0">0.3</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//acceleration x</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cibleX += <span class="br0">&#40;</span>vitX &#8211; cibleX<span class="br0">&#41;</span> / <span class="nu0">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if we go up</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>vitY &lt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checkAddPF<span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if we go down</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checkPF<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; testColision<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//move x</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">x</span> += cibleX;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//bounce against walls</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hero.<span class="me1">x</span> &gt; stage.<span class="me1">width</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">x</span> = stage.<span class="me1">width</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cibleX *= <span class="nu0">-1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>hero.<span class="me1">x</span> &lt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">x</span> = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cibleX *= <span class="nu0">-1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//loose !</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hero.<span class="me1">y</span> &gt; stage.<span class="me1">height</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vitY *= <span class="nu0">-0.5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.y = stage.height;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> checkAddPF<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if hero.y &lt;250 move level</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>hero.<span class="me1">y</span> &lt; <span class="nu0">250</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _y += vitY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//addPlateform if offset is &gt; MINISPACE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span> <span class="br0">&#40;</span>_lastY &#8211; _y <span class="br0">&#41;</span>&gt; MINISPACE <span class="br0">&#41;</span> addPlateform<span class="br0">&#40;</span>_y &#8211; &nbsp;<span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span> * SPACE<span class="br0">&#41;</span> <span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decors.<span class="me1">y</span> -= vitY;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//if hero.y &gt;250 move hero</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">y</span> += vitY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> checkPF<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pfCheck = <span class="kw2">new</span> Vector&lt;Sprite&gt;<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Sprite b : decors.<span class="me1">getDisplayList</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>b.<span class="me1">y</span> + decors.<span class="me1">y</span><span class="br0">&#41;</span> &gt; hero.<span class="me1">y</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pfCheck.<span class="me1">add</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>b.<span class="me1">y</span> + decors.<span class="me1">y</span> &gt; stage.<span class="me1">height</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decors.<span class="me1">removeChild</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">y</span> += vitY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">void</span> testColision<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span>Sprite b : pfCheck<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>b.<span class="me1">x</span> &#8211; <span class="nu0">50</span><span class="br0">&#41;</span> &lt; hero.<span class="me1">x</span> &amp;&amp; <span class="br0">&#40;</span>b.<span class="me1">x</span> + <span class="nu0">50</span><span class="br0">&#41;</span> &gt; hero.<span class="me1">x</span> &amp;&amp; <span class="br0">&#40;</span>hero.<span class="me1">y</span>+hero.<span class="me1">height</span>/<span class="nu0">2</span><span class="br0">&#41;</span> &gt; <span class="br0">&#40;</span>b.<span class="me1">y</span> + decors.<span class="me1">y</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hero.<span class="me1">y</span> = <span class="br0">&#40;</span>b.<span class="me1">y</span> + decors.<span class="me1">y</span> -hero.<span class="me1">height</span>/<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vitY = <span class="nu0">-10</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span>;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> event<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AEvent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Event</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>e.<span class="me1">name</span> == AccelerometerEvent.<span class="me1">ON_CHANGE</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Point3D p = <span class="br0">&#40;</span>Point3D<span class="br0">&#41;</span> e.<span class="me1">param</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vitX = p.<span class="me1">x</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p>hop la :</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=13513729&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=13513729&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/07/21/turboconnard-agd-exemple-2-connard-jump/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Turboconnard AGD : Exemple</title>
		<link>http://www.turboconnard.com/b/2010/07/15/turboconnard-agd-exemple/</link>
		<comments>http://www.turboconnard.com/b/2010/07/15/turboconnard-agd-exemple/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 18:11:22 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[agd]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=238</guid>
		<description><![CDATA[Youpi, ça commence à ressembler à quelque chose. Quand on touche l&#8217;écran un cube est placé dans l&#8217;espace à des positions aléatoires, le téléphone vibre quand vous le touchez (hmmm, hot, sex&#8230;).Pencher le téléphone influe sur la rotation des cubes. Faut que je sorte les textures (actuellement en dur dans le Cube) et je file [...]]]></description>
			<content:encoded><![CDATA[<p>Youpi, ça commence à ressembler à quelque chose.<br /> Quand on touche l&#8217;écran un cube est placé dans l&#8217;espace à des positions aléatoires, le téléphone vibre quand vous le touchez (hmmm, hot, sex&#8230;).<br />Pencher le téléphone influe sur la rotation des cubes. Faut que je sorte les textures (actuellement en dur dans le Cube) et je file le sources.</p>
<p>Exemple de code simple :</p>
<div class="dean_ch" style="white-space: nowrap;"><span class="kw2">package</span> com.<span class="me1">helloworldagd</span>;</p>
<p><span class="co2">import android.view.MotionEvent;</span></p>
<p><span class="co2">import com.turboconnard.core.Agd;</span><br />
<span class="co2">import com.turboconnard.display.Cube;</span><br />
<span class="co2">import com.turboconnard.display.Sprite;</span><br />
<span class="co2">import com.turboconnard.events.AccelerometerEvent;</span><br />
<span class="co2">import com.turboconnard.events.Event;</span><br />
<span class="co2">import com.turboconnard.geom.Point3D;</span><br />
<span class="co2">import com.turboconnard.hardware.Accelerometer;</span><br />
<span class="co2">import com.turboconnard.hardware.Vibrato;</span></p>
<p><span class="kw2">public</span> <span class="kw2">class</span> HelloWorldAGD <span class="kw2">extends</span> Agd <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> Sprite s;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> tx;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw4">float</span> ty;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> HelloWorldAGD<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Accelerometer.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>AccelerometerEvent.<span class="me1">ON_CHANGE</span>, <span class="kw2">this</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tx = ty = <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = <span class="kw2">new</span> Sprite<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">x</span> = stage.<span class="me1">width</span> / <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">y</span> = stage.<span class="me1">height</span> / <span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stage.<span class="me1">addChild</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> addCube<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cube c = <span class="kw2">new</span> Cube<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span>*<span class="nu0">80</span> + <span class="nu0">20</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">x</span> = <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span>*stage.<span class="me1">width</span> &#8211; <span class="br0">&#40;</span>stage.<span class="me1">width</span>/<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">y</span> = <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span>*stage.<span class="me1">height</span>-<span class="br0">&#40;</span>stage.<span class="me1">height</span>/<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.<span class="me1">z</span> = <span class="br0">&#40;</span><span class="kw4">float</span><span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">random</span><span class="br0">&#40;</span><span class="br0">&#41;</span>*stage.<span class="me1">height</span>-<span class="br0">&#40;</span>stage.<span class="me1">height</span>/<span class="nu0">2</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">addChild</span><span class="br0">&#40;</span>c<span class="br0">&#41;</span>;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Vibrato.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">vibrate</span><span class="br0">&#40;</span><span class="nu0">30</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">boolean</span> onTouchEvent<span class="br0">&#40;</span>MotionEvent e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>e.<span class="me1">getAction</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == MotionEvent.<span class="me1">ACTION_DOWN</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addCube<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> update<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw4">void</span> event<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AEvent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Event</span></a> e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>e.<span class="me1">name</span> == AccelerometerEvent.<span class="me1">ON_CHANGE</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Point3D p = <span class="br0">&#40;</span>Point3D<span class="br0">&#41;</span> e.<span class="me1">param</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tx += <span class="br0">&#40;</span>p.<span class="me1">x</span> &#8211; tx<span class="br0">&#41;</span>/<span class="nu0">5</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ty += <span class="br0">&#40;</span>p.<span class="me1">y</span> &#8211; ty<span class="br0">&#41;</span>/<span class="nu0">5</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">rotationX</span> += tx;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">rotationY</span> += ty;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
&nbsp;</div>
<p> </p>
<p>Et voilà ça fait ça :</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=13367696&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=13367696&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/07/15/turboconnard-agd-exemple/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AGD &#8211; En avant pour opengl</title>
		<link>http://www.turboconnard.com/b/2010/07/09/agd-en-avant-pour-opengl/</link>
		<comments>http://www.turboconnard.com/b/2010/07/09/agd-en-avant-pour-opengl/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 18:31:51 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Jeux indépendants]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[agd]]></category>
		<category><![CDATA[glFrustum]]></category>
		<category><![CDATA[glFrustumf]]></category>
		<category><![CDATA[texture 2D]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=231</guid>
		<description><![CDATA[Après avoir fait mumuse  avec mon framework turboconnard agd, j&#8217;ai quand même remarqué que ça ramait&#8230; le développement &#8220;Canvas mode&#8221; pour le jeu c&#8217;est vraiment trop lent. Je suis donc passé en mode opengl pour dessiner mes jolis sprites. Le problème avec opengl c&#8217;est que c&#8217;est hyper complexe. Il faut environ douze jours pour comprendre [...]]]></description>
			<content:encoded><![CDATA[<p>Après avoir fait mumuse  avec mon <a href="http://code.google.com/p/turboconnard-agd/" target="_blank">framework turboconnard agd</a>, j&#8217;ai quand même remarqué que ça ramait&#8230; le développement &#8220;Canvas mode&#8221; pour le jeu c&#8217;est vraiment trop lent.</p>
<p>Je suis donc passé en mode opengl pour dessiner mes jolis sprites. Le problème avec opengl c&#8217;est que c&#8217;est hyper complexe. Il faut environ douze jours pour comprendre comment tracer un triangle puis deux fois plus de temps pour y appliquer une texture. Je cherche à faire des choses simple&#8230; mais c&#8217;est déjà l&#8217;enfer pour trouver un tutoriel sur &#8220;comment appliquer une texture sur un carré&#8221; alors lorsqu&#8217;il s&#8217;agit de trouver &#8220;comment faire apparaitre une texture à 100% dans un univers en 3D&#8221; c&#8217;est la mort&#8230;</p>
<p><em>Le but recherché :</em></p>
<p>Dessiner des trucs en deux dimensions dans un univers en trois dimensions. Typiquement, ça permet de développer peinard en 2D sans se prendre la tête et de temps en temps claquer un effet 3D pour le &#8220;Wow effect&#8221;.</p>
<p><em>Une solution :</em></p>
<p>En opengl il y a un &#8220;mode&#8221; qui permet d&#8217;aplatir toutes les perspectives et d&#8217;ainsi travailler en deux dimensions (glOrthof pour android) et c&#8217;est pratique. Seulement si vous voulez une couche de 3D en plus ben vous êtes niqué.</p>
<p>On utilise alors le mode <strong>glFrustumf</strong>! (à tes souhaits)</p>
<p>glFrustumf c&#8217;est la méthode qui permet de définir la perspective de votre scène 3D. Bien comprendre cette méthode vous facilitera la vie pour vous représenter les éléments en 3D calqués sur votre écran 2d.</p>
<p>Cette méthode attend six paramètres : left, right,  bottom,top, near, far. Les quatre premiers définissent le rapport de la fenêtre de vue de la scène. Cette fonction permet de définir le fenêtre de projection de l&#8217;univers 3D sur votre écran.</p>
<p>explications :</p>
<p>votre écran à un rapport largeur / hauteur (16/9, 4/3 etc&#8230;)  avec un glFrustumf(-1,1,-1,1,near,far); vous aurez une projection de ce type :</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/07/glFrustrumf.png"><img class="alignnone size-medium wp-image-232" title="glFrustrumf" src="http://www.turboconnard.com/b/wp-content/uploads/2010/07/glFrustrumf-300x81.png" alt="" width="300" height="81" /></a></p>
<p>Il faut donc &#8220;calculer&#8221; une projection correcte de type :  glFrustumf(-(width/height),(width/height),-1,1,near,far);<br />
Pour une unité de hauteur il ya (width/height) de largeur :  Pour un 16/9 ça fait bien, 1 de hauteur pour 1.7778 de largeur.</p>
<p>Ok pour le rapport, fastoche. Après ça, ce que je voulais c&#8217;était d&#8217;avoir une texture à 100% lorsqu&#8217;elle est en z = 0.<br />
Il faut d&#8217;abord comprendre que par défaut le &#8220;point de vue&#8221; de la scène est en 0,0,0 dans le repère. Si vous arrivez à afficher un quelconque objet, pour le voir vous devez soit reculer la &#8220;caméra&#8221;, soit éloigner l&#8217;objet. Mais de combien dois-je reculer la caméra pour que mon objet occupe bien sa &#8220;taille réelle&#8221; ?</p>
<p>La précédente fenêtre qu&#8217;on a déterminée se positionne  en fait au paramètre &#8220;near&#8221; sur l&#8217;axe z :</p>
<p>exemple ici : glFrustumf(-(width/height),(width/height),-1,1,<strong>7</strong>,20);</p>
<p><a href="http://www.turboconnard.com/b/wp-content/uploads/2010/07/glFrustrumf21.png"><img class="alignnone size-full wp-image-234" title="glFrustrumf2" src="http://www.turboconnard.com/b/wp-content/uploads/2010/07/glFrustrumf21.png" alt="" width="550" height="200" /></a></p>
<p>Tout objet en dehors de la zone &#8220;couleur jambon&#8221; sur l&#8217;axe Z n&#8217;apparaitra pas. Maintenant, il faut réussir à placer l&#8217;objet bleu à la bonne position sur l&#8217;axe Z pour qu&#8217;il s&#8217;imprime à 100% sur l&#8217;écran. Un peu de trigonométrie suffit :</p>
<p>L&#8217;objet est un plan d&#8217;une unité (1&#215;1), une texture de 64&#215;64 est mappée dessus.</p>
<p>mon écran fait &#8220;height&#8221; en hauteur pour &#8220;1&#8243; unité (rappelez vous le glFrustumf à 1 pour la hauteur).<br />
le rapport de la texture est (64 / height ) pour une unité.</p>
<p>On calcule l&#8217;angle de l&#8217;origine vers l&#8217;objet  :<br />
ang = Math.atan2( ( 64 / height)) , near);<br />
puis avec l&#8217;angle on calcul le z.</p>
<p>z =  1/Math.tan(ang);</p>
<p>Du coup si on recule la camera de -z, la texture fera pile poil 64&#215;64 sur votre écran.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/07/09/agd-en-avant-pour-opengl/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Flying Saucer Android release</title>
		<link>http://www.turboconnard.com/b/2010/07/04/flying-saucer-android-release/</link>
		<comments>http://www.turboconnard.com/b/2010/07/04/flying-saucer-android-release/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 18:39:58 +0000</pubDate>
		<dc:creator>Turbo Connard</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Jeux indépendants]]></category>
		<category><![CDATA[jeux vidéo]]></category>
		<category><![CDATA[android game]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[flying saucer]]></category>
		<category><![CDATA[game]]></category>

		<guid isPermaLink="false">http://www.turboconnard.com/b/?p=228</guid>
		<description><![CDATA[Je viens de poster dans les downloads de agd une première version de &#8220;flying saucer&#8221; : le super mini jeu qui se termine en 20 secondes. J&#8217;ai développé ce prototype pour être confronté à de vrais problèmes lors de sa réalisation et ça a porté ces fruits, j&#8217;ai dû ajouter plein de trucs relous. Je [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens de poster dans les <a href="http://code.google.com/p/turboconnard-agd/downloads/detail?name=flyingsaucer.zip&amp;can=2&amp;q=#makechanges" target="_blank">downloads de agd</a> une première version de &#8220;flying saucer&#8221; : le super mini jeu qui se termine en 20 secondes.</p>
<p>J&#8217;ai développé ce prototype pour être confronté à de vrais problèmes lors de sa réalisation et ça a porté ces fruits, j&#8217;ai dû ajouter plein de trucs relous. Je pense que ce jeu en restera la. Certes, douze ennemis à tuer c&#8217;est pas forcément le jeu le plus fun de la terre mais il permet d&#8217;appréhender des logiques simple de développement. C&#8217;est pourquoi bien sûr, je fournis les sources.</p>
<p>Voilà vous pouvez essayer de compiler ce jeu et de vous amuser pendant au moins une minute !</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.turboconnard.com/b/2010/07/04/flying-saucer-android-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

