<?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; Librerías, recursos</title>
	<atom:link href="http://www.electroduendes.com/blog/category/librerias/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>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>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>blur tween class</title>
		<link>http://www.electroduendes.com/blog/blur-tween-class/</link>
		<comments>http://www.electroduendes.com/blog/blur-tween-class/#comments</comments>
		<pubDate>Mon, 01 May 2006 17:22:28 +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[as2]]></category>
		<category><![CDATA[blur]]></category>
		<category><![CDATA[librería]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=46</guid>
		<description><![CDATA[Actualización: Esta clase es bastante antigua (2006 y as2). Recomiendo visitar la librería TweenMax si pretendes hacer blur mediante código.
Por aquí va una muy simple clase para hacer blurs (desenfocados) en Actionscript 2.o que hice hace tiempo, pensaba integrarla con las tweening ecuations, o con algún paquete de tweenings, pero por desidia no la he [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Actualización:</strong> Esta clase es bastante antigua (2006 y as2). Recomiendo visitar la librería <a href="http://blog.greensock.com/tweenmaxas3/">TweenMax</a> si pretendes hacer blur mediante código.</p>
<p>Por aquí va una muy simple clase para hacer blurs (desenfocados) en Actionscript 2.o que hice hace tiempo, pensaba integrarla con las tweening ecuations, o con algún paquete de tweenings, pero por desidia no la he vuelto a tocar.</p>
<p>Antes de que coja polvo, o peor aún quede obsoleta, la libero, por si alguien se anima a mejorarla o le sirve de un aprieto.</p>
<div align="center">
<object	type="application/x-shockwave-flash"
			data="http://www.electroduendes.com/swf/blurClass/blur.swf"
			width="250"
			height="200">
	<param name="movie" value="http://www.electroduendes.com/swf/blurClass/blur.swf" />
</object></div>
<p>Cositas estupendas de la clase:</p>
<p>- La velocidad se pasa en segundos, independiente del framerate</p>
<p>- Actionscript 2.0 &#038; MTASC ready.</p>
<p>- Control de todos los argumentos de blurFilter. (blurx, blury, quality)</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><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 Alejandro Sánchez Marcos
 * @usage
 import com.electroduendes.tween.BlurTween;
 var blurTween:BlurTween = new BlurTween(mc);
 var initBlur:Object = {blurX:0, blurY:0, quality:3};
 var finalBlur:Object = {blurX:50, blurY:5, quality:3};
 a.onRelease = function() {
 	blurTween.tween(initBlur, finalBlur, 1);
 };
 b.onRelease = function() {
 	blurTween.tween(finalBlur, initBlur, 1);
 };
*
*/</span>
<span style="color: #000000; font-weight: bold;">class</span> com.<span style="color: #006600;">electroduendes</span>.<span style="color: #006600;">tween</span>.<span style="color: #006600;">BlurTween</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> interval: <span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">40</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> filter:BlurFilter;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> blur_interval:<span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> mc:<span style="color: #0066CC;">MovieClip</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">quality</span> : <span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> counter : <span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> iterations : <span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> diferenceX:<span style="color: #0066CC;">Number</span>;
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> diferenceY:<span style="color: #0066CC;">Number</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> BlurTween<span style="color: #66cc66;">&#40;</span>mc:<span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">mc</span> = mc;
		filter = <span style="color: #000000; font-weight: bold;">new</span> BlurFilter<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> tween<span style="color: #66cc66;">&#40;</span>initBlur:<span style="color: #0066CC;">Object</span>, finalBlur:<span style="color: #0066CC;">Object</span>, seconds:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		counter = <span style="color: #cc66cc;">0</span>;
		<span style="color: #0066CC;">this</span>.<span style="color: #006600;">iterations</span> = <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">ceil</span><span style="color: #66cc66;">&#40;</span>seconds<span style="color: #66cc66;">*</span><span style="color: #cc66cc;">1000</span><span style="color: #66cc66;">/</span>interval<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">// apply init blur</span>
		filter.<span style="color: #006600;">blurX</span> = initBlur.<span style="color: #006600;">blurX</span>;
		filter.<span style="color: #006600;">blurY</span> = initBlur.<span style="color: #006600;">blurY</span>;
		filter.<span style="color: #0066CC;">quality</span> = initBlur.<span style="color: #0066CC;">quality</span>;
		mc.<span style="color: #006600;">filters</span> = <span style="color: #66cc66;">&#91;</span>filter<span style="color: #66cc66;">&#93;</span>;
		<span style="color: #808080; font-style: italic;">// calculate difference</span>
		diferenceX = finalBlur.<span style="color: #006600;">blurX</span> – initBlur.<span style="color: #006600;">blurX</span>;
		diferenceY = finalBlur.<span style="color: #006600;">blurY</span> – initBlur.<span style="color: #006600;">blurY</span>;
		<span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">quality</span> = finalBlur.<span style="color: #0066CC;">quality</span>;
		<span style="color: #808080; font-style: italic;">// if we have something to blur or unblur…</span>
		<span style="color: #0066CC;">clearInterval</span><span style="color: #66cc66;">&#40;</span>blur_interval<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>diferenceX<span style="color: #66cc66;">!</span>=<span style="color: #cc66cc;">0</span> <span style="color: #66cc66;">&amp;&amp;</span> diferenceY<span style="color: #66cc66;">!</span>=<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>
			blur_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>, applyTween<span style="color: #66cc66;">&#41;</span>, interval<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> applyTween<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> : <span style="color: #0066CC;">Void</span> <span style="color: #66cc66;">&#123;</span>
		counter++;
		filter.<span style="color: #006600;">blurX</span> += diferenceX<span style="color: #66cc66;">/</span>iterations;
		filter.<span style="color: #006600;">blurY</span> += diferenceY<span style="color: #66cc66;">/</span>iterations;
		filter.<span style="color: #0066CC;">quality</span> = <span style="color: #0066CC;">quality</span>;
		mc.<span style="color: #006600;">filters</span> = <span style="color: #66cc66;">&#91;</span>filter<span style="color: #66cc66;">&#93;</span>;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>counter == iterations<span style="color: #66cc66;">&#41;</span> <span style="color: #0066CC;">clearInterval</span><span style="color: #66cc66;">&#40;</span>blur_interval<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><a href="http://www.electroduendes.com/swf/blurClass/">[por aquí un ejemplo]</a></p>
<p>Está en ingles por mi propósito hace un año de empezar a codificar en este idioma. Sé que a los hispanohablantes nos cuesta algo trabajar con nombres de variables y comentarios en inglés, pero por contra tengo que decir que después de tener que pelearme con un ejemplo de un código que sólo encontré en un blog francés escrito en francés, al menos, por mayoría democrática debo acostumbrarme al inglés para el código que publico.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/blur-tween-class/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>gdispatcher, la navaja suiza de los eventos</title>
		<link>http://www.electroduendes.com/blog/gdispatcher-la-navaja-suiza-de-los-eventos/</link>
		<comments>http://www.electroduendes.com/blog/gdispatcher-la-navaja-suiza-de-los-eventos/#comments</comments>
		<pubDate>Sun, 05 Feb 2006 19:44:25 +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[Metodología, arquitectura]]></category>
		<category><![CDATA[GDispatcher]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=40</guid>
		<description><![CDATA[Actualización: Este post puede ser útil si codificas en AS2. La clase sigue siendo fundamental para esta versión del lenguaje, pero para AS3 ya no es aplicable.
He visto gente que codifica muy bien, pero que todavía tiene que tocar su código genérico para adaptarlo a sus proyectos. Sobre todo, el problema suele estar en los [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong></strong><strong>Actualización</strong>: Este post puede ser útil si codificas en AS2. La clase sigue siendo fundamental para esta versión del lenguaje, pero para AS3 ya no es aplicable.</em></p>
<p>He visto gente que codifica muy bien, pero que todavía tiene que tocar su código genérico para adaptarlo a sus proyectos. Sobre todo, el problema suele estar en los eventos. Cuando hay que notificar a alguna funcion que un conjunto de cargas está completa, que un formulario está chequeado, o que un combo está seleccionado, ya empiezan los problemas. Para ellos, este post puede ser interesante. Sobre todo si no han trabajado nunca con EventDispatcher. Y para los que han trabajado y piensen que EventDispatcher, a veces se queda corta, puede que también.</p>
<p>Gskinner sacó (gracias <a href="http://www.merlinfactory.com">Carlos</a> ) hace tiempo una utilidad que mejoraba notablemente la clase EventDispatcher. Por si alguien no sabe de que hablo, EventDispatcher, y su mejora, GDispatcher es la navaja suiza que te permite descorchar la botella del vino con la que celebrarás o celebraste tu completo dominio de la  <a href="http://es.wikipedia.org/wiki/Encapsulaci%C3%B3n_en_programaci%C3%B3n_orientada_a_objetos">encapsulación </a> de tus clases, sobre todo las que llevan eventos. Esa manera tan estupenda de trabajar con listeners, que es tan &#8220;clara&#8221; en los UI Components y en la clase MovieClipLoader, se puede utilizar como un patrón de diseño para los mensajes que se envían tus clases (eventos).  </p>
<p>¡Por fin podrás decir a tu jefe, <em>- eh! estoy reutilizando! -</em> y el te dirá&#8230;  <em>-  eh, estupendo, en vez de para mañana, lo quiero para hoy!  -</em> </p>
<p><a href="http://www.gskinner.com/blog/archives/000027.html">GDispatcher</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/gdispatcher-la-navaja-suiza-de-los-eventos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>como evitar el proxy de telefonica en Flash</title>
		<link>http://www.electroduendes.com/blog/como-evitar-el-proxy-de-telefonica-en-flash/</link>
		<comments>http://www.electroduendes.com/blog/como-evitar-el-proxy-de-telefonica-en-flash/#comments</comments>
		<pubDate>Tue, 10 Jan 2006 18:44:53 +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[as2]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=38</guid>
		<description><![CDATA[Es muy difícil explicar a un cliente que el cambio que has realizado en su página no es visible debido al proxy, e incluso hay veces que telefónicamente he tenido que borrarle la carpeta de temporales&#8230; &#8220;pulsa en herramientas>opciones de internet..>eliminar archivos&#8230; no, no, en inicio no, en el explorador, no, en el google no&#8230;&#8221;
Supongo [...]]]></description>
			<content:encoded><![CDATA[<p>Es muy difícil explicar a un cliente que el cambio que has realizado en su página no es visible debido al proxy, e incluso hay veces que telefónicamente he tenido que borrarle la carpeta de temporales&#8230; &#8220;pulsa en herramientas>opciones de internet..>eliminar archivos&#8230; no, no, en inicio no, en el explorador, no, en el google no&#8230;&#8221;<br />
Supongo que a todos os suena. Bien, pues hace un año mas o menos me pasó algo insólito; el proxy servía los   swfs corruptos, y la página no se veía. Así que me apresuré a averiguar como demonios podía saltármelo, y encontré una idea que podía servir, adjuntar una variable aleatoria a la cadena de la URL a cargar, de tal manera que que el archivo pareciera diferente a ojos del proxy. Vale, nada nuevo, supongo que todos hemos llegado hasta ahí.</p>
<p>El problema de esta opción es que es bastante tedioso andar concatenando.. cada vez que tienes que hacer un loadMovie, un loadVars, un loadSound, un load&#8230; tienes que andar acordándote de ponerlo, y peor aún, acordarte de cambiarlo cuando se sube a producción.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> v:<span style="color: #0066CC;">Date</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// comentar al subir a produccion </span>
mcl.<span style="color: #0066CC;">loadMovie</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;principal.swf&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">//mcl.loadMovie(&quot;principal.swf?antiproxy=&quot;+v.getTime());</span>
<span style="color: #808080; font-style: italic;">// TODO: esto es un infierno!, hay que automatizarlo!.</span></pre></div></div>

<p>Todo debido a que el player standalone no consigue cargar las cadenas del tipo &#8220;miarchivo.swf?antiproxy=90878676&#8243;.<br />
Hasta que un día como hoy tuve un rato para pensar en algo que pudiera funcionar.<br />
<br />
Es un simple prototipo que sobreescribe el método loadMovie de la clase MovieClip. El prototipo usa solamente el &#8220;anticaché&#8221; (loadMovie(&#8221;archivo.swf?anticache=&#8221;+v) ) cuando el swf está en producción. De esta manera, podemos subir nuestros archivos directamente a producción sin tener que acordarnos de comentar y descomentar código.<br />
</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">MovieClip</span>.<span style="color: #0066CC;">prototype</span>._loadMovie = <span style="color: #0066CC;">MovieClip</span>.<span style="color: #0066CC;">prototype</span>.<span style="color: #0066CC;">loadMovie</span>;
<span style="color: #0066CC;">MovieClip</span>.<span style="color: #0066CC;">prototype</span>.<span style="color: #0066CC;">loadMovie</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">url</span>:<span style="color: #0066CC;">String</span>,method:<span style="color: #0066CC;">String</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> con:<span style="color: #0066CC;">LocalConnection</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">LocalConnection</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>con.<span style="color: #0066CC;">domain</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>==<span style="color: #ff0000;">&quot;localhost&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">this</span>._loadMovie<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">url</span>, method<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// si estamos en local todo igual...</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;">// en caso contrario, que reviente el proxy</span>
		v = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #808080; font-style: italic;">//fix alex_wolff: si la query viene con mas variables, no nos la cargamos</span>
		<span style="color: #000000; font-weight: bold;">var</span> separador:<span style="color: #0066CC;">String</span> = <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">url</span>.<span style="color: #0066CC;">indexOf</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;?&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&gt;</span>-<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> ? <span style="color: #ff0000;">&quot;&amp;&quot;</span> : <span style="color: #ff0000;">&quot;?&quot;</span>; 
		<span style="color: #0066CC;">this</span>._loadMovie<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">url</span>+separador+<span style="color: #ff0000;">&quot;antiproxy=&quot;</span>+v, method<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
	con.<span style="color: #0066CC;">close</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">var</span> p = <span style="color: #0066CC;">_root</span>.<span style="color: #0066CC;">createEmptyMovieClip</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;contenedor&quot;</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
p.<span style="color: #0066CC;">loadMovie</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;jaja.jpg&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/como-evitar-el-proxy-de-telefonica-en-flash/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>mx.transitions.TransitionManager para flash 8</title>
		<link>http://www.electroduendes.com/blog/mxtransitionstransitionmanager-para-flash-8/</link>
		<comments>http://www.electroduendes.com/blog/mxtransitionstransitionmanager-para-flash-8/#comments</comments>
		<pubDate>Sun, 20 Nov 2005 03:36:57 +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[as2]]></category>
		<category><![CDATA[TransitionManager]]></category>

		<guid isPermaLink="false">http://www.electroduendes.com/blog/?p=31</guid>
		<description><![CDATA[Me he llevado una grata sorpresa al ojear la ayuda de flash 8. Se trata de la clase mx.transitions.TransitionManager, que permite trabajar con una serie de transiciones de una manera muy ágil. Supongo que casi todos los programadores, nos hemos imaginado, o tratado de implementar una clase de este tipo, que &#8220;encapsule&#8221; el comportamiento del [...]]]></description>
			<content:encoded><![CDATA[<p>Me he llevado una grata sorpresa al ojear la ayuda de flash 8. Se trata de la clase mx.transitions.TransitionManager, que permite trabajar con una serie de transiciones de una manera muy ágil. Supongo que casi todos los programadores, nos hemos imaginado, o tratado de implementar una clase de este tipo, que &#8220;encapsule&#8221; el comportamiento del conjunto de transiciones de nuestro repositorio. Pues bien, para aquellos que no lo han hecho todavía, Macromedia se les ha adelantado. </p>
<p>Editado: después del comentario de mi amigo manjeet, entiendo que este post, puede ser muy arduo sin un ejemplo. Aquí os pongo el resultado del código:<br />
<center><br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="300" height="200" id="TransitionManager" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="http://www.electroduendes.com/swf/TransitionManager/TransitionManager.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#fff7ef" /><embed src="http://www.electroduendes.com/swf/TransitionManager/TransitionManager.swf" quality="high" bgcolor="#fff7ef" width="300" height="200" name="TransitionManager" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
</object></center><br />
y el código.</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">transitions</span>.<span style="color: #66cc66;">*</span>;
<span style="color: #0066CC;">import</span> mx.<span style="color: #006600;">transitions</span>.<span style="color: #006600;">easing</span>.<span style="color: #66cc66;">*</span>;
<span style="color: #000000; font-weight: bold;">var</span> animador:TransitionManager = <span style="color: #000000; font-weight: bold;">new</span> TransitionManager<span style="color: #66cc66;">&#40;</span>mc<span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// configuramos nuestros objetos de transiciones</span>
<span style="color: #000000; font-weight: bold;">var</span> objBlinds:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Blinds, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">2</span>, easing:None.<span style="color: #006600;">easeNone</span>, numStrips:<span style="color: #cc66cc;">10</span>, dimension:<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objFadeTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Fade, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">3</span>, easing:None.<span style="color: #006600;">easeNone</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objFlyTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Fly, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">3</span>, easing:Elastic.<span style="color: #006600;">easeOut</span>, startPoint:<span style="color: #cc66cc;">9</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objIrisTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Iris, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">2</span>, easing:Strong.<span style="color: #006600;">easeOut</span>, startPoint:<span style="color: #cc66cc;">5</span>, shape:Iris.<span style="color: #006600;">CIRCLE</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objPhotoTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Photo, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">1</span>, easing:None.<span style="color: #006600;">easeNone</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objPixelTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:PixelDissolve, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">2</span>, easing:None.<span style="color: #006600;">easeNone</span>, xSections:<span style="color: #cc66cc;">10</span>, ySections:<span style="color: #cc66cc;">10</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objRotateTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Rotate, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">3</span>, easing:Strong.<span style="color: #006600;">easeInOut</span>, ccw:<span style="color: #000000; font-weight: bold;">false</span>, degrees:<span style="color: #cc66cc;">720</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objSqueezeTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Squeeze, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">2</span>, easing:Elastic.<span style="color: #006600;">easeOut</span>, dimension:<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objWipeTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Wipe, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">2</span>, easing:Elastic.<span style="color: #006600;">easeOut</span>, startPoint:<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #000000; font-weight: bold;">var</span> objZoomTransition:<span style="color: #0066CC;">Object</span> = <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">type</span>:Zoom, direction:Transition.<span style="color: #b1b100;">IN</span>, <span style="color: #0066CC;">duration</span>:<span style="color: #cc66cc;">2</span>, easing:Elastic.<span style="color: #006600;">easeOut</span><span style="color: #66cc66;">&#125;</span>;
<span style="color: #808080; font-style: italic;">// rellenamos nuestro combo</span>
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objBlinds, label:<span style="color: #ff0000;">&quot;Blinds&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objFadeTransition, label:<span style="color: #ff0000;">&quot;Fade&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objFlyTransition, label:<span style="color: #ff0000;">&quot;Fly&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objIrisTransition, label:<span style="color: #ff0000;">&quot;Iris&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objPhotoTransition, label:<span style="color: #ff0000;">&quot;Photo&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objPixelTransition, label:<span style="color: #ff0000;">&quot;PixelDissolve&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objRotateTransition, label:<span style="color: #ff0000;">&quot;Rotate&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objSqueezeTransition, label:<span style="color: #ff0000;">&quot;Squeeze&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objWipeTransition, label:<span style="color: #ff0000;">&quot;Wipe&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
combo.<span style="color: #006600;">addItem</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">data</span>:objZoomTransition, label:<span style="color: #ff0000;">&quot;Zoom&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// cargamos el evento change</span>
<span style="color: #000000; font-weight: bold;">var</span> obj:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
obj.<span style="color: #006600;">change</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>evt_obj:<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> seleccion:<span style="color: #0066CC;">Object</span> = evt_obj.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">selectedItem</span>;
	animador.<span style="color: #006600;">startTransition</span><span style="color: #66cc66;">&#40;</span>seleccion.<span style="color: #0066CC;">data</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>;
combo.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;change&quot;</span>, obj<span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> obj2:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #808080; font-style: italic;">// cargamos el eveno</span>
obj2.<span style="color: #006600;">allTransitionsInDone</span> = <span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>eventObj:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;evento despachado, fin de la animación&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>;
animador.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;allTransitionsInDone&quot;</span>, obj2<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.electroduendes.com/blog/mxtransitionstransitionmanager-para-flash-8/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
