<?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>electroduendes.com &#187; Flash</title>
	<atom:link href="http://www.electroduendes.com/blog/category/1flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.electroduendes.com/blog</link>
	<description>bitácora de un desarrollador interactivo</description>
	<lastBuildDate>Sun, 27 Jun 2010 21:07:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Material charla Realidad Aumentada Subflash</title>
		<link>http://www.electroduendes.com/blog/material-charla-realidad-aumentada-subflash/</link>
		<comments>http://www.electroduendes.com/blog/material-charla-realidad-aumentada-subflash/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 19:14:34 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Eventos, charlas]]></category>
		<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[realidad aumentada]]></category>
		<category><![CDATA[subflash]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=295</guid>
		<description><![CDATA[Por aquí os dejo el material de la charla sobre Realidad Aumentada que ofrecí en los talleres Subflash 2009. Os dejo el código fuente que usamos como ejemplo de implementación con el que podréis crear vuestra propia aplicación de Realidad Aumentada así como la presentación de la charla, y las clases que nos sirvieron como [...]]]></description>
			<content:encoded><![CDATA[<p>Por aquí os dejo el material de la charla sobre Realidad Aumentada que ofrecí en los <a href="http://www.subflash.com/">talleres Subflash 2009</a>. Os dejo el código fuente que usamos como ejemplo de implementación con el que podréis crear vuestra propia aplicación de Realidad Aumentada así como la presentación de la charla, y las clases que nos sirvieron como introducción a Papervision3D.</p>
<p><a href="http://www.electroduendes.com/blog/wp-content/uploads/2009/11/PonenciaSubflash.rar">Papervision3D y Realidad Aumentada (rar)</a></p>
<p><object width="480" height="362"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=6929357&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=6929357&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="362"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/material-charla-realidad-aumentada-subflash/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AS3: Composición, paso de parámetros por valor y por referencia</title>
		<link>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/</link>
		<comments>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 16:53:10 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[Tutos]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=269</guid>
		<description><![CDATA[En este post hablaré sobre algo muy básico aunque imprescindible sobre teoría de clases y composición aplicados a as3. Con él podemos entender la manera en que es tratada la composición de clases (una clase contiene otra clase como atributo) y los conceptos de paso de variables a métodos por valor y por referencia.
El paso [...]]]></description>
			<content:encoded><![CDATA[<p>En este post hablaré sobre algo muy básico aunque imprescindible sobre teoría de clases y composición aplicados a as3. Con él podemos entender la manera en que es tratada la composición de clases (una clase contiene otra clase como atributo) y los conceptos de paso de variables a métodos por <strong>valor </strong>y por <strong>referencia</strong>.</p>
<p><strong>El paso de parámetros por valor</strong>, se utiliza en programación para realizar una copia del valor del objeto cuando es pasado a través de la invocación de un método. Es decir, al llamar a un método de una clase que requiere un objeto, realizo una copia de dicho objeto. Si dentro de la clase, modifico ese objeto, los cambios no son propagados fuera de la clase.</p>
<p><strong>El paso de parámetros por referencia</strong>, pasa &#8220;un puntero del objeto&#8221;, es decir, de alguna manera estamos pasando el objeto, y si dicho objeto es modificado dentro de la propia clase, sus cambios serán propagados fuera de la misma.</p>
<p>Hay lenguajes que permiten definir el método de paso de variables (referencia o valor), como es el caso de C++. En Actionscript, de momento no podemos pasar por valor de manera nativa, aunque nuestro método siempre puede hacer una copia internamente del argumento recibido para no modificar el original. En Actionscript 3, el paso de parámetros, siempre se realiza de la misma manera: </p>
<ul>
<li>Las instancias de clases son pasadas por referencia</li>
<li>Los tipos primitivos se pasan por valor</li>
</ul>
<p>Si estás aprendiendo Actionscript 3 y has llegado hasta aquí, te recomiendo que analices a fondo este código, puesto que puede resultarte muy esclarecedor para entender este concepto tan básico como fundamental sobre la orientación a objetos.</p>
<p>Primero, definimos dos Clases, <em>ClaseA </em>y <em>ClaseB</em>. <em>ClaseB </em>está compuesta por un atributo, <em>atributoB </em>que es de tipo Number.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ClaseB
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> atributoB<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span>;	
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ClaseB<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p><em>ClaseA </em>tiene otro atributo de tipo <em>ClaseB</em>. Estamos hablando por tanto, de una relación de composición entre las dos clases.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ClaseA
	<span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #6699cc; font-weight: bold;">var</span> atributoA<span style="color: #000000; font-weight: bold;">:</span>ClaseB;
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ClaseA<span style="color: #000000;">&#40;</span>atributo<span style="color: #000000; font-weight: bold;">:</span>ClaseB<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span>
			atributoA = atributo;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Ahora nuestra clase principal. Nótese cómo <em>atributoB </em>devuelve el mismo valor independientemente del lugar desde donde es modificado (es el mismo objeto) y cómo esto no sucede con tipos primitivos. En este caso paso un parámetro al constructor  de la clase <em>ClaseA </em> (nuestro objeto de tipo ClaseB), para posteriormente modificarlo desde diferentes ámbitos y trazar los resultados.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
&nbsp;
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> ReferenciaValorTest extends <span style="color: #004993;">Sprite</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #3f5fbf;">/**
		 * @autor Alejandro Sánchez
		 * http://www.electroduendes.com/blog/
		 * */</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> ReferenciaValorTest<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">b</span><span style="color: #000000; font-weight: bold;">:</span>ClaseB = <span style="color: #0033ff; font-weight: bold;">new</span> ClaseB<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">b</span>.atributoB = <span style="color: #000000; font-weight:bold;">10</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> a<span style="color: #000000; font-weight: bold;">:</span>ClaseA = <span style="color: #0033ff; font-weight: bold;">new</span> ClaseA<span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
&nbsp;
			a.atributoA.atributoB = <span style="color: #000000; font-weight:bold;">5</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 5</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 5</span>
&nbsp;
			<span style="color: #004993;">b</span>.atributoB = <span style="color: #000000; font-weight:bold;">10</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span> <span style="color: #009900;">// OUTPUT: 10</span>
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">c</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = <span style="color: #000000; font-weight:bold;">20</span>;
			a.atributoA.atributoB = <span style="color: #004993;">c</span>			
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">c</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT 20</span>
&nbsp;
			<span style="color: #004993;">c</span> = <span style="color: #000000; font-weight:bold;">30</span>;
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>a.atributoA.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">b</span>.atributoB<span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT: 20</span>
			<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">c</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// OUTPUT 30</span>
&nbsp;
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/as3-composicion-paso-de-parametros-por-valor-y-por-referencia/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Triángulo de Penrose</title>
		<link>http://www.electroduendes.com/blog/triangulo-de-penrose/</link>
		<comments>http://www.electroduendes.com/blog/triangulo-de-penrose/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 17:48:45 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[Escher]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=237</guid>
		<description><![CDATA[El triángulo de Penrose, es un objeto imposible que fue creado en 1934 por el artista sueco Oscar Reutersvärd. Posteriormente fue redescubierto de forma independiente por el físico Roger Penrose, en la década de 1950, quien lo hizo popular, describiéndolo como &#8220;imposibilidad en su más pura forma&#8221;.
Fuente: Wikipedia


Pulsa en la imagen para lanzar el experimento
Triángulo [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>El triángulo de Penrose, es un objeto imposible que fue creado en 1934 por el artista sueco Oscar Reutersvärd. Posteriormente fue redescubierto de forma independiente por el físico Roger Penrose, en la década de 1950, quien lo hizo popular, describiéndolo como &#8220;imposibilidad en su más pura forma&#8221;.</p></blockquote>
<p><em>Fuente: <a href="http://es.wikipedia.org/wiki/Tri%C3%A1ngulo_de_Penrose">Wikipedia</a></em></p>
<div align="center">
<a href="http://www.electroduendes.com/swf/penrose/PenroseTriangle.swf" rel="shadowbox;width=640;height=480;"><img src="http://www.electroduendes.com/blog/wp-content/uploads/2009/10/penrose.jpg" alt="penrose" title="penrose" width="324" height="276" class="aligncenter size-full wp-image-283" /></a><br />
Pulsa en la imagen para lanzar el experimento</div>
<p><a href="http://www.electroduendes.com/swf/penrose/PenroseTriangle.swf" rel="shadowbox[post-237]">Triángulo de Penrose</a></p>
<p>El juguete visual está escrito en Actionscript 3 y Papervision3D. El autor del modelo SketchUp es <a href="http://sketchup.google.com/3dwarehouse/details?mid=5676b5d661012aadbe7144c5b7b0fcb6">Martin Triebel</a>.  Con el artefacto, intento abrir una puerta racional al triángulo de imposibilidad, a través de un juego de interacción, en la idea de que no existe una realidad absoluta, sino meras interpretaciones, ahí queda eso. </p>
<p>Resulta generacional la atención que la gente tiene sobre esta figura, y su repercusión en camisestas, fieltros, esculturas de rotondas y portadas de libros. Desde icono pop hasta figura del op art,  este símbolo seguirá sorprendiendo a generaciones y perpetuándose como un ejemplo del escepticismo creativo radical.<br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/triangulo-de-penrose/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>removeChild y  ArgumentError: Error #2025: no más dolores de cabeza</title>
		<link>http://www.electroduendes.com/blog/removechild-argumenterror-2025/</link>
		<comments>http://www.electroduendes.com/blog/removechild-argumenterror-2025/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 12:40:08 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[removeChild]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=107</guid>
		<description><![CDATA[Como muchos de vosotros, estoy continuamente utilizando los métodos addChild y removeChild de DisplayObjectContainer.
Gracias a Dios con la llegada de as3 llevo un tiempo sin sufrir los tediososos attachMovie y createEmptyMovieClip, que resultaban a veces confusos.
El nuevo árbol de herencia de los objetos de visualización es ahora realmente orientado a objetos y muy completo, y [...]]]></description>
			<content:encoded><![CDATA[<p>Como muchos de vosotros, estoy continuamente utilizando los métodos addChild y removeChild de DisplayObjectContainer.</p>
<p>Gracias a Dios con la llegada de as3 llevo un tiempo sin sufrir los tediososos attachMovie y createEmptyMovieClip, que resultaban a veces confusos.</p>
<p>El nuevo árbol de herencia de los objetos de visualización es ahora realmente orientado a objetos y muy completo, y es algo que agradecí al migar de as2 a as3.</p>
<p>Con el método addChild, no tengo pegas, pues me parece necesario identificar sobre qué padre vamos a incluir el DisplayObject que estamos creando.</p>
<p>Pero para el método removeChild, cuando estoy eliminando un Sprite, pues realmente no interesa saber cual es el padre, lo que realmente interesa, es eliminarlo y punto.</p>
<p>De hecho, yo tiendo a hacer lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">miMc.<span style="color: #004993;">parent</span>.<span style="color: #004993;">removeChild</span><span style="color: #000000;">&#40;</span>miMc<span style="color: #000000;">&#41;</span></pre></div></div>

<p>Se me ocurrió hace poco que una clase para eliminar Sprites sería útil, algo como un Terminator de DisplayObjects</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">DisplayObjectTerminator.remove<span style="color: #000000;">&#40;</span>miMc<span style="color: #000000;">&#41;</span></pre></div></div>

<p>Esta clase, encapsularía este comportamiento y además evitaría problemas tales como que el objeto a elminar exista, que no sea nulo… etc etc.</p>
<p>Y antes de ponerme a escribir, googleé un poco y encontré una clase bastante útil para estos menesteres que comparto con vosotros:</p>
<p>http://www.actionscript.org/forums/showthread.php3?t=178317</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #3f5fbf;">/**
 * written by evride //
 * Actionscript.org forums user //
 * found a problem? tell me there //
 */</span>
<span style="color: #9900cc; font-weight: bold;">package</span> com.evride<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> RemoveObject <span style="color: #000000;">&#123;</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> static  <span style="color: #339966; font-weight: bold;">function</span> remove<span style="color: #000000;">&#40;</span>obj<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>obj<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>obj <span style="color: #0033ff; font-weight: bold;">is</span> <span style="color: #004993;">DisplayObject</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
					<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>obj.<span style="color: #004993;">parent</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
						<span style="color: #0033ff; font-weight: bold;">try</span> <span style="color: #000000;">&#123;</span>
							obj.<span style="color: #004993;">parent</span>.<span style="color: #004993;">removeChild</span><span style="color: #000000;">&#40;</span>obj<span style="color: #000000;">&#41;</span>;
						<span style="color: #000000;">&#125;</span> <span style="color: #0033ff; font-weight: bold;">catch</span> <span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Error</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
							<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Couldn't remove the object. It wasn't a child of a DisplayObject.&quot;</span><span style="color: #000000;">&#41;</span>;
						<span style="color: #000000;">&#125;</span>
					<span style="color: #000000;">&#125;</span> <span style="color: #0033ff; font-weight: bold;">else</span> <span style="color: #000000;">&#123;</span>
						<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Couldn't remove object. Parent property is null.&quot;</span><span style="color: #000000;">&#41;</span>;
					<span style="color: #000000;">&#125;</span>
				<span style="color: #000000;">&#125;</span> <span style="color: #0033ff; font-weight: bold;">else</span> <span style="color: #000000;">&#123;</span>
					<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Couldn't remove object. It is not a DisplayObject.&quot;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #000000;">&#125;</span>
			<span style="color: #000000;">&#125;</span> <span style="color: #0033ff; font-weight: bold;">else</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Couldn't remove the object. It was null or doesn't exist.&quot;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #000000;">&#125;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/removechild-argumenterror-2025/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tendremos vídeo para rato</title>
		<link>http://www.electroduendes.com/blog/tendremos-video-para-rato-2/</link>
		<comments>http://www.electroduendes.com/blog/tendremos-video-para-rato-2/#comments</comments>
		<pubDate>Sun, 10 May 2009 02:58:33 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Enlaces]]></category>
		<category><![CDATA[Librerías, recursos]]></category>
		<category><![CDATA[Metodología, arquitectura]]></category>
		<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[librería]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[pyro]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=103</guid>
		<description><![CDATA[


Los desarrolladores Flash llevamos desde el 2002, la asidua tarea de trabajar con estos formatos. Por eso, en la parte cliente, se hace necesario el uso de un conjunto de clases que manejen esta labor, y que nos permita tener vídeo para rato sin morir en el intento cada vez que hay que aplicarlo a [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<p style="text-align: center;"><img class="aligncenter" src="http://www.electroduendes.com/blog/wp-content/video.jpg" alt="" /></p>
<p>Los desarrolladores Flash llevamos desde el 2002, la asidua tarea de trabajar con estos formatos. Por eso, en la parte cliente, se hace necesario el uso de un conjunto de clases que manejen esta labor, y que nos permita tener vídeo para rato sin morir en el intento cada vez que hay que aplicarlo a un proyecto.</p>
<p>Gracias a todos, ( y espero participar en ello pronto) cada día tenemos más proyectos hacia este área en la comunidad de desarrollo libre o de pago, y ya existen soluciones para la creación de players. Incluso existen players de licencia libre que cubren varias funcionalidades, de hecho hay un sano mercado en torno a los players, copado actualmente por <a href="http://www.longtailvideo.com/players/jw-flv-player/">JW FLV Media Player</a>, un player bastante completo.</p>
<p>Pero si estamos empeñados en añadir las clases a nuestro repositorio reutilizables para todos los proyectos de tu empresa,  la tarea de crear un player crece en dos sentidos: el primero crear los componentes de interacción, que si bien algunos ya puedes tenerlos creados o reusarlos, y segundo, conocer las diferentes particularidades de la api de gestión de vídeo en flash para aplicar la funcionalidad a los controles visuales, que dependerá del tipo de vídeo y el total de los que vamos a meter.</p>
<p>En realidad, se trata de un trabajo de semanas partiendo desde cero. Son por sí mismo un subproyecto, o al menos un buen sprint en un desarrollo. A nivel de interacción, los players se deben tratar con cariño, puesto que demandan funcionalidades avanzadas de los usuarios acostumbrados a players de gran consumo, como youtube. Se debe trabajar bien con el seeker para dotarle del mayor número de funcionalidades posible, puesto que cuanto más bueno o largo es el vídeo, más vamos a utilizar este componente.</p>
<p>Para empezar, no está mal echar un vistazo a <a href="http://www.blogtechguy.com/video_ebook/online_video_comparison.html">otros players</a> famosos en Internet.  Debemos poner interés en añadir funcionalidades tales como añadir alias de teclado como la pausa para el espacio. También es interesante el retroceso del vídeo por click de la barra,  o avance en caso de que dispongamos de servidor rtmp o tecnología que lo permita. La visualización del vídeo mientras se arrastra la barra será motivo de otro post, y no deberíamos olvidar.</p>
<p>Este desarrollo es buena práctica para aprender la creación y despachado de eventos personalizados porque realmente te puedes hinchar a usar y crear eventos. Recomiendo separar para ello el código en una clase Player que se encargue de manipular el stream de red y enviar los eventos de usuario necesarios, y un conjunto de clases para el manejo de la interfaz, tales como sliders, buttons, loaders y seekers. Un patrón <a href="http://www.moock.org/lectures/mvc/">MVC </a>también es interesante para montar toda la interacción entre clases y por si piden cambiar el skin para adaptar a otros proyectos e incluso en el mismo proyecto.</p>
<p>La parte más aburrida de esta tarea, la podemos simplificar con el uso de la clase<a href="http://agit8.turbulent.ca/bwp/2009/01/21/pyro-a-video-player-api-for-flash/"> Pyro Player</a> que ha creado Turbulent.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> pyroInstance<span style="color: #000000; font-weight: bold;">:</span>Pyro = <span style="color: #0033ff; font-weight: bold;">new</span> Pyro<span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">320</span>, <span style="color: #000000; font-weight:bold;">240</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>pyroInstance<span style="color: #000000;">&#41;</span>;
pyroInstance.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://myvideosite.com/videos/gratton.flv&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Tras un uso en varios proyectos, puedo afirmar que simplifica bastante la tarea, aunque el diálogo entre esta clase y los controles no te lo quita nadie en ningún proyecto a menos que obligues a tus diseñadores  a que usen los mismos controles en todos los players, o inviertas más tiempo todavía en parametrizar esta opción en tu triada.</p>
<p>Tengo que dar gracias a mi colega <a href="http://www.xinterface.net">Diego </a>por descubrirme esta clase. Como agradecimiento hacia este intercambio de conocimiento tan saludable, os recomiendo a todos también <a href="http://code.google.com/p/mysimplemp3/">MySimpleMp3,</a> una clase similar para reproducir mp3´s.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">audio.<span style="color: #004993;">url</span> = <span style="color: #990000;">&quot;http://mydomain.com/music.mp3&quot;</span>;
audio.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
audio.<span style="color: #004993;">pause</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
audio.<span style="color: #004993;">stop</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
audio.<span style="color: #004993;">volume</span> = 0..1;
audio.panning = <span style="color: #000000; font-weight: bold;">-</span>1..1;</pre></div></div>

</p>
<p>Los que habéis llegado hasta aquí y os interese este post desde la perspectiva de la publicidad, os remito a <a href="http://www.alexsanchez.info/tendremos-video-para-rato/">esta entrada</a> en mi otro blog.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/tendremos-video-para-rato-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Talleres de verano subflash 07</title>
		<link>http://www.electroduendes.com/blog/talleres-de-verano-subflash-07/</link>
		<comments>http://www.electroduendes.com/blog/talleres-de-verano-subflash-07/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 01:22:28 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Actionscript 3.0]]></category>
		<category><![CDATA[Eventos, charlas]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[ponencias]]></category>
		<category><![CDATA[subflash]]></category>
		<category><![CDATA[talleres]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/talleres-de-verano-subflash-07/</guid>
		<description><![CDATA[Un año más la gente de Subflash organiza unos Talleres abiertos de verano el 25 y 26 de Agosto, donde flasheros de todos los lugares de España y Latinoamérica se juntan para asistir a las ponencias, compartir experiencias, conocimientos y disfrutar del comer y beber del lugar. Tras Teruel, Madrid, Barcelona y Oviedo, este año [...]]]></description>
			<content:encoded><![CDATA[<p>Un año más la gente de Subflash organiza unos <strong>Talleres abiertos de verano</strong> el <strong>25 y 26 de Agosto</strong>, donde flasheros de todos los lugares de España y Latinoamérica se juntan para asistir a las ponencias, compartir experiencias, conocimientos y disfrutar del comer y beber del lugar. Tras Teruel, Madrid, Barcelona y Oviedo, este año toca <strong>Málaga</strong>.<br />
Este evento <strong>sin ánimo de lucro</strong> está dirigido a todos los desarrolladores web. La convocatoria es abierta, con lo que cualquier persona podrá inscribirse en el sitio web para asistir a las ponencias, bien como oyente si se encuentra en Málaga, o bien mediante opción completa, con alojamiento y pensión completa.<br />
Personalmente solo puedo escribir alabanzas hacia este evento, que&#8230; no sólo me ha servido en el plano profesional, sino también en el plano personal, forjando grandes amistades con muchos de los asistentes durante los cuatro años que llevo asistiendo al evento.<br />
Este año no va a poder ser por temas académicos y no podré asistir. Solo les deseo que lo pasen tan bien como yo lo hice en los años anteriores, y animo a todo aquel que habite en el mundillo del desarrollo web y Flash a que se inscriba para este año. La experiencia es única!</p>
<p>Más información:<br />
<a href="http://www.subflash.com/talleres/2007/">http://www.subflash.com/talleres/2007/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/talleres-de-verano-subflash-07/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Árbol de actionscript.es</title>
		<link>http://www.electroduendes.com/blog/arbol-de-actionscriptes/</link>
		<comments>http://www.electroduendes.com/blog/arbol-de-actionscriptes/#comments</comments>
		<pubDate>Mon, 14 May 2007 18:43:57 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[experimentación]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=79</guid>
		<description><![CDATA[Por aquí dejo un prototipo de experimento que empecé hace como un año y medio.  Se trata de un sistema de visualización gráfica en forma de árbol del rss del sitio web Actionscript.es. Para los que no lo conozcan, actionscript.es es un portal de enlaces y recursos del lenguaje de programación Actionscript donde podemos [...]]]></description>
			<content:encoded><![CDATA[<p>Por aquí dejo un prototipo de experimento que empecé hace como un año y medio.  Se trata de un sistema de visualización gráfica en forma de árbol del rss del sitio web <strong>Actionscript.es.</strong> Para los que no lo conozcan, <a href="http://www.actionscript.es">actionscript.es</a> es un portal de enlaces y recursos del lenguaje de programación Actionscript donde podemos encontrar los sitios web de obligada visita para cualquier desarrollador de esta plataforma, así como añadir nuevos enlaces al portal. Dicha página, pone a dominio público, un <a href="http://www.actionscript.es/sindicar.php">feed RSS</a> de los enlaces de la misma, de manera que cualquiera (en este caso, yo) pueda acceder a los recursos que allí se brindan, y representarlos a su antojo.</p>
<p>La idea del experimento era presentar el directorio de enlaces del portal mediante un juguete visual y dar una vuelta de tuerca al árbol de datos de la web, además de servirme como &#8220;sparring&#8221; para el desarrollo de un conjunto de clases para el tratamiento de sistemas de representación de redes y datos complejos.</p>
<div style="text-align:center">
<a href="http://www.electroduendes.com/actionscript.es"><img src="/blog/wp-content/arbol_actionscript.jpg" border="0"/></a>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/arbol-de-actionscriptes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clase PrecargaSerie actionscript 2.0</title>
		<link>http://www.electroduendes.com/blog/clase-precargaserie-actionscript-20/</link>
		<comments>http://www.electroduendes.com/blog/clase-precargaserie-actionscript-20/#comments</comments>
		<pubDate>Thu, 22 Feb 2007 12:45:22 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Librerías, recursos]]></category>
		<category><![CDATA[experimentación]]></category>
		<category><![CDATA[librería]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/clase-precargaserie-actionscript-20/</guid>
		<description><![CDATA[Por aquí dejo una clase que maneja precargas en serie en Actionscript 2.0, está implementada con LoadMovie para permitir cargar sonidos y demás. Es útil en galerías de imágenes donde las cargas en paralelo no son tan útiles porque hace falta ir mostrando el contenido según va cargando, en el orden de carga. Usa modelo [...]]]></description>
			<content:encoded><![CDATA[<p>Por aquí dejo una clase que maneja precargas en serie en Actionscript 2.0, está implementada con LoadMovie para permitir cargar sonidos y demás. Es útil en galerías de imágenes donde las cargas en paralelo no son tan útiles porque hace falta ir mostrando el contenido según va cargando, en el orden de carga. Usa modelo de despachado de eventos, con lo que es muy fácil integrarla con otras clases.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> com.<span style="color: #006600;">gskinner</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">GDispatcher</span>;
<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">utils</span>.<span style="color: #006600;">Delegate</span>;
<span style="color: #808080; font-style: italic;">/**
 * @author Álex Sánchez
 * http://www.electroduendes.com/
 * @version 1.1
 * @usage  Clase para cargar Jpgs o swfs en un contenedor en serie (una detrás
 * de otra). Suele ser útil para galerías de imágenes.
 * 
 * listeners:
 * 	- onLoadProgress; devuelve un objeto del tipo:
 * 	{type:&quot;onLoadProgress&quot;, mc:MovieClip, progress:Number, total:Number, percent:Number};
 * 	
 * 	- onLoadActualStart; devuelve un objeto del tipo:
 * 	{type:&quot;onLoadActualStart&quot;, mc:MovieClip}
 * 	
 * 	- onLoadActualComplete; devuelve un objeto del tipo:
 *  {type:&quot;onLoadActualComplete&quot;, mc:MovieClip}
 * 	
 * 	- onLoadAllComplete; devuelve un objeto del tipo:
 * 	{type:&quot;onLoadAllComplete&quot;}
 * 	
 * &lt;code&gt;
 * 		import com.electroduendes.precarga.PrecargaSerie;
 * 		import mx.utils.Delegate;
 * 		
 * 		var precarga:PrecargaSerie = new PrecargaSerie();
 * 		var urls:Array = new Array(&quot;1.jpg&quot;, &quot;2.jpg&quot;, &quot;3.jpg&quot;, &quot;4.jpg&quot;);
 * 		var clips:Array = new Array(_root.uno, 
 * 			_root.dos, _root.tres, _root.cuatro);
 * 		precarga.addEventListener(&quot;onLoadProgress&quot;, 
 * 			Delegate.create(this, progreso));
 * 		precarga.addEventListener(&quot;onLoadActualComplete&quot;, 
 * 			Delegate.create(this, fincarga));
 * 		precarga.addEventListener(&quot;onLoadAllComplete&quot;, 
 * 			Delegate.create(this, fintodo));
 * 		precarga.addEventListener(&quot;onLoadActualStart&quot;, 
 * 			Delegate.create(this, inicioCarga));
 * 		precarga.loadClips(urls, clips);
 * 		
 * 		function progreso(obj) {
 * 			trace(&quot;progreso despachado para mc &quot;+obj.mc+ &quot; al : &quot;+obj.percent+&quot;%&quot;);
 * 		}
 * 		function inicioCarga(obj){
 * 			trace(&quot;inicio de carga para el mc&quot;+obj.mc);
 * 		}
 * 		function fincarga(obj) {
 * 			trace(&quot;fincarga despachada para movieclip: &quot;+obj.mc);
 * 		}
 * 		
 * 		function fintodo() {
 * 			trace(&quot;fintodo despachado&quot;);
 * 		}	
 * &lt;/code&gt;
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">electroduendes</span>.<span style="color: #006600;">precarga</span>.<span style="color: #006600;">PrecargaSerie</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> numCargados:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
	<span style="color: #808080; font-style: italic;">// número de objetos que ya están cargados</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> actualProgress:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
	<span style="color: #808080; font-style: italic;">// almacena el progreso de carga</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> actualTotal:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> actualPercent:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> actualTarget:<span style="color: #0066CC;">MovieClip</span> = <span style="color: #000000; font-weight: bold;">null</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> urlArray : <span style="color: #0066CC;">Array</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> targetArray : <span style="color: #0066CC;">Array</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> interval:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">0</span>;
	<span style="color: #000000; font-weight: bold;">var</span> dispatchEvent:<span style="color: #000000; font-weight: bold;">Function</span>;
	<span style="color: #000000; font-weight: bold;">var</span> addEventListener:<span style="color: #000000; font-weight: bold;">Function</span>;
	<span style="color: #000000; font-weight: bold;">var</span> removeEventListener:<span style="color: #000000; font-weight: bold;">Function</span>;
	<span style="color: #000000; font-weight: bold;">function</span> PrecargaSerie<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		GDispatcher.<span style="color: #006600;">initialize</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/*
	 * inicia el proceso de carga
	 * @param urlArray el arrray de películas a cargar
	 * @param targetArray el array de contenedores (movieclips)
	 */</span>
	<span style="color: #000000; font-weight: bold;">function</span> loadClips<span style="color: #66cc66;">&#40;</span>urlArray:<span style="color: #0066CC;">Array</span>, targetArray:<span style="color: #0066CC;">Array</span>, <span style="color: #0066CC;">type</span>:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">urlArray</span> = urlArray;
			<span style="color: #0066CC;">this</span>.<span style="color: #006600;">targetArray</span> = targetArray;
			<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	* efectua el loadMovie. 
	* se va a ejecutar 'n veces' tantas como numCargados.
	*/</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		targetArray<span style="color: #66cc66;">&#91;</span>numCargados<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">loadMovie</span><span style="color: #66cc66;">&#40;</span>urlArray<span style="color: #66cc66;">&#91;</span>numCargados<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// con el setInterval, nos aseguramos de que actualProgress sea &gt; 0</span>
		<span style="color: #808080; font-style: italic;">// guardamos la referencia actual en el atributo actualTarget</span>
		actualTarget = targetArray<span style="color: #66cc66;">&#91;</span>numCargados<span style="color: #66cc66;">&#93;</span>;
		interval = <span style="color: #0066CC;">setInterval</span><span style="color: #66cc66;">&#40;</span>Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, loadStart<span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	* permite saber si la carga está iniciada
	* se usa porque la carga no devuelve 0 hasta que no se comienza a cargar
	*/</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> loadStart<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		actualProgress = targetArray<span style="color: #66cc66;">&#91;</span>numCargados<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">getBytesLoaded</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// si ya ha empezado a cargar...</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>actualProgress<span style="color: #66cc66;">&gt;</span>=<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// limpiamos esta funcion</span>
			<span style="color: #0066CC;">clearInterval</span><span style="color: #66cc66;">&#40;</span>interval<span style="color: #66cc66;">&#41;</span>;
			onLoadActualStart<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #808080; font-style: italic;">// con esto conseguimos que actualProgress siempre esté actualizado</span>
			interval = <span style="color: #0066CC;">setInterval</span><span style="color: #66cc66;">&#40;</span>Delegate.<span style="color: #006600;">create</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>,<span style="color: #0066CC;">onLoadProgress</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	* permite escuchar el porcentaje de la carga 
	* actualiza las propiedades tales como actualProgress, actualPercent.
	*/</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">onLoadProgress</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		actualProgress = actualTarget.<span style="color: #0066CC;">getBytesLoaded</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		actualTotal = actualTarget.<span style="color: #0066CC;">getBytesTotal</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		actualPercent = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">round</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span>actualProgress<span style="color: #66cc66;">*</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">/</span>actualTotal<span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #000000; font-weight: bold;">var</span> eventObj:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span> <span style="color: #0066CC;">type</span>:<span style="color: #ff0000;">&quot;onLoadProgress&quot;</span>, 
					mc:<span style="color: #0066CC;">MovieClip</span>, 
					progress:<span style="color: #0066CC;">Number</span>, 
					total:<span style="color: #0066CC;">Number</span>,
					percent:<span style="color: #0066CC;">Number</span>
					<span style="color: #66cc66;">&#125;</span>;
		eventObj.<span style="color: #006600;">mc</span> = actualTarget;
		eventObj.<span style="color: #006600;">progress</span> = actualProgress;
		eventObj.<span style="color: #006600;">total</span> = actualTotal;
		eventObj.<span style="color: #006600;">percent</span> = actualPercent;
&nbsp;
	  	<span style="color: #808080; font-style: italic;">//despacho evento para los preloaders</span>
	  	dispatchEvent<span style="color: #66cc66;">&#40;</span>eventObj<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>actualPercent<span style="color: #66cc66;">&gt;</span>=<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #0066CC;">clearInterval</span><span style="color: #66cc66;">&#40;</span>interval<span style="color: #66cc66;">&#41;</span>;
			actualProgress = <span style="color: #cc66cc;">0</span>;
			numCargados++;
			onLoadActualComplete<span style="color: #66cc66;">&#40;</span>actualTarget<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>numCargados<span style="color: #66cc66;">&lt;</span>targetarray .<span style="color: #0066CC;">length</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">//acabamos!</span>
				onLoadAllComplete<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	* función que se ejecutará cuando empiece la precarga de
	* algún objeto
	* @param ref 
	* una referencia del objeto que se ha cargado
	*/</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onLoadActualStart<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> eventObj:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:<span style="color: #ff0000;">&quot;onLoadActualStart&quot;</span>, mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#125;</span>;
		eventObj.<span style="color: #006600;">mc</span> = actualTarget;
		dispatchEvent<span style="color: #66cc66;">&#40;</span>eventObj<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	*
	* @usage función que se ejecutará cuando termine la precarga de
	* algún objeto
	* @param ref 
	* una referencia del objeto que se ha cargado
	*/</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onLoadActualComplete<span style="color: #66cc66;">&#40;</span>ref:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">var</span> eventObj:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:<span style="color: #ff0000;">&quot;onLoadActualComplete&quot;</span>, mc:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#125;</span>;
	  	<span style="color: #808080; font-style: italic;">//despacho evento</span>
	  	eventObj.<span style="color: #006600;">mc</span> = actualTarget;
	  	dispatchEvent<span style="color: #66cc66;">&#40;</span>eventObj<span style="color: #66cc66;">&#41;</span>;		
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	*
	* @usage función que se ejecutará cuando termine la precarga de
	* de el último objeto a cargar
	*/</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onLoadAllComplete<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>	
		<span style="color: #000000; font-weight: bold;">var</span> eventObj:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:<span style="color: #ff0000;">&quot;onLoadAllComplete&quot;</span><span style="color: #66cc66;">&#125;</span>;
	  	<span style="color: #808080; font-style: italic;">//despacho evento</span>
	  	dispatchEvent<span style="color: #66cc66;">&#40;</span>eventObj<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/**
	* @usage getter target array 
	* los contenidos
	* @return un array de clips
	*/</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getTargetArray<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Array</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> targetArray.<span style="color: #0066CC;">slice</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p></targetarray></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/clase-precargaserie-actionscript-20/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Talleres de verano Subflash 2006</title>
		<link>http://www.electroduendes.com/blog/talleres-de-verano-subflash-2006/</link>
		<comments>http://www.electroduendes.com/blog/talleres-de-verano-subflash-2006/#comments</comments>
		<pubDate>Mon, 03 Jul 2006 19:50:56 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Enlaces]]></category>
		<category><![CDATA[Eventos, charlas]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[ponencias]]></category>
		<category><![CDATA[subflash]]></category>
		<category><![CDATA[talleres]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/talleres-de-verano-subflash-2006/</guid>
		<description><![CDATA[Despues del éxito de los años anteriores, y tras pasearnos por Teruel, Madrid y Barcelona, éste año también hemos decidido hacer una quedada veraniega.
Para los que no lo conozcan, este evento es un encuentro que se lleva haciendo desde hace 3 años y que organiza el equipo de subflash sin ánimo de lucro. Se escoge [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Despues del éxito de los años anteriores, y tras pasearnos por Teruel, Madrid y Barcelona, éste año también hemos decidido hacer una quedada veraniega.</p>
<p>Para los que no lo conozcan, este evento es un encuentro que se lleva haciendo desde hace 3 años y que organiza el equipo de subflash sin ánimo de lucro. Se escoge un lugar dentro de la Península Ibérica y se pasan allí 3 dias asistiendo a diferentes talleres/ponencias. Este año el lugar designado por la organización para los Talleres Subflash 2006 es: OVIEDO &#8211; ASTURIAS.</p>
<p>Además del interés didáctico que ésto tiene, otra parte muy importante es el hecho de conocer a otras personas que comparten las mismas inquietudes.</p></blockquote>
<p>Información e inscripciones, en el siguiente enlace:<br />
<a href="http://www.subflash.com/talleres/2006/">[Talleres 2006]</a></p>
<p>Este verano y un año más, me honra participar en las ponencias. Hablaré sobre <em>&#8220;sistemas de representación de redes sociales y de información&#8221;</em>, sobre todo los aplicados a Flash. Tras este título aparentemente rruaro, os ofreceré una ponencia amena y liviana, con 0% de código y 100% de internet, donde repasaremos el auténtico fundamento de la web 2.0, <strong>las redes sociales</strong>, navegaremos por Internet para repasar hitos claves que han fundamentado este fenómeno, anécdotas del mismo, visitaremos novedosos experimentos que pretenden representar la maraña de información e interconexiones que generan las redes sociales y, posiblemente, os enseñaré alguno de mis experimentos. Todo esto en 45 ligeros minutos.<br />
Además, como apoyo a las ponencias, a lo largo de este mes, trataré de volcar la mayor parte de experimentos y enlaces de interés que estoy recopilando al blog, con lo que si os interesa el tema, estad atentos, y por supuesto, no dejéis de ir a las ponencias.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/talleres-de-verano-subflash-2006/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>motion detection+flash 8=webcam djembé</title>
		<link>http://www.electroduendes.com/blog/motion-detectionflash-8webcam-djembe/</link>
		<comments>http://www.electroduendes.com/blog/motion-detectionflash-8webcam-djembe/#comments</comments>
		<pubDate>Thu, 25 May 2006 00:44:37 +0000</pubDate>
		<dc:creator>Alex Sánchez</dc:creator>
				<category><![CDATA[Actionscript 2.0]]></category>
		<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[experimentación]]></category>
		<category><![CDATA[realidad aumentada]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=51</guid>
		<description><![CDATA[Desde mediados del año pasado se hablaba de que los sistemas de detección de movimiento en páginas web con flash a través de webcam, eran una realidad, pero personalmente, no había tenido tiempo hasta ahora de probarlos. Ahora que estoy más ocioso, me he puesto a investigar, y puedo decir que tampoco creo que se [...]]]></description>
			<content:encoded><![CDATA[<p>Desde mediados del año pasado se hablaba de que los sistemas de detección de movimiento en páginas web con flash a través de webcam, eran una realidad, pero personalmente, no había tenido tiempo hasta ahora de probarlos. Ahora que estoy más ocioso, me he puesto a investigar, y puedo decir que tampoco creo que se puedan hacer grandes historias, pero algun juego para pasar el rato ya podemos  ver. En el ejemplo que pego, utilizo un vídeo grabado con mi webcam para enseñaros una posible aplicación.</p>
<div align="center">

<object	type="application/x-shockwave-flash"
			data="http://www.electroduendes.com/swf/bumtaka1/bumtaka_con_video.swf"
			width="320"
			height="280">
	<param name="movie" value="http://www.electroduendes.com/swf/bumtaka1/bumtaka_con_video.swf" />
</object>
</div>
<p><a href="http://www.electroduendes.com/swf/bumtaka1/">[ webcam djembé ]</a><br />
<br />
Para el experimento, he estado trasteando con algún algoritmo de motion detection.  En concreto, he trasteado con la clase BitmapData, y los métodos getPixel y treshold. Adobe ha sacado un <a href="http://www.adobe.com/devnet/flash/articles/webcam_motion_print.html">artículo-howto </a>al respecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/motion-detectionflash-8webcam-djembe/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
