<?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>JLC Productions &#187; Apuntes</title>
	<atom:link href="http://jlc-productions.net/apuntes/feed/" rel="self" type="application/rss+xml" />
	<link>http://jlc-productions.net</link>
	<description>Diseño Web, Animación Flash y mucho más</description>
	<lastBuildDate>Tue, 27 Jul 2010 12:15:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Precarga en Flash aparece a la mitad</title>
		<link>http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/</link>
		<comments>http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 22:26:39 +0000</pubDate>
		<dc:creator>Juanlu001</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[precarga]]></category>

		<guid isPermaLink="false">http://jlc-productions.net/?p=764</guid>
		<description><![CDATA[Seguramente te haya pasado que, al ver tu película Flash en un navegador, un rectángulo blanco sustituye por un tiempo a lo que debería ser tu película y, un tiempo después, aparece la precarga directamente en el 60% o en cualquier otro valor inusualmente alto, en lugar de empezar por el 0% que sería lo [...]


Related posts:<ol><li><a href='http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/' rel='bookmark' title='Permanent Link: Precarga en ActionScript 3'>Precarga en ActionScript 3</a></li>
<li><a href='http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/' rel='bookmark' title='Permanent Link: Deep linking en Flash con SWFAddress'>Deep linking en Flash con SWFAddress</a></li>
<li><a href='http://jlc-productions.net/blog/2010/07/la-burocracia-es-que-es-un-primor/' rel='bookmark' title='Permanent Link: La burocracia es que es un primor'>La burocracia es que es un primor</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Seguramente te haya pasado que, al ver tu película Flash en un navegador, un rectángulo blanco sustituye por un tiempo a lo que debería ser tu película y, un tiempo después, aparece la precarga directamente en el 60% o en cualquier otro valor inusualmente alto, en lugar de empezar por el 0% que sería lo ideal. Este es un problema que se consulta constantemente en todos los foros de Flash, y que, en mi opinión, está muy mal documentado en castellano para ActionScript 3 en concreto. Por esa razón, y más si te encontraste con este tipo de problema al usar mi <a href="http://jlc-productions.net/apuntes/2009/01/precarga-en-actionscript-3/">Precarga en ActionScript 3</a>, voy a dar unos pequeños consejos para, en la medida de lo posible, <strong>evitar que la precarga aparezca incompleta</strong>. <span id="more-764"></span></p>
<h3>1. ¿Por qué mi precarga aparece incompleta?</h3>
<div class="hidden"></div>
<p>La precarga aparece incompleta debido al proceso de carga que sigue Flash Player. Diversos elementos de la película (clases importadas mediante <code>import</code> y símbolos exportados para ActionScript, fundamentalmente) se cargan en el <strong>primer fotograma</strong> de la película, para así poder ser usados en toda la línea de tiempo sin ningún error en tiempo de ejecución. No obstante, hasta que Flash no carga un fotograma, no puede mostrarlo; si estamos hablando <em>del primer fotograma</em>, tan sólo veremos un rectángulo blanco donde debería estar la película hasta que ese fotograma se cargue por completo. Si hay muchos elementos que se tienen que cargar en el primer fotograma y su tamaño es muy grande con respecto al de la película completa, tendremos que, para cuando la precarga aparezca, le faltará muy poco para terminar.</p>
<h3>2. ¿Cómo puedo evitar que mi precarga aparezca incompleta?</h3>
<p>Algunos de los elementos que se exportan en el primer fotograma pueden ser movidos para que se exporten en otro distinto; esto es lo único que podemos controlar. Las clases que importemos mediante la sentencia <code>import</code> siempre se cargarán en el primer fotograma. No obstante, liberar el primer fotograma de todos los símbolos de la biblioteca puede mejorar notablemente el tiempo inicial de carga de la película. Después de todo, nadie quiere que el usuario vea un espacio blanco durante demasiado tiempo.</p>
<div class="hidden"></div>
<p>Los símbolos que exportamos para ActionScript y que, por defecto, se cargan en el primer fotograma, son los que tienen activada la casilla &#8220;<strong>Exportar para ActionScript</strong>&#8221; (Fig. 1).<br />
Si tienes la configuración por defecto, debajo aparece otra casilla titulada &#8220;<strong>Exportar en fotograma 1</strong>&#8220;. Desactivar esta casilla tan sólo tiene utilidad cuando el símbolo se coloca directamente en la línea de tiempo en tiempo de creación (la clase correspondiente se exportaría en el mismo fotograma en el que aparece el símbolo), pero no tiene ninguna utilidad cuando este se instancia dinámicamente; por tanto, vamos a prescindir de esta opción.</p>
<p>Así pues, vamos a cambiar el <strong>fotograma de exportación de clases</strong>. Para ello, en la versión CS4 nos dirigimos a Archivo &#8211;&gt; Configuración de publicación &#8230; &#8211;&gt; Configuración&#8230; (Script). En esta ventana (Fig. 2), en el recuadro &#8220;Exportar clases en fotograma:&#8221; escribimos un número distinto de 1 (si el fotograma no existe, el compilador emitirá un error), y ya tenemos solucionados gran parte de nuestros problemas. Esta medida sólo requiere la precaución de no hacer referencia por código a ningún símbolo de la biblioteca hasta que se cargue el fotograma 2. Por ello, todo el código del tipo</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #36c; font-weight: bold;">var</span> foo<span style="color: #000; font-weight: bold;">:</span>Square = <span style="color: #f00;">new</span> Square<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;</pre></div></div>

<p>Que nosotros tuviéramos en el primer fotograma, tendremos que moverlo al segundo. Si este código estaba en la función constructora de una clase, tendremos que colocarlo en una función <code>init()</code> e invocarla cuando el segundo fotograma esté cargado, simplemente llamándola en ese momento.</p>
<h3>3. Mi precarga aparece antes, pero no desde el 0%. ¿Por qué?</h3>
<p>Como dije, no todos los elementos que se cargan en el primer fotograma pueden ser controlados por nosotros. Aun así, puedo dar algunos consejos prácticos para reducir el tamaño de ese primer fotograma:</p>
<ul>
<li><strong>Cuidado </strong>con los <strong>objetos 3D</strong> en la línea de tiempo. Poner manualmente la propiedad z de un objeto en 1 (!) puede aumentar en un muchicientos por cien el peso del primer fotograma, mientras que colocándolo mediante código, ese aumento es mucho menos acusado.</li>
<li>Los paquetes que no se utilizan no se añaden a la película, pero trata de optimizar tu código para que los que <strong>sí</strong> utilices estén eficientemente aprovechados.</li>
<li>Aprovecha la carga de archivos externos. Esto, aparte de reducir peso en tu película, te permitirá obtener otras ventajas a la hora de actualizarla. Es una muy buena práctica.</li>
</ul>
<p>Sin embargo, hay que notar también que el tiempo de espera antes de la aparición de la película y el porcentaje en el que comienza la precarga no van unidos. Por ejemplo, puede haber 300 KiB para cargar en el primer fotograma, pero si la película completa ocupa 600 KiB, entonces empezará en el 50%. No obstante, si ocupara 2 MiB, empezaría mucho antes.</p>
<h3>4. Quiero una solución definitiva para este problema</h3>
<p><strong>No</strong> la hay. Hay una alternativa, que es <strong>cargar el SWF externamente</strong>, usando una película como contenedor. Esto ahorraría el espacio en blanco y haría que la precarga comenzara en el 0%. No obstante, esto no siempre es posible; por ejemplo, puede ser que enviemos un juego a una página de juegos en Flash, en cuyo caso sólo podríamos enviar un SWF (que yo sepa; nunca lo he probado, si dejaran enviar dos la solución consistiría en lo que acabo de decir).</p>
<p>Y eso es todo. Acuérdate de <a href="http://jlc-productions.net/suscribirse/">suscribirte a mi blog por correo</a> o <a href="http://jlc-productions.net/feed/">vía RSS</a>.</p>
<p>¡Muchas gracias!</p>


<p>Related posts:<ol><li><a href='http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/' rel='bookmark' title='Permanent Link: Precarga en ActionScript 3'>Precarga en ActionScript 3</a></li>
<li><a href='http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/' rel='bookmark' title='Permanent Link: Deep linking en Flash con SWFAddress'>Deep linking en Flash con SWFAddress</a></li>
<li><a href='http://jlc-productions.net/blog/2010/07/la-burocracia-es-que-es-un-primor/' rel='bookmark' title='Permanent Link: La burocracia es que es un primor'>La burocracia es que es un primor</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Deep linking en Flash con SWFAddress</title>
		<link>http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/</link>
		<comments>http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 21:17:02 +0000</pubDate>
		<dc:creator>Juanlu001</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[SWFAddress]]></category>

		<guid isPermaLink="false">http://jlc-productions.net/?p=689</guid>
		<description><![CDATA[Cuando estamos trabajando en una web 100% hecha en Flash, lo que más nos preocupa a los desarrolladores es el SEO, es decir, que dicha web esté correctamente posicionada en los buscadores. El hecho de que los robots de los motores de búsqueda no puedan acceder al contenido de un archivo .swf (salvo, quizás, el [...]


Related posts:<ol><li><a href='http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/' rel='bookmark' title='Permanent Link: Precarga en ActionScript 3'>Precarga en ActionScript 3</a></li>
<li><a href='http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/' rel='bookmark' title='Permanent Link: Precarga en Flash aparece a la mitad'>Precarga en Flash aparece a la mitad</a></li>
<li><a href='http://jlc-productions.net/blog/2008/06/bienvenidos-a-jlc-productions/' rel='bookmark' title='Permanent Link: Bienvenidos a JLC Productions'>Bienvenidos a JLC Productions</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Cuando estamos trabajando en una <strong>web 100% hecha en Flash</strong>, lo que más nos preocupa a los desarrolladores es el <acronym title="Search Engine Optimization">SEO</acronym>, es decir, que dicha web esté <em>correctamente posicionada en los buscadores</em>. El hecho de que los robots de los motores de búsqueda no puedan acceder al contenido de un archivo .swf (salvo, quizás, el caso de Google, pero yo no me relajaría demasiado) y, sobre todo, el problema de que una sola URL corresponda a todo el contenido del sitio, pueden acarrear serios problemas a la hora de querer aparecer en las primeras posiciones de los buscadores <em>sin pagar</em>. Ya que el primer punto no depende de nosotros y nada podemos hacer para remediarlo (salvo olvidarnos de Flash), vamos a aprender cómo solucionar el segundo. Para ello, nos serviremos de una pequeña pero potente librería que cambiará totalmente nuestra filosofía a la hora de enfocar nuestros nuevos proyectos: <a href="http://www.asual.com/swfaddress/">SWFAddress</a>, la cual nos permitirá <strong>asignar a cada estado de nuestra película una URL distinta</strong>, lo que nos permitirá <strong>usar los botones atrás y adelante en Flash</strong>, <strong>asignar un título a cada sección de la web</strong> y <strong>agregar una parte concreta a favoritos</strong>, entre otras cosas. <span id="more-689"></span></p>
<p>Soy consciente de que el tema esta <strong>muy</strong> mal documentado en castellano; de hecho, yo encontré muy poca información en los buscadores cuando quise aprender a utilizar esta librería (salvo el <a href="http://www.decabeza.net/2008/12/17/nuevo-video-tutorial-swfaddress-2-con-as3/">videotutorial en DeCabeza.net</a>, que me ayudó muchísimo). Además, los ejemplos que hay disponibles para descargar en su sitio web, aparte de estar repetidos, son, en mi opinión, malísimos. Por esta razón me ha parecido conveniente escribir mi propia aportación para gente que esté interesada en <strong>mejorar la indexación de sus webs en Flash</strong> y que tenga pereza de buscar información en inglés o que simplemente necesite una explicación detallada de cómo implementar la librería de manera sencilla.</p>
<p>Para este apunte voy a utilizar <strong>ActionScript 3</strong> (ya hay un <a href="http://blog.unijimpe.net/swfaddress/">ejemplo muy bueno en AS2 en unijimpe</a>), que es el que recomiendo utilizar. Además, necesitaremos también la librería <a href="http://code.google.com/p/swfobject/">SWFObject</a> para incrustar nuestros archivos .swf en el documento HTML. Si lo deseas, puedes descargar ya los archivos que he utilizado para el apunte para poder comprobar cómo quedan los ejemplos:</p>
<p><a class="download" href="http://jlc-productions.net/wp-content/uploads/2009/02/swfaddress.zip"><span>Descargar </span>swfaddress.zip<br />(66,63 KiB)</a></p>

<h3>Introducción: Descargar las librerías SWFAddress y SWFObject</h3>
<p>En primer lugar, dirígete al sitio web de SWFAddress: <a href="http://www.asual.com/swfaddress/">http://www.asual.com/swfaddress/</a>, y haz click en el enlace &#8220;Descargar SWFAddress 2.2&#8243; (esa es la última versión en el momento de escribir esto). El archivo contiene varias carpetas, con montones de ejemplos y documentación además de los archivos en sí, pero nos vamos a dirigir al directorio <code>samples</code> y, dentro de este, al de <code>CS3</code>. Esta carpeta contiene un ejemplo de uso de <strong>SWFAddress en ActionScript 3</strong>, al que puedes echar una ojeada, pero vamos a construir nosotros nuestro propio ejemplo. Para ello, extrae en un mismo directorio las carpetas <code>swfaddress</code> y <code>swfobject</code> y las clases de ActionScript <code>SWFAddress.as</code> y <code>SWFAddressEvent.as</code>. Ahora ya tenemos todo lo necesario para comenzar a trabajar en nuestro mini sitio web en Flash.</p>
<h3>1. Preparar el documento Flash</h3>
<p>Crea un nuevo documento en Flash con ActionScript 3 con las dimensiones y la velocidad de fotogramas por segundo que consideres convenientes, y titúlalo <code>swfaddress_web.fla</code>. Yo he utilizado el tamaño estándar de Flash, 550 px de ancho y 400 px de alto, y 30fps. Ahora vamos a incluir algunos elementos para que nuestra película tenga la pinta de un <em>microsite</em> en Flash. Yo he agregado los siguientes elementos:</p>
<ul>
<li>En una capa, un campo de texto estático con el texto &#8220;SWFAddress fácil con Juanlu&#8221; que hace las veces de título.</li>
<li>En otra, tres botones para la navegación, con el texto &#8220;Inicio&#8221;, &#8220;¿Qué?&#8221; y &#8220;¿Cómo?&#8221;, y los nombres de instancia <code>inicio_bt</code>, <code>que_bt</code> y <code>como_bt</code> respectivamente.</li>
<li>En una tercera, dos campos de texto dinámicos donde cargaremos el contenido.</li>
</ul>
<p>El aspecto de la película en este momento es este:</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="550" height="400">
      <param name="movie" value="http://jlc-productions.net/wp-content/uploads/2009/02/swfaddress_inicio.swf" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://jlc-productions.net/wp-content/uploads/2009/02/swfaddress_inicio.swf" width="550" height="400">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>Ya tenemos preparada nuestra película; vamos ahora a añadirle funcionalidad.</p>
<h3>2. Agregar el código para el manejo de SWFAddress</h3>
<p>Vamos a crear un nuevo documento de ActionScript llamado <code>Document.as</code> y se lo vamos a asignar como clase de documento a nuestra película. Para empezar, escribe las siguientes líneas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">Sprite</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">MouseEvent</span>;
&nbsp;
	<span style="color: #f00;">import</span> SWFAddress;
	<span style="color: #f00;">import</span> SWFAddressEvent;
&nbsp;
	<span style="color: #f00;">public</span> <span style="color: #f00; font-weight: bold;">class</span> Document <span style="color: #f00;">extends</span> <span style="color: #039;">Sprite</span>
	<span style="color: #666; font-weight: bold;">&#123;</span>
		<span style="color: #36c; font-weight: bold;">var</span> webXMLData<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">XML</span>;
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> Document<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Función constructora</span>
		<span style="color: #666; font-weight: bold;">&#125;</span>
	<span style="color: #666; font-weight: bold;">&#125;</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>No tiene ningún misterio. Ahora, vamos a definir en una variable XML el contenido de la web para después cargar la parte que corresponda mediante tres listener que se activen al hacer clic en cada uno de los botones que tenemos en el escenario. Hay que añadir este código a la clase:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #03c; font-weight: bold;">function</span> Document<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Definimos el contenido de la web</span>
	webXMLData =
&nbsp;
			<span style="color: #000; font-weight: bold;">/</span>
&nbsp;
			<span style="color: #000; font-weight: bold;">&lt;!</span><span style="color: #666; font-weight: bold;">&#91;</span>CDATA<span style="color: #666; font-weight: bold;">&#91;</span>Cuando estamos trabajando en una web <span style="color: #f00;">100</span><span style="color: #000; font-weight: bold;">%</span> hecha en Flash, lo que más nos preocupa a los desarrolladores es el <span style="color: #000; font-weight: bold;">&lt;</span>u<span style="color: #000; font-weight: bold;">&gt;</span>SEO<span style="color: #000; font-weight: bold;">&lt;/</span>u<span style="color: #000; font-weight: bold;">&gt;</span>, es decir, que dicha web esté <span style="color: #000; font-weight: bold;">&lt;</span>i<span style="color: #000; font-weight: bold;">&gt;</span>correctamente posicionada en los buscadores<span style="color: #000; font-weight: bold;">&lt;/</span>i<span style="color: #000; font-weight: bold;">&gt;</span>. Para mejorar este aspecto, nos serviremos de una pequeña pero potente librería que cambiará totalmente nuestra filosofía a la hora de enfocar nuestros nuevos proyectos<span style="color: #000; font-weight: bold;">:</span> <span style="color: #000; font-weight: bold;">&lt;</span>b<span style="color: #000; font-weight: bold;">&gt;</span>SWFAddress<span style="color: #000; font-weight: bold;">&lt;/</span>b<span style="color: #000; font-weight: bold;">&gt;</span>, la cual nos permitirá asignar a cada estado de nuestra película una URL distinta.
			<span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #000; font-weight: bold;">&gt;</span>
			<span style="color: #000; font-weight: bold;">&lt;/</span>content<span style="color: #000; font-weight: bold;">&gt;</span>
		<span style="color: #000; font-weight: bold;">&lt;/</span>seccion<span style="color: #000; font-weight: bold;">&gt;</span>
		<span style="color: #000; font-weight: bold;">&lt;</span>seccion<span style="color: #000; font-weight: bold;">&gt;</span>
&nbsp;
			<span style="color: #000; font-weight: bold;">&lt;</span>url<span style="color: #000; font-weight: bold;">&gt;/</span>que<span style="color: #000; font-weight: bold;">/&lt;/</span>url<span style="color: #000; font-weight: bold;">&gt;</span>
			<span style="color: #000; font-weight: bold;">&lt;</span>content<span style="color: #000; font-weight: bold;">&gt;</span>
			<span style="color: #000; font-weight: bold;">&lt;!</span> <span style="color: #666; font-weight: bold;">&#91;</span>CDATA<span style="color: #666; font-weight: bold;">&#91;</span>Qué 			<span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #000; font-weight: bold;">&gt;</span>
			<span style="color: #000; font-weight: bold;">&lt;/</span>content<span style="color: #000; font-weight: bold;">&gt;</span>
		<span style="color: #000; font-weight: bold;">&lt;/</span>seccion<span style="color: #000; font-weight: bold;">&gt;</span>
		<span style="color: #000; font-weight: bold;">&lt;</span>seccion<span style="color: #000; font-weight: bold;">&gt;</span>
&nbsp;
			<span style="color: #000; font-weight: bold;">&lt;</span>url<span style="color: #000; font-weight: bold;">&gt;/</span>como<span style="color: #000; font-weight: bold;">/&lt;/</span>url<span style="color: #000; font-weight: bold;">&gt;</span>
			<span style="color: #000; font-weight: bold;">&lt;</span>content<span style="color: #000; font-weight: bold;">&gt;</span>
			<span style="color: #000; font-weight: bold;">&lt;!</span><span style="color: #666; font-weight: bold;">&#91;</span>CDATA<span style="color: #666; font-weight: bold;">&#91;</span>Cómo 			<span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #000; font-weight: bold;">&gt;</span>
&nbsp;
	;
&nbsp;
	<span style="color: #090; font-style: italic;">// Añadimos los listener</span>
	inicio_bt.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">MouseEvent</span>.<span style="color: #039;">CLICK</span>, mouseHandler<span style="color: #666; font-weight: bold;">&#41;</span>;
	que_bt.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">MouseEvent</span>.<span style="color: #039;">CLICK</span>, mouseHandler<span style="color: #666; font-weight: bold;">&#41;</span>;
	como_bt.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">MouseEvent</span>.<span style="color: #039;">CLICK</span>, mouseHandler<span style="color: #666; font-weight: bold;">&#41;</span>;
<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #03c; font-weight: bold;">function</span> mouseHandler<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">MouseEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Manejo de los botones</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Ahora es cuando viene lo interesante: en la función <code>mouseHandler</code> que acabamos de definir, para no complicarnos más la vida ya podríamos cargar en nuestro campo de texto la sección correspondiente al botón en el que se hizo click, pero con SWFAddress esto no se hace así. Este es el código de la función <code>mouseHandler</code>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #03c; font-weight: bold;">function</span> mouseHandler<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">MouseEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #36c; font-weight: bold;">var</span> _url<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">String</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">String</span><span style="color: #666; font-weight: bold;">&#40;</span>e.<span style="color: #069;">target</span>.<span style="color: #069;">name</span><span style="color: #666; font-weight: bold;">&#41;</span> == <span style="color: #900;">&quot;inicio_bt&quot;</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">?</span> <span style="color: #900;">&quot;/&quot;</span> <span style="color: #000; font-weight: bold;">:</span> <span style="color: #900;">&quot;/&quot;</span> <span style="color: #000; font-weight: bold;">+</span> <span style="color: #039;">String</span><span style="color: #666; font-weight: bold;">&#40;</span>e.<span style="color: #069;">target</span>.<span style="color: #069;">name</span><span style="color: #666; font-weight: bold;">&#41;</span>.<span style="color: #069;">replace</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #900;">&quot;_bt&quot;</span>, <span style="color: #900;">&quot;/&quot;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
	<span style="color: #090; font-style: italic;">// Este código producirá, en función del nombre del botón, esto:</span>
	<span style="color: #090; font-style: italic;">// nombre_bt --&amp;gt; /nombre/</span>
	<span style="color: #090; font-style: italic;">// que será lo que tomemos como &quot;url&quot;</span>
	<span style="color: #090; font-style: italic;">// NOTA: El condicional terciario es para transformar /inicio/ en /, más útil</span>
&nbsp;
	<span style="color: #090; font-style: italic;">// Línea clave</span>
	SWFAddress.setValue<span style="color: #666; font-weight: bold;">&#40;</span>_url<span style="color: #666; font-weight: bold;">&#41;</span>;
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Este es un punto importante en el flujo del programa: aunque si ahora probamos la película no notaremos ningún cambio, le estamos <em>diciendo</em> a la clase SWFAddress que <em>estamos en la URL definida en la variable</em> <code>_url</code>. Ahora escribiremos la función que manejará esos cambios de URL, la pieza central de nuestro apunte:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #03c; font-weight: bold;">function</span> Document<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Añadimos un listener para la función</span>
	SWFAddress.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span>SWFAddressEvent.<span style="color: #039;">CHANGE</span>, onSWFAddressChange<span style="color: #666; font-weight: bold;">&#41;</span>;
	<span style="color: #090; font-style: italic;">// El valor al inicio es /</span>
&nbsp;
	<span style="color: #090; font-style: italic;">// [...]</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #03c; font-weight: bold;">function</span> onSWFAddressChange<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span>SWFAddressEvent<span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// URL actual</span>
	<span style="color: #36c; font-weight: bold;">var</span> _url<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">String</span> = e.<span style="color: #069;">value</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Almacenamos en una variable XMLList la sección actual</span>
	<span style="color: #36c; font-weight: bold;">var</span> seccion<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">XMLList</span> = webXMLData.seccion.<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">url</span> == _url<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
	<span style="color: #069;">trace</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #900;">&quot;SWFAddress value: &quot;</span> <span style="color: #000; font-weight: bold;">+</span> _url<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Cargamos el contenido</span>
	contenido.<span style="color: #069;">htmlText</span> = seccion.<span style="color: #069;">content</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Cambiamos el título</span>
	titulo.<span style="color: #069;">text</span> = seccion.title;
	SWFAddress.setTitle<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #900;">&quot;SWFAddress Fácil - &quot;</span> <span style="color: #000; font-weight: bold;">+</span> seccion.title<span style="color: #666; font-weight: bold;">&#41;</span>;
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>El código de la clase <code>Document</code> queda ahora así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">Sprite</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">MouseEvent</span>;
&nbsp;
	<span style="color: #f00;">import</span> SWFAddress;
	<span style="color: #f00;">import</span> SWFAddressEvent;
&nbsp;
	<span style="color: #f00;">public</span> <span style="color: #f00; font-weight: bold;">class</span> Document <span style="color: #f00;">extends</span> <span style="color: #039;">Sprite</span>
	<span style="color: #666; font-weight: bold;">&#123;</span>
		<span style="color: #36c; font-weight: bold;">var</span> webXMLData<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">XML</span>;
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> Document<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Añadimos un listener para la función</span>
			SWFAddress.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span>SWFAddressEvent.<span style="color: #039;">CHANGE</span>, onSWFAddressChange<span style="color: #666; font-weight: bold;">&#41;</span>;
			<span style="color: #090; font-style: italic;">// El valor al inicio es /</span>
&nbsp;
			<span style="color: #090; font-style: italic;">// Definimos el contenido de la web</span>
			webXMLData =
&nbsp;
					<span style="color: #000; font-weight: bold;">/</span>
&nbsp;
					<span style="color: #000; font-weight: bold;">&lt;</span>span style=<span style="color: #900;">&quot;text-decoration: underline;&quot;</span><span style="color: #000; font-weight: bold;">&gt;</span>SEO<span style="color: #000; font-weight: bold;">&lt;/</span>span<span style="color: #000; font-weight: bold;">&gt;</span>, es decir, que dicha web esté <span style="color: #000; font-weight: bold;">&lt;</span>em<span style="color: #000; font-weight: bold;">&gt;</span>correctamente posicionada en los buscadores<span style="color: #000; font-weight: bold;">&lt;/</span>em<span style="color: #000; font-weight: bold;">&gt;</span>. Para mejorar este aspecto, nos serviremos de una pequeña pero potente librería que cambiará totalmente nuestra filosofía a la hora de enfocar nuestros nuevos proyectos<span style="color: #000; font-weight: bold;">:</span> <span style="color: #000; font-weight: bold;">&lt;</span>strong<span style="color: #000; font-weight: bold;">&gt;</span>SWFAddress<span style="color: #000; font-weight: bold;">&lt;/</span>strong<span style="color: #000; font-weight: bold;">&gt;</span>, la cual nos permitirá asignar a cada estado de nuestra película una URL distinta.
					<span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #666; font-weight: bold;">&#93;</span><span style="color: #000; font-weight: bold;">&amp;</span>gt;
&nbsp;
					<span style="color: #000; font-weight: bold;">/</span>que<span style="color: #000; font-weight: bold;">/</span>
&nbsp;
					<span style="color: #000; font-weight: bold;">/</span>como<span style="color: #000; font-weight: bold;">/</span>
&nbsp;
			;
&nbsp;
			<span style="color: #090; font-style: italic;">// Añadimos los listener</span>
			inicio_bt.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">MouseEvent</span>.<span style="color: #039;">CLICK</span>, mouseHandler<span style="color: #666; font-weight: bold;">&#41;</span>;
			que_bt.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">MouseEvent</span>.<span style="color: #039;">CLICK</span>, mouseHandler<span style="color: #666; font-weight: bold;">&#41;</span>;
			como_bt.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">MouseEvent</span>.<span style="color: #039;">CLICK</span>, mouseHandler<span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> onSWFAddressChange<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span>SWFAddressEvent<span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// URL actual</span>
			<span style="color: #36c; font-weight: bold;">var</span> _url<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">String</span> = e.<span style="color: #069;">value</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Almacenamos en una variable XMLList la sección actual</span>
			<span style="color: #36c; font-weight: bold;">var</span> seccion<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">XMLList</span> = webXMLData.seccion.<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">url</span> == _url<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #069;">trace</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #900;">&quot;SWFAddress value: &quot;</span> <span style="color: #000; font-weight: bold;">+</span> _url<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Cargamos el contenido</span>
			contenido.<span style="color: #069;">htmlText</span> = seccion.<span style="color: #069;">content</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Cambiamos el título</span>
			titulo.<span style="color: #069;">text</span> = seccion.title;
			SWFAddress.setTitle<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #900;">&quot;SWFAddress Fácil - &quot;</span> <span style="color: #000; font-weight: bold;">+</span> seccion.title<span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> mouseHandler<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">MouseEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #36c; font-weight: bold;">var</span> _url<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">String</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">String</span><span style="color: #666; font-weight: bold;">&#40;</span>e.<span style="color: #069;">target</span>.<span style="color: #069;">name</span><span style="color: #666; font-weight: bold;">&#41;</span> == <span style="color: #900;">&quot;inicio_bt&quot;</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">?</span> <span style="color: #900;">&quot;/&quot;</span> <span style="color: #000; font-weight: bold;">:</span> <span style="color: #900;">&quot;/&quot;</span> <span style="color: #000; font-weight: bold;">+</span> <span style="color: #039;">String</span><span style="color: #666; font-weight: bold;">&#40;</span>e.<span style="color: #069;">target</span>.<span style="color: #069;">name</span><span style="color: #666; font-weight: bold;">&#41;</span>.<span style="color: #069;">replace</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #900;">&quot;_bt&quot;</span>, <span style="color: #900;">&quot;/&quot;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
			<span style="color: #090; font-style: italic;">// Este código producirá, en función del nombre del botón, esto:</span>
			<span style="color: #090; font-style: italic;">// nombre_bt --&amp;gt; /nombre/</span>
			<span style="color: #090; font-style: italic;">// que será lo que tomemos como &quot;url&quot;</span>
			<span style="color: #090; font-style: italic;">// NOTA: El condicional terciario es para transformar /inicio/ en /, más útil</span>
&nbsp;
			<span style="color: #090; font-style: italic;">// Línea clave</span>
			SWFAddress.setValue<span style="color: #666; font-weight: bold;">&#40;</span>_url<span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
	<span style="color: #666; font-weight: bold;">&#125;</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Ahora sí: si probamos nuestra película, podemos ver cómo el texto de las secciones cambia al hacer clic en cada uno de los botones:</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_1" width="550" height="400">
      <param name="movie" value="http://jlc-productions.net/wp-content/uploads/2009/02/swfaddress_web.swf" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://jlc-productions.net/wp-content/uploads/2009/02/swfaddress_web.swf" width="550" height="400">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>Pero la magia no acaba aquí: la gracia está en que queremos que funcione como una página web. Para eso necesitamos, como no podía ser de otra manera, un documento HTML.</p>
<h3>3. Final: el documento HTML</h3>
<p>Ahora, para finalizar, vamos a crear el documento HTML en el que insertaremos la película. En un nuevo archivo llamado <code>index.htm</code> escribe este código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #666; font-style: italic;">&lt;!-- Importamos las dos librerías necesarias --&gt;</span>
<span style="color: #090;">&lt;<span style="color: #000; font-weight: bold;">script</span> <span style="color: #006;">src</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;swfobject/swfobject.js&quot;</span> <span style="color: #006;">type</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;text/javascript&quot;</span>&gt;</span><span style="color: #666; font-style: italic;">&lt;!--mce:0--&gt;</span><span style="color: #090;">&lt;<span style="color: #6c6;">/</span><span style="color: #000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #090;">&lt;<span style="color: #000; font-weight: bold;">script</span> <span style="color: #006;">src</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;swfaddress/swfaddress.js&quot;</span> <span style="color: #006;">type</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;text/javascript&quot;</span>&gt;</span><span style="color: #666; font-style: italic;">&lt;!--mce:1--&gt;</span><span style="color: #090;">&lt;<span style="color: #6c6;">/</span><span style="color: #000; font-weight: bold;">script</span>&gt;</span>
&nbsp;
<span style="color: #666; font-style: italic;">&lt;!-- Insertamos el contenido Flash --&gt;</span>
<span style="color: #090;">&lt;<span style="color: #000; font-weight: bold;">script</span> <span style="color: #006;">type</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;text/javascript&quot;</span>&gt;</span><span style="color: #666; font-style: italic;">&lt;!--mce:2--&gt;</span><span style="color: #090;">&lt;<span style="color: #6c6;">/</span><span style="color: #000; font-weight: bold;">script</span>&gt;</span>
<span style="color: #090;">&lt;<span style="color: #000; font-weight: bold;">div</span> <span style="color: #006;">id</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;flashcontent&quot;</span> <span style="color: #006;">style</span><span style="color: #6c6;">=</span><span style="color: #f00;">&quot;margin: 0 auto&quot;</span>&gt;</span>
&nbsp;
<span style="color: #090;">&lt;<span style="color: #000; font-weight: bold;">strong</span>&gt;</span>Necesitas Flash Player. <span style="color: #090;">&lt;<span style="color: #6c6;">/</span><span style="color: #000; font-weight: bold;">strong</span>&gt;&lt;<span style="color: #6c6;">/</span><span style="color: #000; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Y ya hemos terminado nuestro ejemplo. Para comprobar las posibilidades de SWFAddress, sigue el siguiente enlace:</p>
<p><a href="http://jlc-productions.net/jlc/apuntes/swfaddress/">Ver ejemplo terminado de SWFAddress en Flash</a></p>
<p>Ahora puedes comprobar que, cuando haces clic en las diferentes secciones, además de variar el contenido varía la URL y el título de la página. Esas distintas URL funcionan como una dirección de internet normal: por ejemplo, las puedes agregar a favoritos y acceder siempre que quieras a <em>esa parte de la web</em> que te interesa. Y por si fuera poco, se pueden emplear los botones atrás y adelante del navegador, algo a lo que los usuarios están muy acostumbrados y que agradecerán enormemente al visitar tu sitio.</p>
<p>Aquí tienes los archivos que he utilizado disponibles para descargar:</p>
<p><a class="download" href="http://jlc-productions.net/wp-content/uploads/2009/02/swfaddress.zip"><span>Descargar </span>swfaddress.zip<br />(66,63 KiB)</a></p>

<p>Te animo a que los utilices y a que, si te he ayudado, puntúes este apunte o <a href="#respond">escribas un comentario</a>. No olvides <a href="http://jlc-productions.net/suscribirse/">suscribirte a mi blog por correo</a> o <a href="http://jlc-productions.net/feed/">vía RSS</a> si quieres tener noticias sobre mi actividad <img src='http://jlc-productions.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>¡Muchas gracias!</p>


<p>Related posts:<ol><li><a href='http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/' rel='bookmark' title='Permanent Link: Precarga en ActionScript 3'>Precarga en ActionScript 3</a></li>
<li><a href='http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/' rel='bookmark' title='Permanent Link: Precarga en Flash aparece a la mitad'>Precarga en Flash aparece a la mitad</a></li>
<li><a href='http://jlc-productions.net/blog/2008/06/bienvenidos-a-jlc-productions/' rel='bookmark' title='Permanent Link: Bienvenidos a JLC Productions'>Bienvenidos a JLC Productions</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Precarga en ActionScript 3</title>
		<link>http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/</link>
		<comments>http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 21:15:02 +0000</pubDate>
		<dc:creator>Juanlu001</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[POO]]></category>
		<category><![CDATA[precarga]]></category>

		<guid isPermaLink="false">http://jlc-productions.net/?p=595</guid>
		<description><![CDATA[En este apunte voy a tratar diversas maneras para precargar una película Flash en ActionScript 3, desde la más sencilla a una que podamos extender y reutilizar en todos nuestros proyectos. A día de hoy, si eres uno de mis lectores habituales seguramente no te interese lo más mínimo . Si has llegado aquí buscando [...]


Related posts:<ol><li><a href='http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/' rel='bookmark' title='Permanent Link: Precarga en Flash aparece a la mitad'>Precarga en Flash aparece a la mitad</a></li>
<li><a href='http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/' rel='bookmark' title='Permanent Link: Deep linking en Flash con SWFAddress'>Deep linking en Flash con SWFAddress</a></li>
<li><a href='http://jlc-productions.net/portfolio/websites/2009/03/centro-medico-betasalud/' rel='bookmark' title='Permanent Link: Centro Médico Betasalud'>Centro Médico Betasalud</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>En este apunte voy a tratar diversas maneras para <strong>precargar una película Flash en ActionScript 3</strong>, desde la más sencilla a una que podamos extender y reutilizar en todos nuestros proyectos. A día de hoy, si eres uno de mis lectores habituales seguramente no te interese lo más mínimo <img src='http://jlc-productions.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  . Si has llegado aquí buscando lo que el título indica, ¡adelante! <span id="more-595"></span></p>
<p>Yo usaré para este apunte la versión CS4 de <a href="http://www.adobe.com/es/products/flash/">Adobe Flash</a>, pero puedes emplear también la versión CS3. Todos los documentos y archivos que creemos tendrán que tener como versión del lenguaje, obviamente, AS3. Para este apunte necesitaremos tres archivos .fla, todos ellos con la misma estructura. Los tres tendrán dos fotogramas clave: en el segundo colocaremos una imagen para poder simular la precarga más un comando <code>stop();</code> que detenga la película al final, y en el primero colocaremos las acciones que correspondan a cada uno de los tres casos. Puedes descargar ahora los archivos que he utilizado en el apunte:</p>
<p><a class="download" href="http://jlc-productions.net/wp-content/uploads/2009/01/precarga_as3.zip"><span>Descargar </span>precarga_as3.zip<br />(2,24 MiB)</a></p>

<p>Recuerda que para probar la película como si se estuviera descargando, tienes que pulsar Ctrl + Intro dos veces, o bien ir a <strong>Control -&gt; Probar película</strong> y después <strong>Ver -&gt; Simular descarga</strong>. En <strong>Ver -&gt; Configuración de descarga</strong> se puede ajustar la velocidad.</p>
<p>Primero vamos a hacer una pequeña introducción para comprender el sistema de carga de archivos de ActionScript 3.</p>
<h3>Introducción. Sistema de carga de archivos en AS3; objeto LoaderInfo</h3>
<p>Tal y como podemos leer en la <a href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/LoaderInfo.html">documentación de Adobe Flash sobre la clase LoaderInfo</a>, esta proporciona información sobre un archivo SWF cargado o un archivo de imagen cargado (JPEG, GIF o PNG), como por ejemplo los bytes cargados y por cargar o la URL del archivo, y distribuye una serie de eventos específicos relacionados con la carga y descarga de archivos. Atendamos ahora al diagrama extraído de la misma página:</p>
<p><a href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/LoaderInfo.html"><img class="aligncenter" title="Objetos LoaderInfo" src="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/images/loaderInfo_object.jpg" alt="" width="407" height="318" /></a></p>
<p>Si prescindimos de los objetos Loader, que no nos interesan para este apunte, observamos que podemos acceder a la información de la carga de la <em>instancia de la clase principal del archivo SWF</em> mediante su propiedad loaderInfo (que, mucha atención, no pertenece a Stage). En cuanto a los eventos de esta clase, nos interesan especialmente dos:</p>
<ul>
<li>El evento <a href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/LoaderInfo.html#event:progress">progress</a>, que se distribuirá durante la carga del archivo.</li>
<li>El evento <a href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/LoaderInfo.html#event:complete">complete</a>, que se distribuirá cuando la carga del archivo haya finalizado.</li>
</ul>
<p>Además, emplearemos las dos propiedades especiales del evento <a href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/events/ProgressEvent.html">ProgressEvent</a>: bytesLoaded y bytesTotal, que creo que no necesitan explicación.</p>
<p>Así pues, la sintaxis que seguiremos será la siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span>evento.TIPO, funcionPersonalizada<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
<span style="color: #03c; font-weight: bold;">function</span> funcionPersonalizada<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span>evento<span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// ...</span>
	<span style="color: #090; font-style: italic;">// e.bytesLoaded son los bytes cargados</span>
	<span style="color: #090; font-style: italic;">// e.bytesTotal son los bytes totales</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Y dicho esto, vamos a empezar con nuestro primer ejemplo.</p>
<h3>1. Precarga básica en la línea de tiempo</h3>
<p>Esta es la manera más rápida y más directa de precargar una película: escribiendo unas pocas líneas de código en la línea de tiempo. Si lo que quieres es una aplicación puntual y no te interesa complicarte la vida, este es tu método. Comienza por crear un documento vacío y guárdalo con el nombre <code>precarga_timeline.fla</code>. Lleva al fotograma 2 alguna imagen que pese bastante (un tamaño cercano a 1 <a href="http://es.wikipedia.org/wiki/Prefijo_binario#Est.C3.A1ndar_IEEE">MiB</a> será suficiente, tampoco te pases), y acuérdate de poner un <code>stop();</code>. Ahora escribe en el fotograma 1, como hemos convenido, el siguiente código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #090; font-style: italic;">// Importamos los paquetes necesarios</span>
<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">ProgressEvent</span>;
<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">Event</span>;
<span style="color: #f00;">import</span> <span style="color: #03c;">flash.text</span>.<span style="color: #039;">TextField</span>;
&nbsp;
<span style="color: #090; font-style: italic;">// Declaramos las variables</span>
<span style="color: #36c; font-weight: bold;">var</span> cargado<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
<span style="color: #36c; font-weight: bold;">var</span> total<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
<span style="color: #36c; font-weight: bold;">var</span> porcentaje<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
&nbsp;
<span style="color: #090; font-style: italic;">// Detener la película al empezar</span>
<span style="color: #069;">stop</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
<span style="color: #090; font-style: italic;">// Creamos un nuevo campo de texto</span>
<span style="color: #36c; font-weight: bold;">var</span> tf<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">TextField</span> = <span style="color: #f00;">new</span> <span style="color: #039;">TextField</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
tf.<span style="color: #069;">text</span> = <span style="color: #900;">&quot;0% Cargado&quot;</span>;
tf.<span style="color: #069;">x</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">stage</span>.<span style="color: #069;">stageWidth</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">-</span> <span style="color: #666; font-weight: bold;">&#40;</span>tf.<span style="color: #069;">width</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Centrado horizontal</span>
tf.<span style="color: #069;">y</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">stage</span>.<span style="color: #069;">stageHeight</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">-</span> <span style="color: #666; font-weight: bold;">&#40;</span>tf.<span style="color: #069;">height</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Centrado vertical</span>
<span style="color: #069;">addChild</span><span style="color: #666; font-weight: bold;">&#40;</span>tf<span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Y lo añadimos al escenario</span>
&nbsp;
<span style="color: #090; font-style: italic;">// Función para el comportamiento durante la carga</span>
<span style="color: #03c; font-weight: bold;">function</span> onLoadProgress<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">ProgressEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	cargado = e.<span style="color: #069;">bytesLoaded</span>;
	total = e.<span style="color: #069;">bytesTotal</span>;
	porcentaje = <span style="color: #039;">Math</span>.<span style="color: #069;">round</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#40;</span>cargado <span style="color: #000; font-weight: bold;">/</span> total<span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">*</span> <span style="color: #f00;">100</span><span style="color: #666; font-weight: bold;">&#41;</span>;
	tf.<span style="color: #069;">text</span> = porcentaje <span style="color: #000; font-weight: bold;">+</span> <span style="color: #900;">&quot;% Cargado&quot;</span>;
<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #090; font-style: italic;">// Función para el comportamiento al finalizar la carga</span>
<span style="color: #03c; font-weight: bold;">function</span> onLoadComplete<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Event</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Eliminamos los listener</span>
	<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">removeEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">ProgressEvent</span>.<span style="color: #039;">PROGRESS</span>, onLoadProgress<span style="color: #666; font-weight: bold;">&#41;</span>;
	<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">removeEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">Event</span>.<span style="color: #039;">COMPLETE</span>, onLoadComplete<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Eliminamos el campo de texto</span>
	<span style="color: #069;">removeChild</span><span style="color: #666; font-weight: bold;">&#40;</span>tf<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Que dé comienzo la película</span>
	<span style="color: #069;">play</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #090; font-style: italic;">// Se agregan los listener para las funciones</span>
<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">ProgressEvent</span>.<span style="color: #039;">PROGRESS</span>, onLoadProgress<span style="color: #666; font-weight: bold;">&#41;</span>;
<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">Event</span>.<span style="color: #039;">COMPLETE</span>, onLoadComplete<span style="color: #666; font-weight: bold;">&#41;</span>;</pre></td></tr></table></div>

<p>Los comentarios hablan por sí solos: estas líneas detendrán la película y mostrarán un cuadro de texto en el centro del escenario con el porcentaje cargado hasta el momento de la película. Fácil, ¿no?</p>
<p><a href="http://jlc-productions.net/wp-content/uploads/2009/01/precarga_timeline.swf">Ver ejemplo de <em>Precarga básica en la línea de tiempo</em></a></p>
<p>Como dije, esto es un ejemplo muy sencillo que te sacará de apuros cuando estés a punto de perder el avión y necesites añadir una precarga <em>rápidamente</em>, pero personalmente no me gusta nada porque me condena al <em>copy &amp; paste</em> para siempre. De modo que vamos a ver otra manera:</p>
<h3>2. Precarga básica con la <em>clase de documento</em></h3>
<p>Ahora, como buenos programadores en ActionScript 3, vamos a usar una <strong>clase</strong> para nuestro propósito, y la vamos a asignar a nuestro documento para que haga de clase para la <em>instancia del archivo SWF principal</em>. Crea otro documento con el nombre de <code>precarga_dclass.fla</code> (con la misma imagen en el segundo fotograma y su sentencia <code>stop();</code>) y un nuevo <em>archivo ActionScript</em> con el nombre de <code>PrecargaBasica.as</code> y colócalos en el mismo directorio. Al ser una clase de documento, ha de extender de la clase MovieClip de Flash:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Importamos los paquetes necesarios</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">MovieClip</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Declaramos la clase</span>
	<span style="color: #f00;">public</span> <span style="color: #f00; font-weight: bold;">class</span> PrecargaBasica <span style="color: #f00;">extends</span> <span style="color: #039;">MovieClip</span>
	<span style="color: #666; font-weight: bold;">&#123;</span>
		<span style="color: #03c; font-weight: bold;">function</span> PrecargaBasica<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Función constructora; se ejecutará al iniciarse la película</span>
		<span style="color: #666; font-weight: bold;">&#125;</span>
	<span style="color: #666; font-weight: bold;">&#125;</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Ahora, básicamente tendremos que añadir el código que hemos escrito para el primer ejemplo, con algunas modificaciones. Así queda la clase al final:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span>
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Importamos los paquetes necesarios</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">MovieClip</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">ProgressEvent</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">Event</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.text</span>.<span style="color: #039;">TextField</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Declaramos la clase</span>
	<span style="color: #f00;">public</span> <span style="color: #f00; font-weight: bold;">class</span> PrecargaBasica <span style="color: #f00;">extends</span> <span style="color: #039;">MovieClip</span>
	<span style="color: #666; font-weight: bold;">&#123;</span>
		<span style="color: #090; font-style: italic;">// Declaramos las variables</span>
		<span style="color: #f00;">private</span> <span style="color: #36c; font-weight: bold;">var</span> cargado<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
		<span style="color: #f00;">private</span> <span style="color: #36c; font-weight: bold;">var</span> total<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
		<span style="color: #f00;">private</span> <span style="color: #36c; font-weight: bold;">var</span> porcentaje<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">int</span>;
&nbsp;
		<span style="color: #f00;">private</span> <span style="color: #36c; font-weight: bold;">var</span> tf<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">TextField</span>;
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> PrecargaBasica<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Detener la película al empezar</span>
			<span style="color: #069;">stop</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Creamos un nuevo campo de texto</span>
			tf = <span style="color: #f00;">new</span> <span style="color: #039;">TextField</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
			tf.<span style="color: #069;">text</span> = <span style="color: #900;">&quot;0% Cargado&quot;</span>;
			tf.<span style="color: #069;">x</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">stage</span>.<span style="color: #069;">stageWidth</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">-</span> <span style="color: #666; font-weight: bold;">&#40;</span>tf.<span style="color: #069;">width</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Centrado horizontal</span>
			tf.<span style="color: #069;">y</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">stage</span>.<span style="color: #069;">stageHeight</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">-</span> <span style="color: #666; font-weight: bold;">&#40;</span>tf.<span style="color: #069;">height</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Centrado vertical</span>
			<span style="color: #069;">addChild</span><span style="color: #666; font-weight: bold;">&#40;</span>tf<span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Y lo añadimos al escenario</span>
&nbsp;
			<span style="color: #090; font-style: italic;">// Se agregan los listener para las funciones</span>
			<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">ProgressEvent</span>.<span style="color: #039;">PROGRESS</span>, onLoadProgress<span style="color: #666; font-weight: bold;">&#41;</span>;
			<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">Event</span>.<span style="color: #039;">COMPLETE</span>, onLoadComplete<span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #090; font-style: italic;">// Función para el comportamiento durante la carga</span>
		<span style="color: #f00;">private</span> <span style="color: #03c; font-weight: bold;">function</span> onLoadProgress<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">ProgressEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			cargado = e.<span style="color: #069;">bytesLoaded</span>;
			total = e.<span style="color: #069;">bytesTotal</span>;
			porcentaje = <span style="color: #666; font-weight: bold;">&#40;</span>cargado <span style="color: #000; font-weight: bold;">/</span> total<span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">*</span> <span style="color: #f00;">100</span>;
			tf.<span style="color: #069;">text</span> = porcentaje <span style="color: #000; font-weight: bold;">+</span> <span style="color: #900;">&quot;% Cargado&quot;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #090; font-style: italic;">// Función para el comportamiento al finalizar la carga</span>
		<span style="color: #f00;">private</span> <span style="color: #03c; font-weight: bold;">function</span> onLoadComplete<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Event</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Eliminamos los listener</span>
			<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">removeEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">ProgressEvent</span>.<span style="color: #039;">PROGRESS</span>, onLoadProgress<span style="color: #666; font-weight: bold;">&#41;</span>;
			<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">removeEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">Event</span>.<span style="color: #039;">COMPLETE</span>, onLoadComplete<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Eliminamos el campo de texto</span>
			<span style="color: #069;">removeChild</span><span style="color: #666; font-weight: bold;">&#40;</span>tf<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Que dé comienzo la película</span>
			<span style="color: #069;">play</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
	<span style="color: #666; font-weight: bold;">&#125;</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Y esto es todo; tiene la misma funcionalidad que el primer ejemplo. Como veis, esto nos da más posibilidades: simplemente tengo que tener la clase accesible para poder reutilizarla en mis proyectos, asignándoles a cada uno esta clase de documento.</p>
<p><a href="http://jlc-productions.net/wp-content/uploads/2009/01/precarga_dclass.swf">Ver ejemplo de <em>Precarga básica con la clase de documento</em></a></p>
<p>No obstante, y aunque esto contentará a la mayoría, yo <em>todavía</em> tengo algunas pegas:</p>
<ul>
<li>¿Qué pasa si no me interesa que salga un cuadro de texto, sino, por ejemplo, una barra? Tendré que reescribir la clase cada vez que la quiera usar. Yo no llamaría a eso &#8220;reutilizar&#8221;.</li>
<li>¿Qué pasa si yo <em>ya quería usar una clase de documento</em>? Tendré que meter el comportamiento de mi película dentro de la clase PrecargaBasica. Un poco raro, ¿no?</li>
</ul>
<p>Por estas razones, y esta es mi aportación personal para aquellos a quienes les surjan las mismas dudas, vamos a definir un tercer método con el que hacer una clase de precarga <em>reutilizable de verdad</em> (¿acaso no se inventaron las clases para eso?), aprovechando los métodos de herencia de la <a href="http://es.wikipedia.org/wiki/Programación_orientada_a_objetos">programación orientada a objetos</a>.</p>
<h3>3. Precarga personalizada con una clase extensible</h3>
<p>Vamos a repasar los objetivos que queremos lograr a la hora de desarrollar nuestra clase:</p>
<ol>
<li>Independencia de la clase de documento</li>
<li>Mínima cantidad de código para activar la precarga</li>
<li>Clase ampliable</li>
</ol>
<p>Crea otro documento con la misma estructura que los anteriores y llámalo <code>precarga_custom.fla</code>. Copia ahora la clase que hemos desarrollado en el ejemplo 2 en una carpeta llamada <code>precarga</code>, dentro de otra llamada <code>clases</code>, y cámbiale el nombre a <code>PrecargaSuper.fla</code>. Las primeras líneas tienen que quedar ahora así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span> clases.precarga
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Importamos los paquetes necesarios</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">MovieClip</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">ProgressEvent</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">Event</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.text</span>.<span style="color: #039;">TextField</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Declaramos la clase</span>
	<span style="color: #f00;">public</span> <span style="color: #f00; font-weight: bold;">class</span> PrecargaSuper <span style="color: #f00;">extends</span> <span style="color: #039;">MovieClip</span>
	<span style="color: #666; font-weight: bold;">&#123;</span></pre></td></tr></table></div>

<p>No obstante, si ahora mismo creamos una instancia de PrecargaSuper, bien desde la línea de tiempo o desde la nueva clase de documento, para imitar el comportamiento que hemos diseñado en los dos ejemplos anteriores:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00;">import</span> clases.precarga.PrecargaSuper;
&nbsp;
<span style="color: #36c; font-weight: bold;">var</span> precarga<span style="color: #000; font-weight: bold;">:</span>PrecargaSuper = <span style="color: #f00;">new</span> PrecargaSuper<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;</pre></td></tr></table></div>

<p>Vemos que no ocurre nada especial; la película se detiene, sí, pero no aparece ningún cuadro de texto. Esto es así porque todas las propiedades y métodos estaban referidos a <code>this</code> (que se omitía) al ser la clase del documento, pero esto ya no sirve si no es así. De modo que tenemos dos opciones: o añadir la instancia de PrecargaSuper al escenario, o pasarle <em>el escenario</em> como parámetro al constructor. Creo que habéis adivinado que esta última me gusta mucho:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00;">import</span> clases.precarga.PrecargaSuper;
&nbsp;
<span style="color: #36c; font-weight: bold;">var</span> precarga<span style="color: #000; font-weight: bold;">:</span>PrecargaSuper = <span style="color: #f00;">new</span> PrecargaSuper<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #f00;">this</span><span style="color: #666; font-weight: bold;">&#41;</span>;</pre></td></tr></table></div>

<p>Y ahora haremos algunas modificaciones a la clase. En primer lugar, ya no hace falta que extienda de MovieClip, ya que no la vamos a añadir al escenario; en segundo, habrá que especificar un parámetro del tipo DisplayObjectContainer en la función constructora; y en tercero, habrá que referir todas las propiedades y métodos a la propiedad <em>root</em> de ese parámetro. Además, para cumplir el tercero de nuestros objetivos (hacer que la clase sea ampliable), vamos a hacer un par de modificaciones más en PrecargaSuper: vamos a quitar todo el comportamiento complementario y vamos a hacerla extensible, cambiando los <code>private</code> por <code>protected</code>. Después de lo dicho este debería ser el aspecto de la clase:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span> clases.precarga
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Importamos los paquetes necesarios</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">MovieClip</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">ProgressEvent</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">Event</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Declaramos la clase</span>
	<span style="color: #f00;">public</span> <span style="color: #f00; font-weight: bold;">class</span> PrecargaSuper
	<span style="color: #666; font-weight: bold;">&#123;</span>
		<span style="color: #090; font-style: italic;">// Declaramos las variables</span>
		<span style="color: #f00;">protected</span> <span style="color: #36c; font-weight: bold;">var</span> <span style="color: #069;">target</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">MovieClip</span>;
&nbsp;
		<span style="color: #f00;">protected</span> <span style="color: #36c; font-weight: bold;">var</span> cargado<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
		<span style="color: #f00;">protected</span> <span style="color: #36c; font-weight: bold;">var</span> total<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Number</span>;
		<span style="color: #f00;">protected</span> <span style="color: #36c; font-weight: bold;">var</span> porcentaje<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">int</span>;
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> PrecargaSuper<span style="color: #666; font-weight: bold;">&#40;</span>_target<span style="color: #000; font-weight: bold;">:*</span><span style="color: #666; font-weight: bold;">&#41;</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Se asigna a la propiedad target de la instancia la referida en la</span>
			<span style="color: #090; font-style: italic;">// función constructora</span>
			<span style="color: #069;">target</span> = _target.<span style="color: #069;">root</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Detener la película al empezar</span>
			<span style="color: #069;">target</span>.<span style="color: #069;">stop</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Se agregan los listener para las funciones</span>
			<span style="color: #069;">target</span>.<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">ProgressEvent</span>.<span style="color: #039;">PROGRESS</span>, onLoadProgress<span style="color: #666; font-weight: bold;">&#41;</span>;
			<span style="color: #069;">target</span>.<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">addEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">Event</span>.<span style="color: #039;">COMPLETE</span>, onLoadComplete<span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #090; font-style: italic;">// Función para el comportamiento durante la carga</span>
		<span style="color: #f00;">protected</span> <span style="color: #03c; font-weight: bold;">function</span> onLoadProgress<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">ProgressEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			cargado = e.<span style="color: #069;">bytesLoaded</span>;
			total = e.<span style="color: #069;">bytesTotal</span>;
			porcentaje = <span style="color: #666; font-weight: bold;">&#40;</span>cargado <span style="color: #000; font-weight: bold;">/</span> total<span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">*</span> <span style="color: #f00;">100</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #090; font-style: italic;">// Función para el comportamiento al finalizar la carga</span>
		<span style="color: #f00;">protected</span> <span style="color: #03c; font-weight: bold;">function</span> onLoadComplete<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Event</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Eliminamos los listener</span>
			<span style="color: #069;">target</span>.<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">removeEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">ProgressEvent</span>.<span style="color: #039;">PROGRESS</span>, onLoadProgress<span style="color: #666; font-weight: bold;">&#41;</span>;
			<span style="color: #069;">target</span>.<span style="color: #069;">loaderInfo</span>.<span style="color: #069;">removeEventListener</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #039;">Event</span>.<span style="color: #039;">COMPLETE</span>, onLoadComplete<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Que dé comienzo la película</span>
			<span style="color: #069;">target</span>.<span style="color: #069;">play</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
	<span style="color: #666; font-weight: bold;">&#125;</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Ahora la clase PrecargaSuper se limita a parar la película al principio, asignar valores a las variables <code>cargado</code>, <code>total</code> y <code>porcentaje</code> y reanudar la reproducción cuando finaliza la carga. Y ahora es cuando viene lo interesante: vamos a hacer una clase llamada <code>Precarga</code> que extienda de PrecargaSuper y que añada el ya famoso cuadro de texto, empleando la palabra clave <code>override</code> para sustituir los métodos de la clase padre y <code>super</code> para invocarlos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00; font-weight: bold;">package</span> clases.precarga
<span style="color: #666; font-weight: bold;">&#123;</span>
	<span style="color: #090; font-style: italic;">// Importamos los paquetes necesarios</span>
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.display</span>.<span style="color: #039;">MovieClip</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">ProgressEvent</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.events</span>.<span style="color: #039;">Event</span>;
	<span style="color: #f00;">import</span> <span style="color: #03c;">flash.text</span>.<span style="color: #039;">TextField</span>;
&nbsp;
	<span style="color: #090; font-style: italic;">// Declaramos la clase</span>
	<span style="color: #f00;">public</span> <span style="color: #f00;">final</span> <span style="color: #f00; font-weight: bold;">class</span> Precarga <span style="color: #f00;">extends</span> PrecargaSuper
	<span style="color: #666; font-weight: bold;">&#123;</span>
		<span style="color: #090; font-style: italic;">// Declaramos las variables</span>
		<span style="color: #36c; font-weight: bold;">var</span> tf<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">TextField</span>;
&nbsp;
		<span style="color: #03c; font-weight: bold;">function</span> Precarga<span style="color: #666; font-weight: bold;">&#40;</span>_target<span style="color: #000; font-weight: bold;">:*</span><span style="color: #666; font-weight: bold;">&#41;</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #f00;">super</span><span style="color: #666; font-weight: bold;">&#40;</span>_target<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #090; font-style: italic;">// Creamos un nuevo campo de texto</span>
			tf = <span style="color: #f00;">new</span> <span style="color: #039;">TextField</span><span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #666; font-weight: bold;">&#41;</span>;
			tf.<span style="color: #069;">text</span> = <span style="color: #900;">&quot;0% Cargado&quot;</span>;
			tf.<span style="color: #069;">x</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">target</span>.<span style="color: #069;">stage</span>.<span style="color: #069;">stageWidth</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">-</span> <span style="color: #666; font-weight: bold;">&#40;</span>tf.<span style="color: #069;">width</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Centrado horizontal</span>
			tf.<span style="color: #069;">y</span> = <span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #069;">target</span>.<span style="color: #069;">stage</span>.<span style="color: #069;">stageHeight</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span> <span style="color: #000; font-weight: bold;">-</span> <span style="color: #666; font-weight: bold;">&#40;</span>tf.<span style="color: #069;">height</span> <span style="color: #000; font-weight: bold;">/</span> <span style="color: #f00;">2</span><span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Centrado vertical</span>
			<span style="color: #069;">target</span>.<span style="color: #069;">addChild</span><span style="color: #666; font-weight: bold;">&#40;</span>tf<span style="color: #666; font-weight: bold;">&#41;</span>; <span style="color: #090; font-style: italic;">// Y lo añadimos al escenario</span>
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #090; font-style: italic;">// Función para el comportamiento durante la carga</span>
		<span style="color: #f00;">override</span> <span style="color: #f00;">protected</span> <span style="color: #03c; font-weight: bold;">function</span> onLoadProgress<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">ProgressEvent</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #f00;">super</span>.onLoadProgress<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			tf.<span style="color: #069;">text</span> = porcentaje <span style="color: #000; font-weight: bold;">+</span> <span style="color: #900;">&quot;% Cargado&quot;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
&nbsp;
		<span style="color: #090; font-style: italic;">// Función para el comportamiento al finalizar la carga</span>
		<span style="color: #f00;">override</span> <span style="color: #f00;">protected</span> <span style="color: #03c; font-weight: bold;">function</span> onLoadComplete<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #000; font-weight: bold;">:</span><span style="color: #039;">Event</span><span style="color: #666; font-weight: bold;">&#41;</span><span style="color: #000; font-weight: bold;">:</span><span style="color: #f00;">void</span>
		<span style="color: #666; font-weight: bold;">&#123;</span>
			<span style="color: #090; font-style: italic;">// Eliminamos el campo de texto</span>
			<span style="color: #069;">target</span>.<span style="color: #069;">removeChild</span><span style="color: #666; font-weight: bold;">&#40;</span>tf<span style="color: #666; font-weight: bold;">&#41;</span>;
&nbsp;
			<span style="color: #f00;">super</span>.onLoadComplete<span style="color: #666; font-weight: bold;">&#40;</span>e<span style="color: #666; font-weight: bold;">&#41;</span>;
		<span style="color: #666; font-weight: bold;">&#125;</span>
	<span style="color: #666; font-weight: bold;">&#125;</span>
<span style="color: #666; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Y después de cambiar tres palabras en nuestra película:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #f00;">import</span> clases.precarga.<span style="color: #000; font-weight: bold;">*</span>;
&nbsp;
<span style="color: #36c; font-weight: bold;">var</span> precarga<span style="color: #000; font-weight: bold;">:</span>Precarga = <span style="color: #f00;">new</span> Precarga<span style="color: #666; font-weight: bold;">&#40;</span><span style="color: #f00;">this</span><span style="color: #666; font-weight: bold;">&#41;</span>;</pre></td></tr></table></div>

<p>&#8230;ya hemos llegado al final de nuestro ejemplo: tenemos una clase, <code>PrecargaSuper</code>, con el comportamiento básico de la carga y que <em>realmente</em> podremos <strong>extender en cada uno de nuestros proyectos</strong>; y una clase <code>Precarga</code>, que <strong>implementa ese comportamiento básico</strong> y además <strong>añade funciones nuevas</strong>: en este caso mostrar un cuadro de texto, pero puede ser una barra, el típico círculo&#8230; Depende de tu creatividad <img src='http://jlc-productions.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  , tan sólo tienes que seguir el modelo que hemos escrito usando <code>super.funcionPadre(parámetros);</code> en cada uno de los métodos.</p>
<p><a href="http://jlc-productions.net/wp-content/uploads/2009/01/precarga_custom.swf">Ver ejemplo de <em>Precarga personalizada con una clase extensible</em></a></p>
<p>Y hasta aquí hemos llegado con nuestros ejemplos de <strong>cómo hacer una precarga con ActionScript 3</strong>. Espero que te sean muy útiles; siéntete libre de descargar ahora los archivos que yo he utilizado y de adaptarlos a tu gusto y no dudes en poner tus <a href="#respond">comentarios y sugerencias</a>.</p>
<p><a class="download" href="http://jlc-productions.net/wp-content/uploads/2009/01/precarga_as3.zip"><span>Descargar </span>precarga_as3.zip<br />(2,24 MiB)</a></p>

<p>Así mismo, no olvides <a href="http://jlc-productions.net/suscribirse/">suscribirte a mi blog por correo</a> o a mi <a href="http://jlc-productions.net/feed/">feed RSS</a> si quieres estar al día sobre las novedades en <a href="http://jlc-productions.net/">JLC Productions</a>. ¡Muchísimas gracias!</p>
<p><em><ins datetime="2009-01-17T14:30:49+00:00"><strong>Actualización</strong></ins>: Archivos .fla actualizados para poder ser abiertos con Flash CS3</em><br />
<em><ins datetime="2009-01-21T19:26:36+00:00"><strong>Actualización 2</strong></ins>: Error corregido que impedía usar una clase de documento con PrecargaSuper (<a href="http://jlc-productions.net/apuntes/2009/01/precarga-en-actionscript-3/#comment-116">gracias a AndyX®</a>)</em><br />
<em><ins datetime="2009-03-24T22:55:20+00:00"><strong>Actualización 3</strong></ins>: En este apunte se trata el problema de la <a href="http://jlc-productions.net/apuntes/2009/03/precarga-en-flash-aparece-a-la-mitad/">precarga que empieza a medias</a></em><br />
<em><ins datetime="2009-08-04T12:04:03+00:00"><strong>Actualización 4</strong></ins>: Corregido error en el ejemplo básico <a href="http://jlc-productions.net/apuntes/2009/01/precarga-en-actionscript-3/#comment-526">gracias a Pedro Antonio</a></em></p>


<p>Related posts:<ol><li><a href='http://jlc-productions.net/apuntes/as3/2009/03/precarga-en-flash-aparece-a-la-mitad/' rel='bookmark' title='Permanent Link: Precarga en Flash aparece a la mitad'>Precarga en Flash aparece a la mitad</a></li>
<li><a href='http://jlc-productions.net/apuntes/as3/2009/02/deep-linking-en-flash-con-swfaddress/' rel='bookmark' title='Permanent Link: Deep linking en Flash con SWFAddress'>Deep linking en Flash con SWFAddress</a></li>
<li><a href='http://jlc-productions.net/portfolio/websites/2009/03/centro-medico-betasalud/' rel='bookmark' title='Permanent Link: Centro Médico Betasalud'>Centro Médico Betasalud</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://jlc-productions.net/apuntes/as3/2009/01/precarga-en-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
