<?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"
	>

<channel>
	<title>xinterface</title>
	<atom:link href="http://www.xinterface.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xinterface.net</link>
	<description>actionScript love...</description>
	<pubDate>Sun, 27 Jul 2008 22:59:41 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>ScreenCast: Combinando FlashCS3 y FlexBuilder en un mismo proyecto</title>
		<link>http://www.xinterface.net/2008/07/27/screencast-combinando-flashcs3-y-flexbuilder-en-un-mismo-proyecto/</link>
		<comments>http://www.xinterface.net/2008/07/27/screencast-combinando-flashcs3-y-flexbuilder-en-un-mismo-proyecto/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 22:50:07 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Varios]]></category>

		<category><![CDATA[classpath]]></category>

		<category><![CDATA[FlashCS3]]></category>

		<category><![CDATA[flex project]]></category>

		<category><![CDATA[FlexBuilder]]></category>

		<category><![CDATA[Papervision3D]]></category>

		<category><![CDATA[screencast]]></category>

		<category><![CDATA[swc]]></category>

		<category><![CDATA[swf]]></category>

		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=111</guid>
		<description><![CDATA[Me comentaba un amigo que tenía problemas a la hora de utitilizar en FlashCS3, el código que estaba usando en FlexBuilder, y por eso he hecho un video tutorial explicando como crear y organizar el mismo proyecto con los dos IDE´s. Se muestra como compilar con FlexBuilder, así como utilizar FlexBuilder solo para la edición [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-69" style="float: left;" title="icon024" src="http://www.xinterface.net/wp-content/uploads/2008/05/icon024.jpg" alt="" width="128" height="128" />Me comentaba un amigo que tenía problemas a la hora de utitilizar en FlashCS3, el código que estaba usando en FlexBuilder, y por eso he hecho un video tutorial explicando como crear y organizar el mismo proyecto con los dos IDE´s. Se muestra como compilar con FlexBuilder, así como utilizar FlexBuilder solo para la edición de código, dejando la tarea de compilar para Flash CS3.</p>
<p>Los puntos tratados son los siguientes:</p>
<ul>
<li>Estructura de directorios para un proyecto ActionScript con FlexBuilder y FlashCS3</li>
<li> Creación del proyecto, propiedades y classpath</li>
<li> Main class (FlexBuilder) y Document class (Flash CS3)</li>
<li> Diferencias básicas a la hora de compilar</li>
<li> Propiedades de documento</li>
<li> Alineación del Stage</li>
<li> Uso de librerías de símbolos<span id="more-111"></span></li>
</ul>
<div class="vvqbox vvqflv" style="width:500px;height:420px;">
<p id="vvq48abc6a477a7f"><a href="http://www.xinterface.net/wp-content/plugins/vipers-video-quicktags/resources/flvplayer.swf?file=http%3A%2F%2Fwww.xinterface.net%2Fmedia%2Fcs3FlexBuilder.flv">http://www.xinterface.net/media/cs3FlexBuilder.flv</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/27/screencast-combinando-flashcs3-y-flexbuilder-en-un-mismo-proyecto/feed/</wfw:commentRss>
		</item>
		<item>
		<title>¿Qué es Flex, qué es FlexBuilder y qué tienen que ver con Flash?</title>
		<link>http://www.xinterface.net/2008/07/25/%c2%bfque-es-flex-que-es-flexbuilder-y-que-tienen-que-ver-con-flash/</link>
		<comments>http://www.xinterface.net/2008/07/25/%c2%bfque-es-flex-que-es-flexbuilder-y-que-tienen-que-ver-con-flash/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 11:09:20 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[debug]]></category>

		<category><![CDATA[debugger]]></category>

		<category><![CDATA[Document Class]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[Eclipse FDT]]></category>

		<category><![CDATA[fdt]]></category>

		<category><![CDATA[FlashCS3]]></category>

		<category><![CDATA[FlashDevelop]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[Flex framework]]></category>

		<category><![CDATA[FlexBuilder]]></category>

		<category><![CDATA[memory profiling]]></category>

		<category><![CDATA[OOP]]></category>

		<category><![CDATA[POO]]></category>

		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=110</guid>
		<description><![CDATA[En una larga charla con Juan Muro, sobre los diferentes hábitos de hacer las cosas en lo que se refiere a proyectos ActionScript, llegamos a la conclusión de que muchos flasheros no dan el salto a utilizar otro editor de código que no sea FlashCS3, y mucho menos a compilar (publicar), por desconocimiento, poca información [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/flashflex.jpg"><img class="alignleft size-full wp-image-78" style="float: left;" title="flashflex" src="http://www.xinterface.net/wp-content/uploads/2008/05/flashflex.jpg" alt="" width="220" height="161" /></a>En una larga charla con <a href="http://juanmuro.com/" target="_blank">Juan Muro</a>, sobre los diferentes hábitos de hacer las cosas en lo que se refiere a proyectos ActionScript, llegamos a la conclusión de que muchos flasheros no dan el salto a utilizar otro editor de código que no sea FlashCS3, y mucho menos a compilar (publicar), por desconocimiento, poca información clara al respecto y confusión entre conceptos tales como Flex, FlexBuilder, Eclipse, FDT, classpath, swc, y diversos términos relacionados con la programación orientada a objetos (POO), etc.</p>
<p>La razón es sencilla. Estamos arraigados a Flash hasta la médula, y nos cuesta cambiar nuestras maneras, que buenas o malas, siempre nos han funcionado.</p>
<p>Con este post me gustaría aclarar dudas que se plantean a cualquier flashero con poca o mediana experiencia a la hora de afrontar un PROYECTO ACTIONSCRIPT con otra cosa que no sea FlashCS3.<span id="more-110"></span></p>
<p><strong>¿Qué es FlashCS3?</strong></p>
<p>Eso ya lo sabemos todos, pero básicamente es una herramienta que nos permite generar una aplicación en formato swf, en la que podemos diseñar, crear símbolos gráficos, incrustar o cargar imágenes, videos, sonidos, tipografías, etc, e interactuar con ellos mediante código ActionScript. Es una herramienta completa y para muchos tiene todo lo necesario para desarrollar. Con ella podemos también dibujar, crear efectos y diseñar. Trabaja en formato vectorial, pero además nos permite generar contenidos multimedia.<br />
Nunca nos han hecho falta herramientas externas para desarrollar un proyecto. Flash nos daba todo lo esencial. Podemos escribir código y almacenar todos los símbolos gráficos necesarios dentro de un solo .fla, publicamos y ya tenemos nuestra web, juego, cd multimedia (o vete tú a saber) funcionando.<br />
Lo que quiero decir con todo esto, es que es una forma válida de hacer las cosas aunque existan otras &#8220;distintas&#8221; (por llamarlo de alguna manera).</p>
<p><strong>¿Qué es Flex, qué es FlexBuilder y qué tienen que ver con Flash?</strong></p>
<p>Existe mucha confusión a la hora de hablar de Flex, o editar código con Flex. A ver, lo primero de todo: Flex no es FlexBuilder, y muchas veces cuando se habla de Flex, en realidad se refieren a FlexBuilder, pero como tiene incluida la palabra &#8220;Flex&#8221; la gente se equivoca.</p>
<p>Flex es simplemente un <a href="http://es.wikipedia.org/wiki/Framework" target="_blank">FRAMEWORK</a> orientado al desarrollo de RIA´S. Hablando en plata, es una &#8220;herramienta&#8221; que nos da la facilidad de desarrollar ciertos tipo de cosas, en concreto las RIAS. ¿Qué es una RIA? ya estás tardando en leer <a href="http://es.wikipedia.org/wiki/Rich_Internet_Application" target="_blank">este artículo de wikipedia</a> que lo explica genial. Hagamos lo que hagamos con Flex, al final lo que generamos es lo mismo que Flash, un archivo SWF con nuestra aplicación. Por lo tanto Flex solo es una manera de desarrollar Flash y ambos no son cosas distintas, todo es plataforma Flash.</p>
<p>Flex se basa en componentes que implementan mucha funcionalidad básica y avanzada. Funcionalidad necesaria para cualquier aplicación, y que nos costaría muchas horas desarrollar con Flash. Ya que en Flash, a parte de sus componentes, lo tenemos que hacer todo a mano, es mucho más &#8220;artesano&#8221;. Por poner algún ejemplo, estamos hablando de sistemas de navegación, posicionamiento en pantalla, diseños líquidos, deep linking, validación de formularios, comunicación con bases de datos, Flash remoting, servicios web, y un largo etcétera que Flash no incorpora por defecto.<br />
Y en difinitiva es eso, una ayuda para desarrollar, que también tiene sus limitaciones. En Flex no se diseña ni se dibuja, ni se anima en línea de tiempo. Por eso los diseñadores están lejos de usarlo. Pero si alguna vez has tenido que programar un proyecto medianamente grande, seguro que entenderás perfectamente las ventajas que comento.<br />
Para dejar algo &#8220;bonito&#8221; en Flex se usan métodos como el skineado de componentes, adjuntar hojas de estilo CSS, etc. Nos da menos libertad para crear efectos visuales, pero nos facilita la vida en otros sentidos. Además, dentro de una aplicación Flex podemos incrustar cualquier cosa hecha con Flash. Desde assets gráficos hasta aplicaciones enteritas.</p>
<p>No se trata de si debemos utilizar Flex o Flash, sino de qué es lo mejor para el proyecto que acaba de caer en nuestras manos. No hay un método universal y creo que nunca lo habrá. Pero eso ya es un debate muy famoso, y cada uno que forme sus propias opiones al respecto. Yo tengo la mía.</p>
<p>Para crear una aplicación Flex solo son necesarias dos cosas:</p>
<ol>
<li>código fuente (ActionScript)</li>
<li>un compilador (mxmlc), que interpreta el código y genera el archivo binario SWF ( lo mismo que hace Flash al publicar)</li>
</ol>
<p>Aunque solo con esas dos cosas suelen trabajar los muy frikis, ya que funciona a través de línea de comandos (sí, la pantallita negra con código matrix). Lo más sencillo es usar una herramienta que haga transparente ese proceso&#8230;</p>
<p>Y ahora toca hablar de FlexBuilder, que simplemente es herramienta para desarrollar Flash, propiedad de Adobe, con varias utilidades muy interesantes y que está basado en <a href="http://www.eclipse.org/" target="_blank">Eclipse</a>, (un IDE de desarrollo).</p>
<p>FlexBuilder facilita la vida a la hora de programar, nos da pistas sobre el código, y muchas veces lo genera automáticamente con atajos de teclado y otras artimañas varias.<br />
Con él podemos crear aplicaciones basadas en el framework de Flex del que hablábamos antes, o aplicaciones Flash basadas en simple ActionScript de toda la vida (solo AS3 por cierto). Hay que tener muy en cuénta estos dos conceptos, porque son dos cosas distintas. En el lado que nos toca, hablaré solo de la segunda.</p>
<p>Con FlashCS3 podemos escribir código en el panel de ActionScript incorporado, u organizar nuestro código en clases externas al .fla, en forma de archivos .as.<br />
Si en el panel de propiedades especificamos la &#8220;Document Class&#8221;, al publicar, Flash leerá e interpretará todo el código de dicha clase y sus dependencias. Se puede combinar código de las clases con código en línea de tiempo, u optar por utilizar solo una de las dos. Normalmente, en una aplicación totalmente orientada a objetos, en la linea de tiempo hay  poco código, y se suele referir a acciones básicas (esto es discutible, lo se).</p>
<p>El editor de código de FlashCS3 es lo más inutil y frustrante que puedas usar, ya que es poco intuitivo, y está exento (casi) de cualquier tipo de ayuda si no te sabes todo de memoria (métodos y propiedades de objetos, etc). Por eso muchos optan por usas editores externos para el código. Existen varios, como por ejemplo Eclipse FDT, Flash develop, FlexBuilder, TextMate, etc. Y sí, incluyo FlexBuilder.</p>
<p>Podemos usar FlexBuilder (o cualquiera de los citados) para programar un proyecto ActionScript, y después compilar con FlashCS3, es perfectamente viable. Para ello solo hay que crear un proyecto con las clases que FlashCS3 usa para publicar, en concreto la &#8220;Document Class&#8221;. De esa manera hacemos las cosas como siempre, tenemos línea de tiempo, una librería con todos los símbolos que nos de la gana, podemos hacer fuegos artificiales&#8230; y por fuera tenemos un editor de código que nos ayuda muchísimo en la tarea de programar.</p>
<p>Por otro lado, podemos &#8220;deshacernos&#8221; de FlashCS3 en la tarea de compilar o publicar. ¿Cómo? Pues por ejemplo en FlexBuilder, nos basta con especificar la tan nombrada &#8220;Document Class&#8221; o &#8220;clase de aplicación&#8221;. Y entonces al compilar el proyecto ocurriría lo mismo, todo empezaría a funcionar a través de esa clase y sus dependencias.</p>
<p><strong>¿Cuál es la diferencia entre FlexBuilder (o similares) y FlashCS3?</strong></p>
<p>Esto puede llegar a ser muy discutible y muy subjetivo, pero las diferencias más importantes según mi opinión son las siguientes:</p>
<p>FlashCS3: tenemos disponible y &#8220;visible&#8221; la librería sin necesidad de hacer el pino puente.<br />
FlexBuilder: no hay librería visible incorporada y que  podamos manejar, pero sí <a href="http://www.xinterface.net/2008/05/27/como-usar-la-libreria-de-flash-con-flex-builder/" target="_blank">podemos crear una librería con Flash y usarla desde FlexBuilder</a>.<a href="http://www.xinterface.net/2008/05/27/como-usar-la-libreria-de-flash-con-flex-builder/" target="_blank"> </a></p>
<p><span style="color: #339966;">FlashCS3</span>: Podemos diseñar y dibujar como nos plazca, para crear símbolos y elementos gráficos animados en línea de tiempo.<br />
<span style="color: #ff6600;"> FlexBuilder</span>: Dependemos de Flash para dicha tarea. Si queremos animar sin depender de Flash tendrá que ser por código.</p>
<p><span style="color: #ff0000;">FlashCS3</span>: dependemos de un .fla o varios para nuestro desarrollo<br />
<span style="color: #339966;"> FlexBuilder:</span> no necesitamos en principio un .fla, a no ser vayamos a generar librerías de símbolos en formato swf o swc</p>
<p><span style="color: #ff0000;">FlashCS3</span>: Los archivos .fla a veces se corrompen, se estropean, o dan errores sin sentido al compilar (lo he sufrido mucho en mis carnes)<br />
<span style="color: #339966;"> FlexBuilder</span>:No sule haber problemas al compilar.</p>
<p><span style="color: #ff6600;">FlashCS3</span>: Compilamos y se genera el swf resultante o una plantilla html básica.<br />
<span style="color: #339966;"> FlexBuilder</span>: Además de generar un html más completo, podemos configurar el programa para que despues de compilar, abra una url en concreto, cosa muy útil cuando trabajamos con aplicaciones de datos que se comunican con un servidor o cargan archivos externos, ya que siempre estaremos viendo un &#8220;caso real&#8221; y evitando sorpresas relacionadas con el sandbox al llevar el proyecto a producción.</p>
<p><span style="color: #ff0000;">FlashCS3</span>: Desde un .fla solo podemos linkar una &#8220;Document Class&#8221;<br />
<span style="color: #339966;"> FlexBuilder</span>:En  un mismo proyecto podemos tener tanas aplicaciones como queramos. Cada una genera un swf diferente.</p>
<p><span style="color: #ff0000;">FlashCS3</span>: está muy limitado si queremos extender su funcionalidad.<br />
<span style="color: #339966;"> FlexBuilder</span>: existen varios plugins de terceras partes como por ejemplo CVS, Subclipse (subversion), editor de snippets, etc, que nos ayudarán en la mecánica de trabajo.</p>
<p><span style="color: #339966;">FlashCS3</span>: podemos programar en procedural sin programación orientada a objetos<br />
<span style="color: #339966;"> FlexBuilder:</span> debemos seguir una estructura orientada a objetos</p>
<p><span style="color: #ff0000;">FlashCS3</span>: La depuración (debug) en FlashCS3 deja mucho que desear<br />
<span style="color: #339966;"> FlexBuilder</span>: La depuración es bastante avanzada y además tenemos &#8220;memory profiling&#8221; o gestión de memoria. Podremos saber en tiempo de ejecución, cuántas instancias de cada objeto existen, y cuál es su peso. Esto es muy útil para optimizar nuestra aplicación, y ver por dónde puede estar fallando el rendimiento.</p>
<p><strong>¿Por qué utilizar FlexBuilder y no otro editor como FDT o FlashDevelop?</strong></p>
<p>Pues eso ya es cuestión de cada uno. Personalmente creo que como editor de código, FlexBuilder deja mucho que desear frente a Eclipse FDT que es muchísimo más potente (solo le falta programar solo), y FlashDevelop que también lo es.<br />
Pero FlexBuilder es más sencillo de aprender, de configurar y según instalas está listo para trabajar con AS3. En otros editores hay varios pasos previos antes de poder compilar.</p>
<p><a href="http://fdt.powerflasher.com/" target="_blank">FDT</a>, aunque es mi editor favorito, y creo que la herramienta más potente que existe ahora mismo, en la versión más avanzada, es bastante más caro (712.81 € al día de hoy), contra los <span class="price"><a href="https://store2.adobe.com/cfusion/store/html/index.cfm?store=OLS-ES&amp;event=displayProduct&amp;categoryPath=/Applications/FlexBuilderStandard&amp;distributionMethod=FULL" target="_blank">207,64 € que vale FlexBuilder</a>.<br />
En cambio <a href="http://www.flashdevelop.org/community/" target="_blank">FlashDevelop</a> es gratis, cosa muy a tener en cuenta a la hora de decidirse. (Se requiere .NET framework para poder utilizarlo)</span></p>
<p>Seguro que me he dejado mucha información importante, pero creo que la idea queda clara. Todo lo que he contado se basa en las experiencias reales que he tenido, más allá de lo que se pueda leer en las webs de sus autores.</p>
<p>Espero vuestros comentarios<br />
Un saludo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/25/%c2%bfque-es-flex-que-es-flexbuilder-y-que-tienen-que-ver-con-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AS3. Liberar la memoria de recursos cargados externamente es un infierno</title>
		<link>http://www.xinterface.net/2008/07/22/as3-liberar-la-memoria-de-recursos-cargados-externamente-es-un-infierno/</link>
		<comments>http://www.xinterface.net/2008/07/22/as3-liberar-la-memoria-de-recursos-cargados-externamente-es-un-infierno/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 23:40:11 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[as2]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[Garbage Collector]]></category>

		<category><![CDATA[gestión de memoria]]></category>

		<category><![CDATA[loader]]></category>

		<category><![CDATA[MovieClip.unloadMovie()]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=109</guid>
		<description><![CDATA[Nos encontramos con una aplicación de tantas en la que debemos cargar contenidos externos por demanda del usuarío: una galería de fotos, un catálogo de productos, etc, etc.
Vamos cargando esas imágenes o swf´s en nuestra aplicación y todo es muy bonito y fabuloso&#8230; hasta que algo empieza a fallar, se ralentiza o simplemente deja de [...]]]></description>
			<content:encoded><![CDATA[<p>Nos encontramos con una aplicación de tantas en la que debemos cargar contenidos externos por demanda del usuarío: una galería de fotos, un catálogo de productos, etc, etc.</p>
<p>Vamos cargando esas imágenes o swf´s en nuestra aplicación y todo es muy bonito y fabuloso&#8230; hasta que algo empieza a fallar, se ralentiza o simplemente deja de funcionar. !Mierda! mi pc no vale para nada! Lo tiras por la ventana y te compras uno nuevo&#8230; pero a ver, si en mi ordenador que es un pepino, no funciona, los clientes lo van a flipar más aún.</p>
<p>Fuera de bromas, todo esto pasa porque lo que vamos cargando se almacena en memoria, y cuando hacemos desaparecer un contenido, no lo estamos aniquilando debidamente.<br />
Resulta que el típico <strong><span>MovieClip.unloadMovie() </span></strong>de AS2 ha desaparecido en el olvido. Ese método se cargaba cualquier cosa que hubiera cargado externamente, liberando así la memoria y haciéndonos más felices y contentos. En cambio, en AS3 la cosa se complica mucho. Según leo en el <a href="http://www.gskinner.com/blog/archives/2008/04/failure_to_unlo.html" target="_blank">blog de gSkinner</a>, éstos son los motivos del problema, y por los cuáles sería imposible &#8220;descargar&#8221; algo:</p>
<ul>
<li>Cualquier listener, timer, o variable que haga referencia al contenido cargado</li>
<li>Un contenido cargado con la línea de tiempo reproduciéndose</li>
<li>Un contenido cargado con algún listener que se refiera al stage, o a cualquier cosa fuera de su ámbito</li>
</ul>
<p>Y creo que no podría explicarlo mejor que gskinner en este párrafo:</p>
<p><span style="color: #808080;"><em>&#8220;<span>In AS3, calling Loader.unload() simply removes the reference to the loaded movie. If any other references exist to the loaded content, it will not be unloaded. Even when all references are removed, it only frees the content for collection by the garbage collector at some indeterminate point in the future. This means that even if everything worked as expected the loaded content will continue to execute, and remain in memory for an indeterminate amount of time after you unload it. This is problematic in many ways, but it is made worse by a bug in the player.</span>&#8220;</em></span></p>
<p>Parece mentira que a estas alturas con un señor Flash Player 9 y el tan supuestamente mejorado y todo poderoso ActionScript 3.0, nos encontremos con que la gestión de memoria es lo más decadente que nos podamos echar encima.</p>
<p>Aunque no todo es feo y negativo. Por lo visto <a href="http://www.gskinner.com/blog/archives/2008/07/additional_info.html" target="_blank">con Flash Player 10 está medio resuelto el problema</a>, y esperemos que este player se extienda rápido para poder producir con él.</p>
<p><a href="http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html" target="_blank">Otro buen artículo sobre gestión de recursos, tambien de Grant Skinner</a>.</p>
<p>Ala! a disfrutar con Adobe</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/22/as3-liberar-la-memoria-de-recursos-cargados-externamente-es-un-infierno/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ArgumentError: Error #2015: Objeto BitmapData no válido</title>
		<link>http://www.xinterface.net/2008/07/21/argumenterror-error-2015-objeto-bitmapdata-no-valido/</link>
		<comments>http://www.xinterface.net/2008/07/21/argumenterror-error-2015-objeto-bitmapdata-no-valido/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 22:43:53 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[BitmapData]]></category>

		<category><![CDATA[Error #2015]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=108</guid>
		<description><![CDATA[Estaba tratando de manejar crear un bitmapdata para reflejar una imagen que había cargado externamente cuando me saltó este error:
ArgumentError: Error #2015: Objeto BitmapData no válido
Despues de mirar en la ayuda de Flash, vi que podía ser por por dos razones:

Estamos intentando crear un BitmapData con un ancho o alto que no es un valor [...]]]></description>
			<content:encoded><![CDATA[<p>Estaba tratando de manejar crear un bitmapdata para reflejar una imagen que había cargado externamente cuando me saltó este error:</p>
<p><strong><span style="color: #ff0000;">ArgumentError: Error #2015: Objeto BitmapData no válido</span></strong></p>
<p>Despues de mirar en la ayuda de Flash, vi que podía ser por por dos razones:</p>
<ol>
<li>Estamos intentando crear un BitmapData con un ancho o alto que no es un valor numérico válido (esto suele pasar si lo creamos a partir de una imagen que hemos intentado cargar externamente pero que no se ha cargado bien)</li>
<li>Estamos intentado crear un BitmapData demasiado grande (el límite tanto para el ancho como para el alto son 2880 pixeles).  Para esto podemos hacer un simple control de errores</li>
</ol>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>loquesea.<span style="color: #0066CC;">width</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">2880</span> <span style="color: #66cc66;">||</span> loquesea.<span style="color: #0066CC;">height</span> <span style="color: #66cc66;">&gt;</span> <span style="color: #cc66cc;">2880</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Error</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;La imagen supera los 2880 pixeles permitidos para BitmapData&quot;</span><span style="color: #66cc66;">&#41;</span>;
	<span style="color: #b1b100;">return</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Un saludo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/21/argumenterror-error-2015-objeto-bitmapdata-no-valido/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PV3D: DebugCamera3D, interactuando con teclado y ratón</title>
		<link>http://www.xinterface.net/2008/07/21/pv3d-debugcamera3d-interactuando-con-teclado-y-raton/</link>
		<comments>http://www.xinterface.net/2008/07/21/pv3d-debugcamera3d-interactuando-con-teclado-y-raton/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 17:27:37 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[Papervision3D]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[DebugCamera3D]]></category>

		<category><![CDATA[far plane]]></category>

		<category><![CDATA[fov]]></category>

		<category><![CDATA[frustum culling]]></category>

		<category><![CDATA[near plane]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=106</guid>
		<description><![CDATA[Acabo de hacer una prueba con esta clase y me ha parecido de lo más útil. Hace poco hice una clase similar por no saber que existía (creo que por entonces no existía). Es una cámara que usamos en lugar de &#8220;Camera3D&#8221;, que nos da total control sobre ella, mediante movimientos de ratón (pinchar y [...]]]></description>
			<content:encoded><![CDATA[<p>Acabo de hacer una prueba con esta clase y me ha parecido de lo más útil. Hace poco hice una clase similar por no saber que existía (creo que por entonces no existía). Es una cámara que usamos en lugar de &#8220;Camera3D&#8221;, que nos da total control sobre ella, mediante movimientos de ratón (pinchar y arrastrar) y mediante el teclado.</p>
<p>Me parece idónea para movernos por la escena y explorarla desde todas las vistas posibles cuando estamos desarrollando con Papervision3D.  Además podemos explorar en tiempo real, propiedades muy importantes como &#8220;fov&#8221;, &#8220;near plane&#8221; y &#8220;far plane&#8221; para el manejo del frustum culling (la explicación de todo esto vendrá en nuevo post), lo que nos evitará tener que cambiar y probar con numeritos &#8220;mágicos&#8221; tropecientas veces hasta que los objetos se vean como queremos.</p>
<p>La clase se encuentra en el mismo package de las cámaras (org.papervision3d.cameras).<br />
Si no la encuentras hazle un &#8220;update&#8221; a tu repositorio, que lo más seguro es que tengas una versión desactualizada.</p>
<p>Aquí va una prueba sencilla de lo que estoy contando:<span id="more-106"></span><br />
(en modo fullscreen no funciona el teclado, <a href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000352.html" target="_blank">no es culpa mía, sino de Adobe</a>)</p>

<object	type="application/x-shockwave-flash"
			data="http://www.xinterface.net/as/samples/papervision3D/DebugCamera3DTest.swf"
			width="550"
			height="400">
	<param name="movie" value="http://www.xinterface.net/as/samples/papervision3D/DebugCamera3DTest.swf" />
	<param name=allowFullScreen" value="true" />
</object>
<p><a href="http://www.xinterface.net/as/samples/papervision3D/DebugCamera3DTest.as" target="_blank">Source</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/21/pv3d-debugcamera3d-interactuando-con-teclado-y-raton/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Papervision3D, primeros pasos (3): Primitivas (objects.primitives)</title>
		<link>http://www.xinterface.net/2008/07/16/papervision3d-primeros-pasos-3-primitivas-objectsprimitives/</link>
		<comments>http://www.xinterface.net/2008/07/16/papervision3d-primeros-pasos-3-primitivas-objectsprimitives/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 23:02:34 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Papervision3D]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[ItemButton]]></category>

		<category><![CDATA[Primitives]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=86</guid>
		<description><![CDATA[Basándonos en el ejemplo anterior de cómo crear una aplicación mediante el &#8220;BasicView&#8221;, vamos a utilizar todas las primitivas de Papervision3D (package objects.primitives).
De momento usaremos solamente un material, el WireframeMaterial, ya que el uso de materiales se detallará debídamente en otro post.
Aunque no es una primitiva tambien usaremos la clase UCS (objects.special), que no es [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xinterface.net/wp-content/uploads/2008/07/primitives.gif"><img class="alignleft size-full wp-image-102" style="float: left; margin-left: 10px; margin-right: 10px;" title="primitives" src="http://www.xinterface.net/wp-content/uploads/2008/07/primitives.gif" alt="" width="250" height="174" /></a>Basándonos en el <a href="http://www.xinterface.net/2008/07/15/papervision3d-primeros-pasos-2-basicview/" target="_blank">ejemplo anterior de cómo crear una aplicación mediante el &#8220;BasicView&#8221;</a>, vamos a utilizar todas las primitivas de Papervision3D (package objects.primitives).</p>
<p>De momento usaremos solamente un material, el WireframeMaterial, ya que el uso de materiales se detallará debídamente en otro post.</p>
<p>Aunque no es una primitiva tambien usaremos la clase UCS (objects.special), que no es sino un eje de coordenadas 3D visibles formadas por líneas (core.geom.Lines3D), que nos pueden ser muy útiles en algunos casos.</p>
<p>También aprovecho para implementar un movimiento de cámara con tweenings, de una primitiva a otra, y una navegación mediante  botones fuera de la escena de Papervision, que servirán para navegar. Los botones son de la clase &#8220;ItemButton&#8221;, de los cuáles podéis ver la referencia en <a href="http://www.xinterface.net/2008/07/11/as3-clase-boton/" target="_blank">este post</a>, aunque lógicamente sirve cualquiera.<span id="more-86"></span></p>

<object	type="application/x-shockwave-flash"
			data="http://www.xinterface.net/wp-content/uploads/2008/07/primitives.swf"
			width="500"
			height="350">
	<param name="movie" value="http://www.xinterface.net/wp-content/uploads/2008/07/primitives.swf" />
</object>
<p>Los botones hacen uso de un asset que se encuentra en un swc linkado al proyecto ActionScript de FlexBuilder.</p>
<p>Si esto te suena a chino, puedes leer <a href="http://www.xinterface.net/2008/05/27/como-usar-la-libreria-de-flash-con-flex-builder/" target="_blank">este post</a>.</p>
<p>Si solo quieres echar un vistazo, aquí tienes la clase <a href="http://www.xinterface.net/as/samples/papervision3D/Primitives.as" target="_blank">Primitives.as<br />
</a> Para descargar todos los archivos: <a href="http://www.xinterface.net/wp-content/uploads/2008/07/sampleprimitives.zip">SamplePrimitives.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/16/papervision3d-primeros-pasos-3-primitivas-objectsprimitives/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Papervision3D, primeros pasos (2): BasicView</title>
		<link>http://www.xinterface.net/2008/07/15/papervision3d-primeros-pasos-2-basicview/</link>
		<comments>http://www.xinterface.net/2008/07/15/papervision3d-primeros-pasos-2-basicview/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 17:56:17 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Papervision3D]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[BasicView]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=87</guid>
		<description><![CDATA[Como bién dice en la documentación de Papervision3D (traduzco), el BasicView es una clase que nos brinda una plantilla para configurar rápidamente un proyecto de Papervision, creando automáticamente un viewport, escena, cámara y renderer (bucle de renderización). Como BasicView es una subclase de Sprite, la podemos añadir a cualquier DisplayObject.
En resumen: te facilita la vida [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/paper.jpg"><img class="alignleft alignnone size-full wp-image-71" style="float: left;" title="paper" src="http://www.xinterface.net/wp-content/uploads/2008/05/paper.jpg" alt="" width="350" height="204" /></a>Como bién dice en la documentación de Papervision3D (traduzco), el BasicView es una clase que nos brinda una plantilla para configurar rápidamente un proyecto de Papervision, creando automáticamente un viewport, escena, cámara y renderer (bucle de renderización). Como BasicView es una subclase de Sprite, la podemos añadir a cualquier DisplayObject.</p>
<p>En resumen: te facilita la vida para proyectos sencillos, evitando instanciar y declarar unas cuantas cosas.<br />
La clase la podéis encontrar dentro del package &#8220;view&#8221; de Papervision3D Great White.</p>
<p>Veamos el mismo ejemplo del post &#8220;<a href="http://www.xinterface.net/2008/05/25/papervision3d-y-flex-builder-primeros-pasos/" target="_blank">Papervision3D y Flex Builder: Primeros pasos</a>&#8220;, pero ahora usando la clase &#8220;BasicView&#8221;. He quitado todos los comentarios que no vienen al caso para centrarnos en lo importante:<span id="more-87"></span></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #808080; font-style: italic;">/**
 * Author: xleon, http://www.xinterface.net (malandro@gmail.com)
 */</span>
package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
&nbsp;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">materials</span>.<span style="color: #006600;">WireframeMaterial</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">objects</span>.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">Plane</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">view</span>.<span style="color: #006600;">BasicView</span>;
&nbsp;
	<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>frameRate=<span style="color: #ff0000;">&quot;31&quot;</span>, <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;500&quot;</span>, <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;350&quot;</span>, <span style="color: #0066CC;">backgroundColor</span>=<span style="color: #ff0000;">&quot;0xffffff&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BasicViewSample <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> bView:BasicView;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> BasicViewSample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			Init3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> Init3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// Creamos el BasicView que contiene viewport, camera, renderer, etc</span>
			bView = <span style="color: #000000; font-weight: bold;">new</span> BasicView<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">350</span>, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// añadimos la vista al displayList</span>
			addChild<span style="color: #66cc66;">&#40;</span>bView<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// Configuramos la cámara:</span>
			bView.<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">focus</span> = <span style="color: #cc66cc;">25</span>;
            bView.<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">zoom</span> = <span style="color: #cc66cc;">10</span>;
            bView.<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span> = <span style="color: #cc66cc;">-500</span>;
            bView.<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">300</span>;
            bView.<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span> = <span style="color: #cc66cc;">0</span>;
&nbsp;
			CreateObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, Loop3D<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> CreateObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> mat:WireframeMaterial = <span style="color: #000000; font-weight: bold;">new</span> WireframeMaterial;
			mat.<span style="color: #006600;">doubleSided</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
			<span style="color: #000000; font-weight: bold;">var</span> plane:Plane = <span style="color: #000000; font-weight: bold;">new</span> Plane<span style="color: #66cc66;">&#40;</span>mat, <span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">8</span>, <span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span>;
			plane.<span style="color: #006600;">rotationX</span> = <span style="color: #cc66cc;">-90</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// lo añadimos a la escena del BasicView.</span>
			bView.<span style="color: #006600;">scene</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">//camera.target = plane;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> Loop3D<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> radio:uint = <span style="color: #cc66cc;">500</span>;
			<span style="color: #000000; font-weight: bold;">var</span> angulo:<span style="color: #0066CC;">Number</span> = mouseX + <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageWidth</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			Camera3D<span style="color: #66cc66;">&#40;</span>bView.<span style="color: #0066CC;">camera</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">x</span> = radio <span style="color: #66cc66;">*</span> <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">cos</span><span style="color: #66cc66;">&#40;</span>angulo <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;
			Camera3D<span style="color: #66cc66;">&#40;</span>bView.<span style="color: #0066CC;">camera</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">z</span> = radio <span style="color: #66cc66;">*</span> <span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">sin</span><span style="color: #66cc66;">&#40;</span>angulo <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>;
			Camera3D<span style="color: #66cc66;">&#40;</span>bView.<span style="color: #0066CC;">camera</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">y</span> = - mouseY + <span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">stage</span>.<span style="color: #006600;">stageHeight</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #cc66cc;">100</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// llamamos al método de renderizado del BasicView:</span>
			bView.<span style="color: #006600;">singleRender</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>El resultado es el mismo pero con menos código =)</p>
<p>Descargar la clase aquí: <a href="http://www.xinterface.net/as/samples/papervision3D/BasicViewSample.as" target="_blank">BasicViewSample.as</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/15/papervision3d-primeros-pasos-2-basicview/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CacheManager. Caché y control de datos con AS3</title>
		<link>http://www.xinterface.net/2008/07/15/cachemanager-cache-y-control-de-datos-con-as3/</link>
		<comments>http://www.xinterface.net/2008/07/15/cachemanager-cache-y-control-de-datos-con-as3/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 12:32:21 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[as3]]></category>

		<category><![CDATA[CacheManager]]></category>

		<category><![CDATA[class]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=85</guid>
		<description><![CDATA[Esta clase es un simple controlador de caché. Un array que almacena datos cargados. Si nuestra aplicación carga datos bajo demanda, por ejemplo de una base de datos, tal vez queramos almacenar los datos en una caché interna, de manera que solo hará falta una petición al servidor para mostrar el mismo dato o consulta.
Ejemplo:
Tenemos [...]]]></description>
			<content:encoded><![CDATA[<p>Esta clase es un simple controlador de caché. Un array que almacena datos cargados. Si nuestra aplicación carga datos bajo demanda, por ejemplo de una base de datos, tal vez queramos almacenar los datos en una caché interna, de manera que solo hará falta una petición al servidor para mostrar el mismo dato o consulta.</p>
<p>Ejemplo:</p>
<p>Tenemos un catálogo de productos, el usuario pincha un botón del producto con &#8220;id=x&#8221;<br />
Hacemos una consulta a la base de datos que nos devuelve todos los datos de ese producto, que parseamos creando un objeto.<br />
El usuario continua navegando por otros contenidos. Acto seguido vuelve a reclamar el producto mostrado anteriormente. ¿Por qué volver a hacer la petición al servidor si previamente podíamos almecenar esa información?</p>
<p>Pues esa situación es la que resuelve esta clase.<br />
Admite cualquier tipo de datos.<span id="more-85"></span></p>
<p>La podéis descargar aquí: <a href="http://www.xinterface.net/as/net/xinterface/managers/CacheManager.as" target="_blank">CacheManager.as</a><br />
Deberéis descargar también esta clase de la que depende CacheManager: <a href="http://www.xinterface.net/as/net/xinterface/utils/ArrayUtils.as" target="_blank">ArrayUtils.as</a></p>
<p>Testeando la clase:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #000000; font-weight: bold;">var</span> cache:CacheManager = <span style="color: #000000; font-weight: bold;">new</span> CacheManager<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Id&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;cache test =====================&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> obj1:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
obj1.<span style="color: #006600;">Id</span> = <span style="color: #cc66cc;">24</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> obj2:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
obj2.<span style="color: #006600;">Id</span> = <span style="color: #cc66cc;">36</span>;
&nbsp;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #0066CC;">Add</span><span style="color: #66cc66;">&#40;</span>obj1<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// true (no existia en caché)</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #0066CC;">Add</span><span style="color: #66cc66;">&#40;</span>obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// true (no existia en caché)</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ejemplo de GetData:&quot;</span>, cache.<span style="color: #006600;">GetData</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">36</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #0066CC;">Add</span><span style="color: #66cc66;">&#40;</span>obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// false (ya existia en caché)</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #006600;">Remove</span><span style="color: #66cc66;">&#40;</span>obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// true (existia en caché y se eliminó)</span>
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #006600;">Remove</span><span style="color: #66cc66;">&#40;</span>obj2<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">// false (no existia en caché y se pudo eliminar)</span>
cache.<span style="color: #006600;">TraceData</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;cache test =====================&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Ejemplo de uso:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript">package
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> net.<span style="color: #006600;">xinterface</span>.<span style="color: #006600;">managers</span>.<span style="color: #006600;">CacheManager</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CacheManagerExample
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> cache:CacheManager;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> CacheManagerExample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// &quot;ref&quot; es la propiedad &quot;ref&quot; de cada objeto almacenado en la caché.</span>
			<span style="color: #808080; font-style: italic;">// es obligatoria y sirve para poder identificar los elementos almacenados</span>
			cache = <span style="color: #000000; font-weight: bold;">new</span> CacheManager<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ref&quot;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> SetProduct<span style="color: #66cc66;">&#40;</span>productRef:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// antes de mostrar un producto comprobamos si ya estaba almacenado en caché</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>cache.<span style="color: #006600;">GetData</span><span style="color: #66cc66;">&#40;</span>productRef<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">!</span>= <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;ya estaba en cache, lo mostramos&quot;</span><span style="color: #66cc66;">&#41;</span>;
				ShowProduct<span style="color: #66cc66;">&#40;</span>cache.<span style="color: #006600;">GetData</span><span style="color: #66cc66;">&#40;</span>productRef<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;no estaba en cache, consultamos la base de datos&quot;</span><span style="color: #66cc66;">&#41;</span>;
				DBQuery<span style="color: #66cc66;">&#40;</span>productRef<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> DBQuery<span style="color: #66cc66;">&#40;</span>productRef:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> prod:<span style="color: #0066CC;">Object</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Object</span>;
			prod.<span style="color: #006600;">ref</span> = productRef;
			<span style="color: #808080; font-style: italic;">// comunicación con el server para recuperar los datos del producto</span>
			<span style="color: #808080; font-style: italic;">// prod.precio = x;</span>
			<span style="color: #808080; font-style: italic;">// prod.localizacion = x;</span>
			<span style="color: #808080; font-style: italic;">// prod.loquesea = x;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// Añadimos el producto a la caché:</span>
			cache.<span style="color: #0066CC;">Add</span><span style="color: #66cc66;">&#40;</span>prod<span style="color: #66cc66;">&#41;</span>;
			ShowProduct<span style="color: #66cc66;">&#40;</span>prod<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ShowProduct<span style="color: #66cc66;">&#40;</span>product:<span style="color: #0066CC;">Object</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// acciones para mostrar el producto...</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/15/cachemanager-cache-y-control-de-datos-con-as3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Porque no sólo de webs vive Flash&#8230;</title>
		<link>http://www.xinterface.net/2008/07/14/porque-no-solo-de-webs-vive-flash/</link>
		<comments>http://www.xinterface.net/2008/07/14/porque-no-solo-de-webs-vive-flash/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 20:15:46 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
		
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=84</guid>
		<description><![CDATA[Estaba yo paseando por Times Square hace poco, cuando mirando todas las &#8216;publicidades&#8217; que inundan el citado lugar, me encuentro con que en muchas había un cartelito debajo que decía &#8220;Powered by Adobe Flash&#8221;, yo pensaba que todo aquello se hacia con After Effects o algo así, pero no, resulta que nuestro querido Flash se [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Estaba yo paseando por Times Square hace poco, cuando mirando todas las &#8216;publicidades&#8217; que inundan el citado lugar, me encuentro con que en muchas había un cartelito debajo que decía &#8220;Powered by Adobe Flash&#8221;, yo pensaba que todo aquello se hacia con After Effects o algo así, pero no, resulta que nuestro querido Flash se utiliza para estas cositas también.</p>
<p style="text-align: left;">En fin, nunca pensé en hacer piezas Flash para ser visualizadas en semejante soporte, pero quién sabe&#8230;</p>
<p style="text-align: center;"><img class="aligncenter" style="vertical-align: middle;" src="http://www.merlinfactory.com/fotos/foto1.jpg" alt="" /></p>
<p style="text-align: center;"><img class="aligncenter" style="vertical-align: middle;" src="http://www.merlinfactory.com/fotos/foto2.jpg" alt="" width="300" height="400" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/14/porque-no-solo-de-webs-vive-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>AS3: clase botón</title>
		<link>http://www.xinterface.net/2008/07/11/as3-clase-boton/</link>
		<comments>http://www.xinterface.net/2008/07/11/as3-clase-boton/#comments</comments>
		<pubDate>Fri, 11 Jul 2008 00:02:23 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[as3. botón]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=80</guid>
		<description><![CDATA[Leyendo un post de EzeQl, me animé a postear una clase para la creación de botones que desarrolle hace tiempo, y que uso tropecientas veces en todos mis proyectos. Creo que es bastante completa y escalable. Casi siempre la uso tal cuál, pero es muy fácil extender su funcionalidad en caso de necesitarlo.
Características:

Estados basados en [...]]]></description>
			<content:encoded><![CDATA[<p>Leyendo un post de <a href="http://www.ezeql.com/blog/2008/04/27/simplebutton/" target="_blank">EzeQl</a>, me animé a postear una clase para la creación de botones que desarrolle hace tiempo, y que uso tropecientas veces en todos mis proyectos. Creo que es bastante completa y escalable. Casi siempre la uso tal cuál, pero es muy fácil extender su funcionalidad en caso de necesitarlo.</p>
<h3>Características:</h3>
<ul>
<li>Estados basados en línea de tiempo (aunque también se pueden implementar con código). Se diseña la animación en un solo sentido, que se recorre en el estado &#8220;over&#8221;. Al hacer un &#8220;out&#8221; automáticamente la animación se reproducirá hacia atrás.</li>
<li>Solo hay que configurar dos estados. Estado out y over. Cuando tengo una botonera y quiero que uno se quede pulsado lo dejo en &#8220;over&#8221;. De esta manera me libro del estado &#8220;pressed&#8221; o &#8220;down&#8221;.</li>
<li>Soporte para sonidos de alguna o todas las acciones de botón: click, over, out (se pasan por parámetro en el constructor)</li>
<li>Se puede habilitar y deshabilitar el botón</li>
<li>Complétamente integrado con la clase Menú (mi clase menú que postearé otro día)</li>
<li>Aspecto gráfico y animación (asset) totalmente separado de la lógica del botón (se pasa un MovieClip por parámetro en el constructor)</li>
<li>Eventos: este botón avisa de todo lo que hace mediante eventos (OVER, RELEASE, OUT, SELECTED, UNSELECTED, ENABLED, DISABLED, NOSTATE).<span id="more-80"></span></li>
</ul>
<h3>Ejemplo de diseño de línea de tiempo:</h3>
<p>Solo hace falta hacer una animación en un solo sentido y con un stop() en las acciones del primer fotograma. Todo ello metido dentro de un MovieClip que tendrémos vinculado en la biblioteca o simplemente con un nombre de instancia en el escenario. En estas imágenes se ven los fotogramas clave de la animación. Solo tiene una simple animación de &#8220;tinta&#8221; de azul a verde:</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/06/imagen-2.png"><img class="aligncenter size-full wp-image-81" title="Primer fotograma" src="http://www.xinterface.net/wp-content/uploads/2008/06/imagen-2.png" alt="" width="469" height="289" /></a></p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/06/imagen-3.png"><img class="aligncenter size-full wp-image-82" title="Ultimo fotograma" src="http://www.xinterface.net/wp-content/uploads/2008/06/imagen-3.png" alt="" width="430" height="299" /></a></p>
<p>Para un ejemplo simple nos sirve con esto. Simplemente un &#8220;asset&#8221; (movieClip) que utilizará nuestra clase botón. Supongamos que lo tenemos vinculado en la biblioteca:</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/06/imagen-4.png"><img class="aligncenter size-full wp-image-83" title="Vinculación" src="http://www.xinterface.net/wp-content/uploads/2008/06/imagen-4.png" alt="" width="450" height="425" /></a></p>
<p>Ahora nos podemos cargar el botón del escenario, ya que solo necesitamos usar su vinculación.</p>
<p>De esta forma separamos el código del gráfico o &#8220;asset&#8221; que representará nuestro botón. Creo que es una buena manera de hacerlo, y aquí va la clase botón que he llamado de forma genérica &#8220;ItemButton&#8221;, puede parecer compleja pero es muy simple, fijaros simplemente en los métodos públicos para haceros una idea, creo que hablan por sí solos:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript">package net.<span style="color: #006600;">xinterface</span>.<span style="color: #006600;">items</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #0066CC;">MovieClip</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">media</span>.<span style="color: #0066CC;">Sound</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ItemButton <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const OVER:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;over&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const RELEASE:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;release&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const OUT:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;out&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const SELECTED:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;selected&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const UNSELECTED:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;unselected&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const <span style="color: #0066CC;">ENABLED</span>:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;enabled&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const DISABLED:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;disabled&quot;</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span> const NOSTATE:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;nostate&quot;</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> id:<span style="color: #0066CC;">String</span>;
&nbsp;
		protected <span style="color: #000000; font-weight: bold;">var</span> hit_mc:<span style="color: #0066CC;">MovieClip</span>;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> asset:<span style="color: #0066CC;">MovieClip</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> volume:<span style="color: #0066CC;">Number</span> = <span style="color: #cc66cc;">1</span>;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> sClick:<span style="color: #0066CC;">Sound</span>;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> sOver:<span style="color: #0066CC;">Sound</span>;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> sOut:<span style="color: #0066CC;">Sound</span>;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> state:<span style="color: #0066CC;">String</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// constructor</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ItemButton<span style="color: #66cc66;">&#40;</span>_asset:<span style="color: #0066CC;">MovieClip</span>, soundClick:<span style="color: #0066CC;">Sound</span>=<span style="color: #000000; font-weight: bold;">null</span>, soundOver:<span style="color: #0066CC;">Sound</span>=<span style="color: #000000; font-weight: bold;">null</span>, soundOut:<span style="color: #0066CC;">Sound</span>=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			asset = _asset;
			addChild<span style="color: #66cc66;">&#40;</span>asset<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#40;</span>asset.<span style="color: #006600;">hit_mc</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">!</span>= <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				hit_mc = <span style="color: #0066CC;">MovieClip</span><span style="color: #66cc66;">&#40;</span>asset.<span style="color: #006600;">hit_mc</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #66cc66;">&#125;</span><span style="color: #b1b100;">else</span>
			<span style="color: #66cc66;">&#123;</span>
				hit_mc = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">MovieClip</span>;
				hit_mc.<span style="color: #006600;">graphics</span>.<span style="color: #0066CC;">beginFill</span><span style="color: #66cc66;">&#40;</span>0x000000,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;
				hit_mc.<span style="color: #006600;">graphics</span>.<span style="color: #006600;">drawRect</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span>,asset.<span style="color: #0066CC;">width</span>, asset.<span style="color: #0066CC;">height</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
				asset.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>hit_mc<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			hit_mc.<span style="color: #006600;">buttonMode</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			sClick = soundClick;
			sOver = soundOver;
			sOut = soundOut;
&nbsp;
			state = NOSTATE;
&nbsp;
			Enable<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// Habilita el botón (se puede pulsar)</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Enable<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			hit_mc.<span style="color: #0066CC;">enabled</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			hit_mc.<span style="color: #006600;">mouseEnabled</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			hit_mc.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, Click<span style="color: #66cc66;">&#41;</span>;
			hit_mc.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_OVER</span>, Over<span style="color: #66cc66;">&#41;</span>;
			hit_mc.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_OUT</span>, Out<span style="color: #66cc66;">&#41;</span>;
			asset.<span style="color: #006600;">alpha</span> = <span style="color: #cc66cc;">1</span>;
			state = <span style="color: #0066CC;">ENABLED</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// Deshabilita el botón ( no se puede pulsar )</span>
		<span style="color: #808080; font-style: italic;">/** @param setAlpha true para bajar el alpha al deshabilitarlo, false para dejarlo tal cuál
		 * @param keepClick true para que el botón siga funcionando incluso al deshabilitarlo, false para un comportamiento normal (esto me ha servido el alguna ocasión
		 * */</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Disable<span style="color: #66cc66;">&#40;</span>setAlpha:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">true</span>, keepClick:<span style="color: #0066CC;">Boolean</span>=<span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			hit_mc.<span style="color: #0066CC;">enabled</span> = <span style="color: #000000; font-weight: bold;">false</span>;
			<span style="color: #808080; font-style: italic;">//hit_mc.mouseChildren = false;</span>
			hit_mc.<span style="color: #006600;">mouseEnabled</span> = <span style="color: #000000; font-weight: bold;">false</span>;
&nbsp;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>keepClick==<span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> hit_mc.<span style="color: #006600;">mouseEnabled</span> = <span style="color: #000000; font-weight: bold;">true</span>;
			<span style="color: #b1b100;">else</span> hit_mc.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, Click<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			hit_mc.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_OVER</span>, Over<span style="color: #66cc66;">&#41;</span>;
			hit_mc.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">MOUSE_OUT</span>, Out<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>setAlpha<span style="color: #66cc66;">&#41;</span> SetDisableView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			state = DISABLED;
		<span style="color: #66cc66;">&#125;</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> SetDisableView<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			asset.<span style="color: #006600;">alpha</span> = <span style="color: #cc66cc;">0.3</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// Esto es público por si acaso queremos presionar un botón manualmente. &quot;boton.Click(null);&quot;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Click<span style="color: #66cc66;">&#40;</span>evt:MouseEvent=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">var</span> event:Event = <span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>RELEASE<span style="color: #66cc66;">&#41;</span>;
			dispatchEvent<span style="color: #66cc66;">&#40;</span>event<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>sClick<span style="color: #66cc66;">!</span>=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> sClick.<span style="color: #0066CC;">play</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">soundTransform</span>.<span style="color: #006600;">volume</span> = volume;
			state = RELEASE;
		<span style="color: #66cc66;">&#125;</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> Over<span style="color: #66cc66;">&#40;</span>evt:MouseEvent=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">//trace(&quot;over&quot;);</span>
			dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>OVER<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			asset.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, TimelineBackard<span style="color: #66cc66;">&#41;</span>;
			asset.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, TimelineFordward<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>sOver<span style="color: #66cc66;">!</span>=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> sOver.<span style="color: #0066CC;">play</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">soundTransform</span>.<span style="color: #006600;">volume</span> = volume;
			state = OVER;
		<span style="color: #66cc66;">&#125;</span>
		protected <span style="color: #000000; font-weight: bold;">function</span> Out<span style="color: #66cc66;">&#40;</span>evt:MouseEvent=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">//trace(&quot;out&quot;);</span>
			dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>OUT<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			asset.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, TimelineFordward<span style="color: #66cc66;">&#41;</span>;
			asset.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, TimelineBackard<span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>sOut<span style="color: #66cc66;">!</span>=<span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span> sOut.<span style="color: #0066CC;">play</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">soundTransform</span>.<span style="color: #006600;">volume</span> = volume;
			state = OUT;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// Este método es perfecto para botoneras, al llamarlo, el botón de quedará en el estado &quot;over&quot;,</span>
		<span style="color: #808080; font-style: italic;">// y no se podrá pulsar hasta después de llamar al método &quot;Unselect();&quot;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Select<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>state == SELECTED<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span>;
&nbsp;
			Disable<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
			dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>SELECTED<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			Over<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			state = SELECTED;
			<span style="color: #808080; font-style: italic;">//trace(&quot;selected&quot;);</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// vuelve a dejar el botón como estaba</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Unselect<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>state == UNSELECTED<span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span>;
&nbsp;
			Enable<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>UNSELECTED<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
			Out<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			state = UNSELECTED;
			<span style="color: #808080; font-style: italic;">//trace(&quot;unselected&quot;);</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// Timeline</span>
		<span style="color: #808080; font-style: italic;">// Hace correr la línea de tiempo del &quot;asset&quot; hasta el último frame</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> TimelineFordward<span style="color: #66cc66;">&#40;</span>evt:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			asset.<span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span>asset.<span style="color: #006600;">currentFrame</span> + <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>asset.<span style="color: #006600;">currentFrame</span> == asset.<span style="color: #006600;">totalFrames</span><span style="color: #66cc66;">&#41;</span> asset.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, TimelineFordward<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">// Hace correr hacia el frame 1, la línea de tiempo del &quot;asset&quot;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> TimelineBackard<span style="color: #66cc66;">&#40;</span>evt:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			asset.<span style="color: #0066CC;">gotoAndStop</span><span style="color: #66cc66;">&#40;</span>asset.<span style="color: #006600;">currentFrame</span> - <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>asset.<span style="color: #006600;">currentFrame</span> == <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> asset.<span style="color: #006600;">removeEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, TimelineBackard<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">// getters y setters</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> State<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">return</span> state;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> Volume<span style="color: #66cc66;">&#40;</span>value:<span style="color: #0066CC;">Number</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			volume = value;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> Volume<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Number</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">return</span> volume;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">get</span> Id<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">String</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">return</span> id;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">set</span> Id<span style="color: #66cc66;">&#40;</span>pId:<span style="color: #0066CC;">String</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			id = pId;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p><a href="http://www.xinterface.net/as/net/xinterface/items/ItemButton.as" target="_blank">Podéis descargar la clase ItemButton aquí</a></p>
<p>Para usar esta clase con el ejemplo de asset mostrado anteriormente:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #808080; font-style: italic;">// Pillamos el asset vinculado en la librería</span>
<span style="color: #000000; font-weight: bold;">var</span> assetGrafico:<span style="color: #0066CC;">MovieClip</span> = <span style="color: #000000; font-weight: bold;">new</span> asset<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> as <span style="color: #0066CC;">MovieClip</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Creamos el botón y lo añadimos al displayList, fíjate que no añadimos el asset al displayList</span>
<span style="color: #808080; font-style: italic;">// puesto que el botón lo hace automáticamente.</span>
<span style="color: #000000; font-weight: bold;">var</span> boton:ItemButton = <span style="color: #000000; font-weight: bold;">new</span> ItemButton<span style="color: #66cc66;">&#40;</span>assetGrafico<span style="color: #66cc66;">&#41;</span>;
addChild<span style="color: #66cc66;">&#40;</span>boton<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Nos subscribimos a los eventos</span>
boton.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ItemButton.<span style="color: #006600;">RELEASE</span>, HandleRelease<span style="color: #66cc66;">&#41;</span>;
boton.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ItemButton.<span style="color: #006600;">OVER</span>, HandleOver<span style="color: #66cc66;">&#41;</span>;
boton.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>ItemButton.<span style="color: #006600;">OUT</span>, HandleOut<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Administramos eventos</span>
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> HandleRelease<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hemos hecho click en la instancia de botón&quot;</span>, <span style="color: #0066CC;">e</span>.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> HandleOver<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hemos hecho over en la instancia de botón&quot;</span>, <span style="color: #0066CC;">e</span>.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> HandleOut<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;hemos hecho out en la instancia de botón&quot;</span>, <span style="color: #0066CC;">e</span>.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Y ya solo queda probar la clase con distintos assets gráficos, que pueden ser completamente distintos al que habéis visto, siempre que mantegan su estructura. No olvidéis que también funcionan los sonidos para los estados over,  out, y release.</p>
<p>También comentar que como instrumento fundamental y control de cualquier aplicación, necesitamos un menú, que no es más que un controlador de una lista o array de botones. En mi caso tengo una clase &#8220;Menu&#8221; que hace uso de la clase &#8220;ItemButton&#8221;, y se encarga de gestionar cuándo los botones de activan o desactivan, según en cuál de ellos pinche el usuario. Tal vez me anime y lo postee, pero eso será después de la publicidad.</p>
<p>Un saludo</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/07/11/as3-clase-boton/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Se acabaron mis vacaciones, empieza una nueva etapa</title>
		<link>http://www.xinterface.net/2008/06/30/se-acabaron-mis-vacaciones-empieza-una-nueva-etapa/</link>
		<comments>http://www.xinterface.net/2008/06/30/se-acabaron-mis-vacaciones-empieza-una-nueva-etapa/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 23:10:57 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=79</guid>
		<description><![CDATA[Para mí, que nunca he sido fan del futbol, la verdad es que me ha sentado muy, muy bien que España ganase hoy mismo la copa de Europa. Justo un día después de llegar de mis vacaciones en Estados Unidos me encuentro con la sorpresa. Hemos podido!!!
Y ya no hablo más de fútbol, que tampoco [...]]]></description>
			<content:encoded><![CDATA[<p>Para mí, que nunca he sido fan del futbol, la verdad es que me ha sentado muy, muy bien que España ganase hoy mismo la copa de Europa. Justo un día después de llegar de mis vacaciones en Estados Unidos me encuentro con la sorpresa. Hemos podido!!!<br />
Y ya no hablo más de fútbol, que tampoco me preocupa demasiado.</p>
<p>En mi viaje he podido observar varias cosas que imaginaba. Los yankis (véase Nueva York que es lo que he podido ver) tienen un ritmo de vida y de trabajo diferente al nuestro. Hay mucha más competencia en nuestro sector (estamos hablando de nuevas tecnologías lógicamente), salarios más altos, y más nivel en general. Ahora entiendo el porqué del petardo que muchos tienen acoplados a su parte íntima y trasera, y de la rapidez abismal con la que evolucionan las cosas allí. Eso mismo se ve reflejado en muchos blogs, en los eventos y presentaciones que surgen cada vez con más frecuencia. La misma vida en la calles de Nueva York refleja esa manera de hacer las cosas. Todo va muy rápido, nadie se para para pensar. Y no creo que sea lo mejor, simplemente es una opción, pero lo que hace esta gente nos arrastra a todos de alguna manera. A todos los que al otro lado del charco queremos estar al día.<span id="more-79"></span></p>
<p>Y por eso mismo en ciertos momentos me siento frustrado. No tengo la capacidad suficiente para asimilar todo lo nuevo en un tiempo razonable. Actualmente estudio y aprendo Flex, perfecciono AS3, y estoy metido con varias librerías de terceros que últimamente son imprescindibles para hacer mi trabajo, como librerías de 3D con flash, otras que integran servicios web, físicas 2D y 3D, etc. Y todo eso solo es Flash!!!!</p>
<p>Antes mi trabajo como freelance y en pequeñas empresas, era multitarea. Es decir, lo mismo me encargaban diseñar una base de datos, como programar un gestor multiusuario desde cero, que diseñar  y dirigir toda la gráfica de un proyecto web, pasando por maquetar con CSS-XHTML, y encima programar mis piezas con Flash.</p>
<p>Esos tiempos han acabado (para mí y para muchos). Esto cada vez consiste más y más en la especialización, y como siempre he dicho, el que mucho abarca poco aprieta. Si quieres hacer algo de verdad y sentirte bien con lo que haces, creo que hay que especializarse. Y eso es lo que intento ahora, que ya mi situación me lo permite: trabajo fijo y en buen lugar, haciendo justo lo que me gusta hacer. Flash.</p>
<p>Pero mis ansias de aprender más no me dejan tranquilo. En mis ratos intento sacar tiempo para el lado del servidor (Coldfusion que se usa en mi empresa, y C#, que me parece muy potente), ya que mi experiencia y conocimientos de ASP (el antiguo asp 3) que tanto me han servido estos años, ya no me sirven ahora para nada, excepto para entender el concepto y funcionamiento de las cosas.<br />
Por otro lado me tocará liarme con Air tarde o temprano, cosa que hasta ahora no he podido hacer.</p>
<p>Además, mi paso por Pyro Studios, me llevó a interesarme mucho más por las tecnologías multiusuario, cosa que tanto abunda en los juegos que allí se desarrollan.<br />
Las tecnologías multiusuario que se usan para aplicaciones flash me parecen muy interesantes.<br />
Cada día se me ocurren más y más ideas para desarrollar, y de nuevo, falta de tiempo y recursos para poder hacerlo.</p>
<p>Supongo que todo esto tiene que ver con la ambición y las ansias de aprender de cada uno (aparte de que un día solo tiene 24 horas claro). A mí personalmente me gusta tener &#8220;controlado&#8221; todo lo que hago, si no completamente ya que es imposible, por lo menos lo suficiente para pensar que estoy dentro del &#8220;tren&#8221;.</p>
<p>Y eso es lo que intentaré hacer este año. Las vacaciones me han puesto las pilas, y es como si fuera año nuevo =) Todo esto que he dicho puede desanimar ciertamente, pero lo que intento es justo lo contrario. Hay que ponerse las pilas, y mucho. Concentrarse en lo que mejor se nos dé, y mejorar cada día. No me gusta ser conformista, y creo que nunca lo seré. Y aunque supuestamente hay crisis mundial, en este sector por lo menos no la veo por ninguna parte, y creo que estamos en un buen momento para evolucionar.</p>
<p>Este post no es propio para este tipo de blog, pero no me podía aguantar =)<br />
Un saludo a los valientes que aguantaron hasta llegar a esta línea.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/06/30/se-acabaron-mis-vacaciones-empieza-una-nueva-etapa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cómo usar la librería de Flash con Flex Builder</title>
		<link>http://www.xinterface.net/2008/05/27/como-usar-la-libreria-de-flash-con-flex-builder/</link>
		<comments>http://www.xinterface.net/2008/05/27/como-usar-la-libreria-de-flash-con-flex-builder/#comments</comments>
		<pubDate>Tue, 27 May 2008 22:50:21 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=73</guid>
		<description><![CDATA[Doy por hecho que el lector de este artículo quiere deshacerse de Flash para compilar un swf. La herrramienta a utilizar es FlexBuilder. ¿Por qué FlexBuilder si solo vamos a usar ActionScript? (si, este post va sobre un proyecto ActionScript, nada que ver con el framework de Flex). Bueno, es simple, FlexBuilder no es ni [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/flashflex.jpg"><img class="alignleft alignnone size-full wp-image-78" style="float: left; margin-left: 4px; margin-right: 4px;" title="flashflex" src="http://www.xinterface.net/wp-content/uploads/2008/05/flashflex.jpg" alt="" width="220" height="161" /></a>Doy por hecho que el lector de este artículo quiere deshacerse de Flash para compilar un swf. La herrramienta a utilizar es FlexBuilder. ¿Por qué FlexBuilder si solo vamos a usar ActionScript? (si, este post va sobre un proyecto ActionScript, nada que ver con el framework de Flex). Bueno, es simple, FlexBuilder no es ni de lejos, mejor que Flash Develop o FDT para escribir código, pero tiene debugger, y lo uso como herramienta estándar para proyectos ActionScript y proyectos Flex. Así me centro en una sola en lugar de aprendérmelas todas.<br />
Por otro lado lo que me gusta es que al compilar genera un html y swf con su &#8220;Express Install&#8221; (por si alguien no tiene la versión de Flash instalada). Bueno, vamos al lío&#8230;<span id="more-73"></span></p>
<p>Lo cómodo de trabajar con Flash es que creamos un MovieClip en la librería, lo vinculamos con un nombre de clase, y automáticamente lo podemos instanciar mediante código con el mismo nombre que habíamos vinculado.</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-9.png"><img class="aligncenter size-full wp-image-74" title="imagen-9" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-9.png" alt="" width="500" height="388" /></a></p>
<p>Y entonces para instanciar la clase &#8220;Cuadrado&#8221;, que en realidad es un MovieClip, hacemos lo siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript"> <span style="color: #000000; font-weight: bold;">var</span> loquesea:Cuadrado = <span style="color: #000000; font-weight: bold;">new</span> Cuadrado<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<h3>¿Cómo hacemos esto en Flex Builder?</h3>
<p>Pues así, a secas, no se puede =), Flex no tiene ningún contenedor de assets donde podamos tenerlos almacenados. Pero podemos solucionarlo de dos maneras:</p>
<ol>
<li>La primera y más simple es almacenar la librería de Flash en un archivo .SWC</li>
<li>La segunda, un pelín mas compleja, pero más útil, es almacenar lo mismo en un .SWF</li>
</ol>
<p>El swc se genera igual que un swf, compilando la película de Flash, pero marcando la opción &#8220;Exportar swc&#8221; en opciones de publicación</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-10.png"><img class="aligncenter size-full wp-image-75" title="imagen-10" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-10.png" alt="" width="339" height="381" /></a></p>
<p>Al publicar se obtendrá un archivo SWC en el mismo directorio de publicación que el swf.<br />
Ahora desde nuestro proyecto Flex, linkamos dicho archivo para poder usar los MovieClips vinculados<br />
Nota: si no sabes cómo crear un proyecto &#8220;ActionScript&#8221; en Flex, se explica en <a href="http://www.xinterface.net/2008/05/25/papervision3d-y-flex-builder-primeros-pasos/" target="_blank">este post</a></p>
<p>Clicamos con el botón derecho sobre la carpeta de proyecto (dentro de FlexBuilder), clicamos en &#8220;Properties&#8221; y luego en &#8220;ActionScript build path&#8221;. Ahora pinchamos la pestaña &#8220;Library Path&#8221; y le damos al botón &#8220;Add swc&#8221;. Buscamos nuestro swc y le damos a ok</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-12.png"><img class="aligncenter size-full wp-image-76" title="imagen-12" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-12.png" alt="" width="479" height="424" /></a></p>
<p>Ahora desde nuestro código ya podemos instanciar todos nuestros MovieClips. Además, la ayuda de código de Flex Builder reconocerá las clases vinculadas</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-13.png"><img title="imagen-13" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-13.png" alt="" width="387" height="271" /></a></p>
<p>Y listo ! Podéis compilar y veréis vuestro Cuadradito funcionand</p>
<p>Esto es muy útil pero tiene un inconveniente simple: el peso de nuestra película principal aumentará tanto como pese el swc, porque Flex embeberá (incorporará) en el swf generado, los símbolos o imágenes que instanciemos en nuestro código (los que no instanciemos no se incluirán).</p>
<p>Entonces es cuando pensamos en poner en práctica la segunda forma, se basa en lo siguiente:</p>
<ol>
<li>Generamos el swf con la librería</li>
<li>Desde nuestra aplicación principal cargamos la librería en tiempo de ejecución como hacemos normalmente con cualquier otro swf</li>
<li>Accedemos (ya veremos cómo) a las clases del swf cargado (MovieClips, etc)</li>
</ol>
<p>Continuará&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/05/27/como-usar-la-libreria-de-flash-con-flex-builder/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Comunicación directa cliente-cliente desde Flash Player 10!</title>
		<link>http://www.xinterface.net/2008/05/27/comunicacion-directa-cliente-cliente-desde-flash-player-10/</link>
		<comments>http://www.xinterface.net/2008/05/27/comunicacion-directa-cliente-cliente-desde-flash-player-10/#comments</comments>
		<pubDate>Tue, 27 May 2008 01:56:53 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[FMS]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[flash player 10]]></category>

		<category><![CDATA[p2p]]></category>

		<category><![CDATA[rtmfp]]></category>

		<category><![CDATA[rtmp]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=72</guid>
		<description><![CDATA[Alucino, según leo en este post, Adobe y Flash Player 10 nos trae mas sorpresas como el nuevo protocolo de comunicación RTMFP que funciona bajo UDP (no TCP), y se muestra como alternativa mejorada al protocolo RTMP (basado en TCP) usado por Flash Media Server. Los dos son propiedad de Adobe, aunque el RTMP lo [...]]]></description>
			<content:encoded><![CDATA[<p>Alucino, según leo en <a href="http://justin.everett-church.com/index.php/2008/05/23/astrop2p/" target="_blank">este post</a>, <a href="http://labs.adobe.com/technologies/flashplayer10/" target="_blank">Adobe y Flash Player 10</a> nos trae mas sorpresas como el nuevo protocolo de comunicación <a href="http://justin.everett-church.com/index.php/2008/05/16/rtmfp-in-flash-player-10-beta/" target="_blank">RTMFP</a> que funciona bajo UDP (no TCP), y se muestra como alternativa mejorada al protocolo <a href="http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol" target="_blank">RTMP</a> (basado en TCP) usado por <a href="http://www.adobe.com/es/products/flashmediaserver/" target="_blank">Flash Media Server</a>. Los dos son propiedad de Adobe, aunque el RTMP lo usan diferentes tecnologías de servidor de terceras partes como por ejemplo <a href="http://www.themidnightcoders.com/weborb" target="_blank">Weborb</a> o <a href="http://www.wowzamedia.com/comparison.html" target="_blank">Wowza Media Server</a> entre otros.</p>
<p>Por otro lado las comunicaciones con Flash Player 10 llevarán integradas el <a href="http://speex.org/" target="_blank">códec de audio de alta calidad SPEEX</a>, con el que según se dice, se podrán realizar aplicaciones de sonido y transmisión de voz mucho más potentes.</p>
<p>Pero bueno, a lo que iba el post..<br />
Parece ser que Adobe implementará en un futuro próximo una red de servidores que implementen estas conexiones y que serán accesibles desde Flash Player 10 mediante los objetos de ActionScript &#8220;NetConnection&#8221; y &#8220;NetStream&#8221;.</p>
<p>Digamos que el proceso sería el siguiente:</p>
<ol>
<li>Un cliente swf (swf 1) establece una conexión con un server de Adobe</li>
<li>El servidor le asigna al cliente una ID única y temporal</li>
<li>Otros clientes pueden subscribirse a los eventos y streams del primero (swf 1), mediante dicha ID mientras la conexión siga abierta</li>
</ol>
<p>Esa misma ID que se establece en la conexión servirá también como identificador para aplicaciones de chat u otras comunicaciones.</p>
<h3>¡Gran noticia!</h3>
<p>Ahora mismo con RTMP podemos enviar un stream de sonido o video (micrófono o webcam) a un servidor que lo propague (broadcast) a otros clientes swf. Con la nueva tecnología, se podrá <strong>enviar un stream directamente de cliente a cliente sin pasar por el servidor, </strong>lo que nos abre un mundo de posibilidades enorme.</p>
<p>Además, el envío de datos mediante &#8220;NetConnection.send()&#8221; no se limita a streamings, sino a cualquier tipo de datos (eso sí, con sus limitaciones de tamaño). Lo que quiere decir que ya no nos hace falta un servidor para hacer por ejemplo un chat, un juego de comunicación en tiempo real, etc.</p>
<p>La gran pega a todo esto es que si frente a nuestra conexión tenemos un firewall que bloquee el protocolo UDP, no funcionará.</p>
<p>Muchos se están preguntando si se podrá implementar una red <a href="http://es.wikipedia.org/wiki/Caracteristicas_p2p" target="_blank">P2P</a> (peer to peer) con esta tecnología, pero según argumenta <a href="http://justin.everett-church.com/index.php/2008/05/23/astrop2p/" target="_blank">Justin Everett</a> (Product Manager for Flash Player at Adobe), las redes peer to peer se basan en lectura y escritura de datos constante en disco duro, guardando en memoria las diferentes partes de los archivos cuando son necesarias. Con Flash Player 10 se puede cargar un archivo del disco duro al runtime, pero se tiene que hacer manualmente, y de uno en uno, por lo tanto el P2P queda descartado.</p>
<p>Y digo yo, que aunque queden descartados los intercambios masivos de datos, si que podríamos hacer un messenger con envío de archivos, un sistema de video conferencia con archivos compartidos entre los clientes, aplicaciones mejoradas de e-learning, juegos multiusuario que trabajen con imágenes y ficheros de usuarios en tiempo real, etc, etc, etc&#8230;, y todo como ya he dicho, sin programación de servidor de por medio.</p>
<p>Esperemos que Adobe ponga pronto a disposición los servidores de comunicaciones para que todo esto sea posible, y que se documente bien el Flash Player 10.</p>
<p>Ahí dejo eso, que cada uno saque sus conclusiones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xinterface.net/2008/05/27/comunicacion-directa-cliente-cliente-desde-flash-player-10/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Papervision3D y Flex Builder: Primeros pasos</title>
		<link>http://www.xinterface.net/2008/05/25/papervision3d-y-flex-builder-primeros-pasos/</link>
		<comments>http://www.xinterface.net/2008/05/25/papervision3d-y-flex-builder-primeros-pasos/#comments</comments>
		<pubDate>Sun, 25 May 2008 21:55:49 +0000</pubDate>
		<dc:creator>xleon</dc:creator>
		
		<category><![CDATA[AS3]]></category>

		<category><![CDATA[Papervision3D]]></category>

		<category><![CDATA[Flex Builder]]></category>

		<category><![CDATA[scplugin]]></category>

		<category><![CDATA[subversion]]></category>

		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.xinterface.net/?p=55</guid>
		<description><![CDATA[Este es el primer post sobre la tecnología 3D con flash llamada Papervision3D. Ya que estoy empezando con ello, iré posteando referencias sobre las pruebas que haga. Hay muchos tutoriales por ahí con los que empezar, pero creo que otro punto de vista nunca viene mal, y sobretodo si está en español (la mayoría no [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/paper.jpg"><img class="alignleft alignnone size-full wp-image-71" style="float: left;" title="paper" src="http://www.xinterface.net/wp-content/uploads/2008/05/paper.jpg" alt="" width="350" height="204" /></a>Este es el primer post sobre la tecnología 3D con flash llamada <a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a>. Ya que estoy empezando con ello, iré posteando referencias sobre las pruebas que haga. Hay muchos tutoriales por ahí con los que empezar, pero creo que otro punto de vista nunca viene mal, y sobretodo si está en español (la mayoría no lo son)</p>
<p>Nota: Este artículo parte de cero en cuanto a que no solo explica el comienzo de un proyecto con papervision, sino también a cómo usar un cliente de subversion para actualizar y/o descargar el uso de código de terceras partes, la configuración de un proyecto en Flex Builder y conceptos básicos con los que empezamos a lidiar cuando damos el salto desde Flash a otro modo de desarrollar ActionScript<span id="more-55"></span></p>
<p>Si nunca has desarrollado una aplicación con papervision creo que primero habría que entender cuál es su funcionamiento básico y cómo ponerlo en marcha, así como conceptos fundamentales, como qué es una escena, un viewport, renderizado, etc.</p>
<h3>Antes de empezar: preparar nuestro entorno de desarrollo.</h3>
<p><a href="http://blog.papervision3d.org/" target="_blank">Papervision3D</a> en realidad no se instala. Se trata de una librería de clases de ActionScript de la que se servirá nuestra aplicación para implementar sus funciones. En nuestro caso usaremos la herramienta <a href="http://www.adobe.com/products/flex/" target="_blank">Flex Builder 3</a> para codificar, lo que no significa que usemos el framework de Flex, ya que solo escribiremos ActionScript.</p>
<p><strong>Primer paso: descargar la última versión de papervision3D</strong></p>
<p>Normalmente las librerías de código se encuentran en repositorios de control de versiones como <a href="http://subversion.tigris.org/" target="_blank">Subversion</a>. Así funciona <a href="http://code.google.com/">Google Code</a>, que es donde se encuentra alojado el <a href="http://code.google.com/p/papervision3d/" target="_blank">repositorio de papervision</a>. Para poder descargar (check out) un repositorio necesitamos un cliente de subversion. Hay muchos de ellos. El más común y usado es <a href="http://tortoisesvn.tigris.org/" target="_blank">Tortoise</a> (no por ello el mejor), que se integra con el explorador de windows y es muy simple de usar. Si usas Mac OSX, una solución casi idéntica es <a href="http://scplugin.tigris.org/" target="_blank">SCPlugin</a>, que podéis descargar <a href="http://scplugin.tigris.org/servlets/ProjectDocumentList" target="_blank">aquí</a>.</p>
<p>Descarga uno según tu sistema operativo y después de instalarlo crea una carpeta en tu disco duro que se llame por ejemplo &#8220;papervision3D&#8221;. Sobre la carpeta presiona con el botón derecho y busca el menu &#8220;SVN Checkout&#8230;&#8221; (windows) o &#8220;Más &gt; Subversion &gt; Checkout&#8221; (mac).</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-1.png"><img class="aligncenter size-full wp-image-56" title="mac svn checkout" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-1.png" alt="" width="500" height="282" /></a><a href="http://www.xinterface.net/wp-content/uploads/2008/05/tortoise-windows-svn-checkout.gif"><img class="aligncenter size-full wp-image-57" title="tortoise-windows-svn-checkout" src="http://www.xinterface.net/wp-content/uploads/2008/05/tortoise-windows-svn-checkout.gif" alt="" width="373" height="229" /></a></p>
<p>En el campo &#8220;URL&#8221; escribe la dirección del repositorio (<a href="http://papervision3d.googlecode.com/svn/trunk/" target="_blank"><tt><strong><em>http</em></strong>://papervision3d.googlecode.com/svn/trunk/</tt></a>), deja el resto de opciones tal cual y presiona &#8220;ok&#8221; o &#8220;checkout&#8221;.</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-2.png"><img class="aligncenter size-full wp-image-58" title="svn checkout" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-2.png" alt="" width="475" height="502" /></a></p>
<p>Tendrás que esperar a que se descarguen todos los archivos. Al terminar verás que contiene 4 carpetas. La que nos interesa especialmente es lo que hay dentro de &#8220;branches/GreatWhite/src/&#8221;, ya que el resto son versiones deprecadas que ya no se actualizan. El proyecto está en constante evolución, y si lo actualizas a menudo (botón derecho sobre la carpeta &gt; SVN update con windows o &#8220;más &gt; svn update con mac) verás que casi siempre hay nuevas actualizaciones por parte del equipo de desarrollo.</p>
<p>Mi recomendación es crear una carpeta común para todas las librerías de código que utilicemos en nuestros proyectos. Yo tengo una carpeta &#8220;ActionScript&#8221; donde tengo todas las clases.<br />
En este caso copié las contenidos de &#8220;branches/GreatWhite/src/&#8221; en mi carpeta &#8220;ActionScript&#8221;. (com, fl, org, nochump).</p>
<p><strong>Segundo paso: configurar un proyecto en FlexBuilder</strong></p>
<p>Abrimos Flex Builder y creamos un nuevo &#8220;ActionScript project&#8221;</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-3.png"><img class="aligncenter size-full wp-image-59" title="Flex ActionScript project" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-3.png" alt="" width="236" height="391" /></a></p>
<p>Le damos un nombre al proyecto (ej: &#8220;PapervisionTest&#8221; y especificamos la carpeta donde se va a alojar, y pulsamos next:</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-4.png"><img class="aligncenter size-full wp-image-60" title="imagen-4" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-4.png" alt="" width="500" height="475" /></a></p>
<p>En la pestaña &#8220;Source path&#8221; clicamos &#8220;Add folder&#8230;&#8221; y buscamos nuestra carpeta de &#8220;ActionScript&#8221; de la que os hablaba anteriormente, que es donde están alojadas nuestras clases incluidas las de papervision.<br />
En &#8220;Main Source Folder&#8221; clicamos &#8220;Browse&#8221;, seleccionamos la carpeta de proyecto, clicamos new (automáticamente nos crea la carpeta &#8220;src&#8221;, la seleccionamos y clicamos &#8220;ok&#8221;. El resto lo dejamos tal cuál y clicamos &#8220;Finish&#8221;.</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-6.png"><img class="aligncenter size-full wp-image-61" title="imagen-6" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-6.png" alt="" width="500" height="594" /></a></p>
<p>Ya tenemos todo funcionando, y ya podemos empezar a escribir código. Flex Builder crea automáticamente la clase principal de la aplicación o lo que se suele llamar &#8220;Document Class&#8221;.<br />
Nota: esta clase debe tener un package sin nombre como en siguiente ejemplo:</p>
<p><a href="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-7.png"><img class="aligncenter size-full wp-image-62" title="imagen-7" src="http://www.xinterface.net/wp-content/uploads/2008/05/imagen-7.png" alt="" width="500" height="231" /></a></p>
<h3>Conceptos básicos</h3>
<p><strong>Viewport</strong>: es la parte visible de todos nuestros elementos 3D y el encargado de coordinar el tipo de renderizado, la cámara y la escena. Es lo que añadimos directamente a nuestro stage de Flash. Si definimos un viewport de 500 x 400 píxeles, todo lo que se encuentre fuera de esas dimensiones no se verá.</p>
<p><strong>Escena (Scene):</strong> es el contenedor de todos los elementos visibles y formas que tendrá nuestra aplicación. Digamos que es como un &#8220;display list&#8221; interno de papervision.</p>
<p><strong>Motor de renderizado (Renderer):</strong> como su nombre indica se encarga de renderizar la escena y <a href="http://es.wikipedia.org/wiki/Renderizaci%C3%B3n" target="_blank">cómo bien explica Wikipedia</a>, en términos de visualizaciones en ordenador, más específicamente en 3D, la &#8220;renderización&#8221; es un proceso de <a title="Cálculo" href="http://es.wikipedia.org/wiki/C%C3%A1lculo">cálculo</a> complejo desarrollado por un ordenador destinado a generar una imagen <a title="Bidimensional" href="http://es.wikipedia.org/wiki/Bidimensional">2D</a> a partir de una escena 3D. En papervision, cada vez que modificamos algo en la escena 3D, debemos renderizar de nuevo. Lo que se suele hacer es un método que se encargue de ello y que se ejecuta en un intervalo fijo mediante el evento &#8220;ENTER_FRAME&#8221;.</p>
<p><strong>Cámara:</strong> en papervision podemos controlar la posición, rotación y zoom de la cámara que visualiza el contenido.</p>
<h3>Configuración típica</h3>
<p>A continuación verás el código ActionScript con la configuración típica y básica de una aplicación papervision. En realidad no hace más que inicializar los elementos de los que hablaba en el punto anterior, y no tiene ningún efecto visual:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #808080; font-style: italic;">/**
 * Author: xleon, http://www.xinterface.net (malandro@gmail.com)
 */</span>
&nbsp;
package
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
&nbsp;
    <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
    <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">render</span>.<span style="color: #006600;">BasicRenderEngine</span>;
    <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">Scene3D</span>;
    <span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">view</span>.<span style="color: #006600;">Viewport3D</span>;
&nbsp;
    <span style="color: #808080; font-style: italic;">// meta datos para el swf resultante:</span>
    <span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span>frameRate=<span style="color: #ff0000;">&quot;31&quot;</span>, <span style="color: #0066CC;">width</span>=<span style="color: #ff0000;">&quot;500&quot;</span>, <span style="color: #0066CC;">height</span>=<span style="color: #ff0000;">&quot;400&quot;</span>, <span style="color: #0066CC;">backgroundColor</span>=<span style="color: #ff0000;">&quot;0xffffff&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Sample1 <span style="color: #0066CC;">extends</span> Sprite
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> viewport:Viewport3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">// existe más de un tipo de renderizado, este es el mas comun</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> renderer:BasicRenderEngine;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> scene:Scene3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">/*
		existe mas de un tipo de camara, con este tipo
		nos aseguramos de que siempre apunte hacia un target
		determinado, que si no se especifica, sera nuestra escena
		*/</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #0066CC;">camera</span>:Camera3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">// constructor</span>
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Sample1<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// En este caso solo nos hace falta iniciar el 3D</span>
			Init3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/*
		este metodo inicializa todo lo relacionado
		con nuestro entorno 3D
		*/</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> Init3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">/*
			creamos el viewport y lo añadimos al displayList
			Si queremos que algun elemento de la escena sea interactivo
			o se pueda clicar en el, el parametro @interactive (el cuarto) debe ser &quot;true&quot;
			*/</span>
			viewport = <span style="color: #000000; font-weight: bold;">new</span> Viewport3D<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">400</span>, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>viewport<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			renderer = <span style="color: #000000; font-weight: bold;">new</span> BasicRenderEngine;
			scene = <span style="color: #000000; font-weight: bold;">new</span> Scene3D;
			<span style="color: #0066CC;">camera</span> = <span style="color: #000000; font-weight: bold;">new</span> Camera3D;
&nbsp;
			CreateObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, Loop3D<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;">/*
		esta función se encarga de crear y configurar los
		objetos de nuestra escena y los incluye en ella
		*/</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> CreateObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> Loop3D<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">/*
			Aquí añadimos movimientos de piezas, de camara, y toda
			la interactividad y comportamientos.
			Para que los cambios tengan efecto visualmente
			deberemos finalmente renderizar la escena
			*/</span>
			Render<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #808080; font-style: italic;">/*
		este metodo es generico y no hará falta modificarlo
		si mantenemos la estructura
		*/</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> Render<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
		<span style="color: #66cc66;">&#123;</span>
			renderer.<span style="color: #006600;">renderScene</span><span style="color: #66cc66;">&#40;</span>scene, <span style="color: #0066CC;">camera</span>, viewport<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<h3>Añadiendo movimiento y un objeto simple</h3>
<p>Ahora que ya tenemos todo en condiciones, podemos añadir un elemento a la escena, e incluir una ecuación sencilla para el movimiento de cámara, de tal forma que podremos interactuar con el movimiento del ratón.</p>
<p>En el método &#8220;Init3D()&#8221; añadimos este código para posicionar la cámara:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #808080; font-style: italic;">// configuracion de la camara</span>
<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">zoom</span> = <span style="color: #cc66cc;">10</span>;
<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">z</span> = <span style="color: #cc66cc;">-1000</span>;
<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">300</span>;
<span style="color: #0066CC;">camera</span>.<span style="color: #006600;">x</span> = <span style="color: #cc66cc;">0</span>;</pre></div></div>

<p>Creamos un plano que es un elemento básico o primitiva. Para que un plano u otra primitiva sea visible deberemos asignarle un material.<br />
Para ello creamos primero un WireframeMaterial, que no es sino un material donde solo se ven los triángulos de la maya 3D. Por último lo añadimos a la escena. Incluiremos todo esto en el método &#8220;CreateObjects()&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> CreateObjects<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
<span style="color: #808080; font-style: italic;">// Creamos un material con dos caras iguales:</span>
<span style="color: #000000; font-weight: bold;">var</span> mat:WireframeMaterial = <span style="color: #000000; font-weight: bold;">new</span> WireframeMaterial;
mat.<span style="color: #006600;">doubleSided</span> = <span style="color: #000000; font-weight: bold;">true</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// Creamos un plano con el material anterior:</span>
<span style="color: #000000; font-weight: bold;">var</span> plane:Plane = <span style="color: #000000; font-weight: bold;">new</span> Plane<span style="color: #66cc66;">&#40;</span>mat, <span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">500</span>, <span style="color: #cc66cc;">8</span>, <span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span>;
plane.<span style="color: #006600;">rotationX</span> = <span style="color: #cc66cc;">-90</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// lo añadimos a la escena</span>
scene.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>plane<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Para finalizar el ejemplo añadiremos un có