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

<channel>
	<title>Luis Adrián Rosas Wiedfeldt &#187; Flash</title>
	<atom:link href="http://www.nomeva.com/tag/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nomeva.com</link>
	<description>Pon un lego en tu vida</description>
	<lastBuildDate>Wed, 20 Jan 2010 08:34:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Videotutorial JSFL &#8211; Comando Save and Test</title>
		<link>http://www.nomeva.com/2010/01/20/videotutorial-jsfl-comando-save-and-test/</link>
		<comments>http://www.nomeva.com/2010/01/20/videotutorial-jsfl-comando-save-and-test/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 08:34:04 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[autosave]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Videotutorial]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=532</guid>
		<description><![CDATA[Bievenidos nuevamente. Desde el año pasado que nos posteo nada, así que aprovecho este momento para desearon un gran año con mucho trabajo, nuevo retos, proyectos interesante y mucho aprendizaje. Vale, vale, también con mucha, muchísima felicidad  
INTRODUCCIÓN
En esta ocasión no habrá mucho texto ya que todo lo he hecho en video, así que [...]]]></description>
			<content:encoded><![CDATA[<p>Bievenidos nuevamente. Desde el año pasado que nos posteo nada, así que aprovecho este momento para desearon un gran año con mucho trabajo, nuevo retos, proyectos interesante y mucho aprendizaje. Vale, vale, también con mucha, muchísima felicidad <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h1>INTRODUCCIÓN</h1>
<p>En esta ocasión no habrá mucho texto ya que todo lo he hecho en video, así que este también es mi primer <strong>videotutorial</strong>, espero migrar poco a poco algunos de los post a este formato.</p>
<p>Eso si, contaré rápidamente que veremos y para que sirve esto. Es un <a title="Comandos en nomeva.com" href="http://www.nomeva.com/category/tutoriales/jsfl-tutoriales/comandos-jsfl-tutoriales-tutoriales/" target="_self"><strong>comando</strong></a> para <strong>Guardar el documento</strong> y <strong>Probar la película</strong>, es como hacer <strong>CRT+S</strong> y <strong>CTR+ENTER</strong>, pero de una sola vez. Además y creo que esto es de lo más importante, veremos como modificar los atajos de teclado para sustituir el atajo CTR+ENTER para que ejecute nuestro comando.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8859299&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=8859299&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h1>DESCARGAS</h1>
<p>Bueno, las descargas son en este caso son:</p>
<ul>
<li><strong><a title="Extensión MXP de Comando Save and Test" href="http://www.nomeva.com/wp-content/uploads/2010/01/Save-and-Test.mxp">Extensión</a></strong> auto instalable mediante <strong>Adobe Extensión Manager</strong>. Comando <em>Save and Test</em> <strong>MXP</strong>.</li>
<li><strong><a title="Comando Save and Test - Fichero JSFL" href="http://www.nomeva.com/wp-content/uploads/2010/01/Save-and-Test1.jsfl" target="_blank">Comando</a></strong> fichero <strong>JSFL</strong> para el que lo quiera instalar a mano.</li>
</ul>
<h1>AGRADECIMIENTOS</h1>
<p>En esta ocasión quiero agradecer a mi amigo <strong>Iván</strong> que me ayudó a montar el video y sobre todo a <strong><a title="Juan Delgado (Zárate)" href="http://zarate.tv/" target="_blank">Juan</a></strong> quien me permitió utilizar su <a title="Juan Delgado - Sunny xmas" href="http://www.dandolachapa.com/2009/11/26/juan-delgado-sunny-xmas/" target="_blank"><strong>creación musical</strong></a> para ponerla de fondo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2010/01/20/videotutorial-jsfl-comando-save-and-test/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Reflexión sobre Flash, iPhone y Android</title>
		<link>http://www.nomeva.com/2009/09/07/reflexion-sobre-flash-iphone-y-android/</link>
		<comments>http://www.nomeva.com/2009/09/07/reflexion-sobre-flash-iphone-y-android/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 20:17:44 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Interactividad]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[reflexion]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=429</guid>
		<description><![CDATA[
Esta reflexión surge por un sentimiento, una sensación, un pinchazo interior y las cosquillas o la curiosidad de las nuevas tecnologías y sobre todo la interactividad. También tiene mucho que ver con el actual movimiento que existe en la red sobre el futuro de Flash y el panorama que se vive y se ve venir. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.nomeva.com/wp-content/uploads/2009/09/reflexion_flash_iphone_android.jpg"><img class="aligncenter size-full wp-image-431" title="reflexion flash iphone android" src="http://www.nomeva.com/wp-content/uploads/2009/09/reflexion_flash_iphone_android.jpg" alt="reflexion flash iphone android" width="500" height="280" /></a></p>
<p>Esta reflexión surge por un sentimiento, una sensación, un pinchazo interior y las cosquillas o la curiosidad de las nuevas tecnologías y sobre todo la <strong>interactividad</strong>. También tiene mucho que ver con el actual movimiento que existe en la red sobre el futuro de <strong><a title="Adobe Flash Professional" href="http://www.adobe.com/es/products/flash/" target="_blank">Flash</a></strong> y el <strong>panorama</strong> que se vive y se ve venir. Algunos post interesantes que tratan más o menos el tema que quiero hablar se pueden leer <a title="¿Cual crees que sea el futuro de Flash y Actionscript?" href="http://www.cristalab.com/blog/cual-crees-que-sea-el-futuro-de-flash-y-actionscript-c77283l/" target="_blank">aquí</a> y <a title="Los 7 mitos contra Flex" href="http://www.cristalab.com/blog/los-7-mitos-contra-flex-c78274l/" target="_blank">aquí</a>.</p>
<p>Pero esta reflexión es mía así que además de tener en cuenta todos los factores que en esos post se habla tendremos en cuenta sobre todo las respuestas que he dado al planteamiento hecho por <a title="Charly García" onclick="javascript:pageTracker._trackPageview('/outbound/article/es.wikipedia.org');" href="http://es.wikipedia.org/wiki/Charly_Garc%C3%ADa" target="_blank"><strong>Charly García</strong></a> en <em><a title="Charly García - Deberías saber por qué" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.youtube.com');" href="http://www.youtube.com/watch?v=jONhyQSAsKM" target="_blank">deberías saber por qué</a> </em><span>(la camiseta que me pongo es la de <strong>Flashero</strong>)</span>.</p>
<h1>HISTORIA</h1>
<p>Haciendo un poco de historia para remontarnos a los orígenes o por lo menos a mis <strong>orígenes</strong> <strong>Flasheros</strong> tengo que hablar sobre el bachillerato y la universidad, ayyy aquellos tiempos donde todo lo que <strong>importaba</strong> era <strong>aprender</strong> y sacar buenas notas (jejeje, creo que no ha cambiado tanto, ahora <strong>sigue siendo aprender </strong>y sacar buenos proyectos XD), bueno, como iba diciendo, en aquellos tiempo lo que conocía era <strong>Pascal</strong>, <strong>C</strong>, <strong>Java</strong>, <strong>HTML</strong> y con el tiempo descubrí <strong>Delphi</strong>, <strong>Visual C++</strong>, <strong>FrontPage</strong> (si, tengo que decirlo porque es la verdad, jejeje), <strong>php</strong> y <strong>Javascript</strong>, hasta aquí no dejaba de ser programación pura y dura, existía una mezcla entre el front-end y el back-end, la lógica y la presentación de nuestra aplicación. Pero un día, gracias a un proyecto y aun gran amigo, se mostró ante mis ojos algo que cambiaría para siempre mi vida, la <strong>interactividad</strong>, las <strong>herramientas de dibujo</strong>, las <strong>líneas de tiempo</strong>, los <strong>símbolos</strong> (gráfico, clip de película y botón) y de la noche a la mañana me olvidé completamente de todo lo demás para hacerle un gran hueco en mi cabeza a esa preciosa aplicación que acababa de conocer, <a title="Adobe Flash Professional" href="http://www.adobe.com/es/products/flash/" target="_blank"><strong>Flash</strong></a>.</p>
<h1>MOTIVOS</h1>
<p>Supongo que cada quien tendrá sus motivos, los míos son los siguientes:</p>
<ul>
<li>la facilidad de desarrollo</li>
<li>un entorno de diseño</li>
<li>el alto nivel de interactividad que se podía conseguir</li>
<li>un lenguaje de programación basado en el modelo de eventos</li>
<li>animaciones chulas por código (easing y demás)</li>
<li>reproducción de sonidos</li>
<li>reproducción de videos (si, era posible en aquella época, aunque muy pesado)</li>
<li>cargar y actualizar contenidos sin tener que actualizar la página</li>
</ul>
<p>Todo esto me enamoró y desde ese momento hasta la fecha seguimos felizmente casados.</p>
<h1>ACTUALIDAD</h1>
<p>Hoy en día han cambiado tanto las tecnologías, se han desarrollado <strong>frameworks</strong> sobre todo con Javascript, existe <strong>AJAX</strong>, entornos de desarrollo de alto nivel con los cuales hay que programar muy poco, por ejemplo <strong>Dreamweaver</strong> facilita enormemente la vida a diseñadores y desarrolladores, <strong>HTML 5</strong> quiere (pero yo la verdad lo veo difícil) utilizar una etiqueta <strong><a title="Tag VIDEO" href="http://www.w3schools.com/tags/html5_video.asp" target="_blank">VIDEO</a></strong> con lo cual una pieza importante de Flash empieza a moverse (no, estoy de acuerdo, aunque lo leo muy a menudo y mucha gente habla así de esto, pero y que pasa con <strong><a title="Red5" href="http://osflash.org/red5" target="_blank">Red5</a></strong> y <strong><a title="Flash Media Server" href="http://www.adobe.com/es/products/flashmediaserver/" target="_blank">Flash Media Server</a></strong>, que hace <strong>HTML</strong> contra eso) y algunas cosas más que de alguna forma y otra han hecho a muchas personas plantearse la <strong>tecnología</strong> a <strong>utilizar</strong> en sus <strong>desarrollos</strong>.</p>
<h1>MI ACTUALIDAD</h1>
<p>Desde que me enamoré hasta ahora hemos pasado por muchas actualizaciones y nuevas versiones, se desarrollo e implementó <strong>ActionScript 2, ActionScript 3, Flex, Flash Lite</strong> y todo esto me encantó, pero volviendo a mis motivos principales, siento que en <strong>esencia</strong> la herramienta <strong>no ha cambiado</strong> mucho.</p>
<h1>FRUSTRACIÓN</h1>
<p>En mi caso, y este caso se puede extrapolar a muchos casos más que he podido comprobar hablando con mucha gente y leyendo por aquí o por allá, sigo desarrollando con <strong>ActionScript 2</strong>, por limitaciones muy importante y es que nuestros cliente (empresas grandes como bancos y farmacéuticas entre otros) no tienen en todos sus puestos de trabajo estandarizado un reproductor de Flash avanzado, así es que actualmente desarrollo para <strong>Flash Player 7</strong>. Otro factor muy importante es la <strong>interactividad</strong> que se puede conseguir a través de la <strong>cámara</strong> o el <strong>micrófono</strong>, pero al final pasa lo mismo que el player, los usuarios finales no lo tienen con lo cual hay que hacer desarrollos que funcionen en el 100% de los puestos de trabajo, o sea que otro <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> .</p>
<h1>ROMANCE FUERA DEL MATRIMONIO</h1>
<p>He conocido a un par de chicas muy atractivas últimamente, me quieren, me invitan a salir, comparten y coquetean conmigo con todas sus funcionalidades apasionantes, han podido mostrar al mundo unas cuantas cositas a tener en cuenta:</p>
<ul>
<li>acelerómetro</li>
<li>gps</li>
<li>brújula</li>
<li>facilidad de uso e interacción con el micrófono</li>
<li>facilidad de uso e interacción con la cámara</li>
</ul>
<p>Esto es lo que me ofrecen <strong><a title="iPhone SDK" href="http://developer.apple.com/iphone/" target="_blank">iPhone SDK</a></strong> y <strong><a title="Android SDK" href="http://developer.android.com/sdk/1.5_r3/index.html" target="_blank">Android SDK</a></strong> sobre lo que ya tengo con <a title="Adobe Flash Professional" href="http://www.adobe.com/es/products/flash/" target="_blank"><strong>Flash</strong></a>, pero un factor <strong>importantísimo</strong> que es indudablemente una curva que te deja viendo estrellitas y pensando en ella todo el día es la perfecta <strong>combinación</strong> entre <strong>hardware</strong> y <strong>software</strong>, ya que no hay que luchar contra extrañas características de equipos o altos y bajos rendimientos, existe un muy alto control de calidad que nos garantiza la perfecta funcionalidad de nuestros desarrollos en los dispositivos finales.</p>
<h1>VISITAS FUERA DE CASA</h1>
<p>He visitado y jugado un poco con estos SDK&#8217;s y la verdad es que la <strong>experiencia</strong> ha sido <strong>muy grata</strong>, pues están muy completos y sobre todo cuentan con una base muy sólida para empezar a desarrollar, cosa que en principio flash no tiene por defecto. Pero sobre todo lo que me tiene más inquieto y <strong>feliz</strong> (pienso en ella todo el día), es la nueva <strong>interactividad</strong> que se consigue con estos dispositivos.</p>
<h1>CONCLUSIÓN</h1>
<p>Cada quién hace las cosas por los motivos que lo han llevado a ello, en mi caso lo he expuesto arriba y creo que como toda relación hay que mantenerse activos y de vez en cuando hacer regalitos, dar sorpresas, sonreir y aprender juntos ante lo que la vida nos pone o tomar al toro por lo cuernos y vivir aventuras, pero creo que mi relación con Flash lleva un tiempo de monotonía por los motivos que he expuesto aquí. Con todo esto no quiero decir que me voy a ir a desarrollar con otro lenguaje (que ya lo estoy haciendo) sino que simplemente quiero <strong>compartir</strong> esta <strong>reflexión</strong> porque creo que algo importante a <strong>tener en cuenta </strong>en el <strong>panorama</strong> que se vive.</p>
<p>Entiendo que no todos pensamos igual y que habrá personas que verán las cosas desde otro punto de vista, así que cualquier comentario será bienvenido.</p>
<p>Saludos!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/09/07/reflexion-sobre-flash-iphone-y-android/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Subflash 2009 &#8211; Fotos y más</title>
		<link>http://www.nomeva.com/2009/09/04/subflash-2009-fotos-y-mas/</link>
		<comments>http://www.nomeva.com/2009/09/04/subflash-2009-fotos-y-mas/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 09:41:27 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[Subflash]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=418</guid>
		<description><![CDATA[Bueno ahora si ya con más calma puedo escribir otro poco sobre el Subflash, cuando le cuento a la gente las cosas que se viven ahí no me lo creen, así que para dar fé de ello a continuación podréis ver algunas fotos que son la evidencia fotográfica de todo cuanto se dice de Subflash.
Poner [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno ahora si ya con más calma puedo escribir otro poco sobre el <strong><a title="Talleres de veranoz Subflash 2009" href="http://www.subflash.com/2009/06/talleres-de-verano-2009/" target="_blank">Subflash</a></strong>, cuando le cuento a la gente las cosas que se viven ahí no me lo creen, así que para dar fé de ello a continuación podréis ver algunas fotos que son la evidencia fotográfica de todo cuanto se dice de Subflash.</p>
<p>Poner atención a esta pequeña selección donde se puede ver un poco de todo, la convivencia, la <strong>felicidad</strong> de los asistentes, los <strong>frikis</strong> que son pues no dejan el ordenador, las <strong>comidas </strong>acompañados de <strong>grandes personajes</strong> del mundo digital, el encuentro de <strong>fútbol</strong>, la llegada de uno que de verdad ama a Subflash, nuestro querido <a title="Flash-db de Jorge Solis" href="http://www.flash-db.com/" target="_blank"><strong>Jorge Solis</strong></a> que vino desde Argentina (jejeje, cuestiones de trabajo decía <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) y como decía <strong><a title="Alex" href="http://www.electroduendes.com/" target="_blank">Alex</a></strong>:</p>
<blockquote><p><a title="Talleres de veranoz Subflash 2009" href="http://www.subflash.com/2009/06/talleres-de-verano-2009/" target="_blank">Subflash</a> se lleva <strong>dentro</strong> del <strong>corazón</strong></p></blockquote>
<p><a href="http://www.nomeva.com/wp-content/uploads/2009/09/se_les_nota_lo_bien_que_lo_pasan.jpg"><img class="size-thumbnail wp-image-424  alignnone" title="Se les nota lo bien que lo pasan" src="http://www.nomeva.com/wp-content/uploads/2009/09/se_les_nota_lo_bien_que_lo_pasan-150x150.jpg" alt="Se les nota lo bien que lo pasan" width="150" height="150" /> </a><a href="http://www.nomeva.com/wp-content/uploads/2009/09/los_frikis.jpg"><img class="size-thumbnail wp-image-423  alignnone" title="Los frikis que no pueden dejar los ordenadores" src="http://www.nomeva.com/wp-content/uploads/2009/09/los_frikis-150x150.jpg" alt="Los frikis que no pueden dejar los ordenadores" width="150" height="150" /></a><a href="http://www.nomeva.com/wp-content/uploads/2009/09/siempre_unidos.jpg"><img class="size-thumbnail wp-image-421 alignnone" title="Siempre unidos" src="http://www.nomeva.com/wp-content/uploads/2009/09/siempre_unidos-150x150.jpg" alt="Siempre unidos" width="150" height="150" /> </a><a href="http://www.nomeva.com/wp-content/uploads/2009/09/si_hay_futbol_no_solo_ordenadores.jpg"><img class="size-thumbnail wp-image-427 alignnone" title="Si hay fútbol, no solo ordenadores" src="http://www.nomeva.com/wp-content/uploads/2009/09/si_hay_futbol_no_solo_ordenadores-150x150.jpg" alt="Si hay fútbol, no solo ordenadores" width="150" height="150" /> </a><a href="http://www.nomeva.com/wp-content/uploads/2009/09/si_existen_y_son_personas.jpg"><img class="size-thumbnail wp-image-426 alignnone" title="Si existen y son personas" src="http://www.nomeva.com/wp-content/uploads/2009/09/si_existen_y_son_personas-150x150.jpg" alt="Si existen y son personas" width="150" height="150" /></a><a href="http://www.nomeva.com/wp-content/uploads/2009/09/se_lleva_en_el_corazon.jpg"> <img class="size-thumbnail wp-image-425 alignnone" title="Se lleva en el corazon" src="http://www.nomeva.com/wp-content/uploads/2009/09/se_lleva_en_el_corazon-150x150.jpg" alt="Se lleva en el corazon" width="150" height="150" /></a></p>
<p>He colgado de <strong><a title="Fotos de Subflash 2009" href="http://picasaweb.google.com/supremo.tata/Subflash2009SanVicenteDelRaspeig#" target="_blank"><strong>picasa</strong></a></strong> las fotos que hice este años del Subflash, así que ahí pueden ver el resto de la historia.</p>
<p>Saludos!!!</p>
<ul>
<li><a title="Fotos de Subflash 2009" href="http://picasaweb.google.com/supremo.tata/Subflash2009SanVicenteDelRaspeig#" target="_blank"><strong>Fotos de Subflash 2009</strong></a></li>
<li><strong><a title="Subflash 2009 - Vivencias, cotilleos y más" href="http://www.nomeva.com/2009/09/01/subflash-2009-vivencias-cotilleos-y-mas/" target="_blank">Subflash 2009 &#8211; Vivencias, cotilleos y más</a><br />
</strong></li>
<li><a title="Fotos de Subflash 2008" href="http://picasaweb.google.com/supremo.tata/TalleresSubFlah08#" target="_blank"><strong>Fotos de Subflash 2008</strong></a></li>
<li><strong><a title="Subflash 2008, vivencias, recuerdos, aventuras y mucho más" href="http://www.nomeva.com/2008/09/03/subflash-2008-vivencias/" target="_blank">Subflash 2008, vivencias, recuerdos, aventuras y mucho más</a><br />
</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/09/04/subflash-2009-fotos-y-mas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial JSFL &#8211; Crear documentos FLA dinámicamente</title>
		<link>http://www.nomeva.com/2009/08/28/tutorial-jsfl-crear-documentos-fla-dinamicamente/</link>
		<comments>http://www.nomeva.com/2009/08/28/tutorial-jsfl-crear-documentos-fla-dinamicamente/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 07:49:10 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[fla dinamicamente]]></category>
		<category><![CDATA[linea de comandos]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=399</guid>
		<description><![CDATA[
Por fin ya de vuelta de las vacaciones y retomando nuevamente el mando de mi vida estoy aquí para compartir otro tutorial sobre JSFL, para ser exactos no es ni un Comando ni un Panel ya que la ejecución de este JSFL se hace automáticamente desde la línea de comandos mediante una llamada desde una [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center; "><img class="aligncenter size-full wp-image-400" title="fla on the fly" src="http://www.nomeva.com/wp-content/uploads/2009/08/fla_on_the_fly.jpg" alt="fla on the fly" width="320" height="200" /></p>
<p style="text-align: left;">Por fin ya de vuelta de las vacaciones y retomando nuevamente el mando de mi vida estoy aquí para compartir otro <a title="Tutoriales en nomeva.com" href="http://www.nomeva.com/category/tutoriales/" target="_blank"><strong>tutorial</strong></a> sobre <a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank"><strong>JSFL</strong></a>, para ser exactos no es ni un <a title="Tutorial JSFL - Introducción a comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank"><strong>Comando</strong></a> ni un <a title="Tutorial JSFL - Introduccióna Paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank"><strong>Panel</strong></a> ya que la ejecución de este JSFL se hace automáticamente desde la línea de comandos mediante una llamada desde una aplicación AIR o simplemente haciendo doble clic.</p>
<h1>HISTORIA</h1>
<p>El otro día hablando con <strong><a title="Iván Gajate" href="http://www.yporqueno.es/blog/" target="_blank">Iván Gajate</a></strong> me preguntaba sobre la forma de <strong>crear FLA&#8217;s dinámicamente</strong> y automáticamente me vino a la cabeza <strong>JSFL </strong>aunque no es la súper solución porque lo que realmente queríamos conseguir es utilizar una <strong>librería en C</strong> para generar FLA&#8217;s con ciertas características peculiares como el tamaño, el color y los fotogramas por segundo, pero como ninguno de los dos es un experto programador en C pues optamos por el camino de <strong>JSFL </strong>que me gusta y controlo más.</p>
<h1>LA IDEA</h1>
<p>Desde la aplicación AIR se generará un fichero de texto que nos servirá para configurar las características del FLA que se va a crear y luego simplemente ejecutamos el JSFL. Ya está, así de simple.</p>
<h2>COSAS A DESTACAR (o que vamos a aprender)</h2>
<p>Con este tutorial aprenderemos:</p>
<ul>
<li>Otra forma de <strong><a title="Ejecución de scripts JSFL" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fe8.html" target="_blank">ejecutar</a></strong> los ficheros JSFL.</li>
<li>El uso del objeto <a title="Objeto FLfile" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fa1.html" target="_blank"><strong>FLfile</strong></a>, exactamente del método <a title="Método read del objeto FLfile" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7adf.html" target="_blank"><strong>read</strong></a>.</li>
<li>Que podemos hacer más cosas de las que parece a simple vista, por ejemplo a cerrar la propia aplicación.</li>
</ul>
<h1>MANOS A LA OBRA</h1>
<h2>Parte 1: JSFL desde la línea de comandos</h2>
<p>Hasta ahora hemos visto tres formas de utilizar JSFL, a través de <a title="Tutorial JSFL - Introducción a comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank"><strong>Comando</strong></a>, a través de <a title="Tutorial JSFL - Introduccióna Paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank"><strong>Panel</strong></a> y a través de <a title="Tutorial JSFL - Introducción a herramientas (tools)" href="http://www.nomeva.com/2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/" target="_blank"><strong>Herramientas</strong></a>, pero esas no son todas las formas en las que podemos utilizar <strong>JSFL </strong>ya que existe una más que es de la que vamos a echar mano hoy, me refiero a la ejecución de JSFL mediante <strong>línea de comandos</strong>.</p>
<p>Me explico, dentro de nuestro equipo tenemos:</p>
<p><em>lugar_de_instalacion_de_flash\flash.exe</em></p>
<p>y digamos, por ponerle un nombre, que en<strong> C </strong>tenemos una carpeta que se llama <strong>ejemplo </strong>y que dentro de ejemplo tenemos un fichero que se llama <strong>generar_fla_dinamicamente.jsfl</strong>, entonces podríamos decir desde la línea de comandos lo siguiente:</p>
<p><em>&#8220;lugar_de_instalacion_de_flash\<strong>flash.exe</strong>&#8221; &#8220;C:\ejemplo\<strong>generar_fla_dinamicamente.jsfl</strong>&#8220;</em></p>
<p>esto ejecutaría Flash y automáticamente cargaría el JSFL para ejecutarlo, fácil no?, que frikis que sómos, jejeje.</p>
<h2>Parte 2: Leer el fichero de configuración</h2>
<p>Ahora que ya estamos en nuestro ámbito, recordemos que JSFL sólo funciona con Flash abierto y gracias a la ejecución de JSFL mediante línea de comandos hemos conseguido abrir Flash ya podemos continuar con el proceso del JSFL. Como hemos dicho vamos a leer un fichero de texto que la aplicación AIR ha generado, para seguir con la buena costumbre y quizá también por casualidad o no se muy bien porque, la aplicación AIR genera ese fichero en <strong>C </strong>dentro de la carpeta <strong>ejemplo</strong>.</p>
<p>El contenido del fichero es muy simple, se encuentran <strong>emparejados </strong><em>variable </em>y <em>valor </em>separados por <strong>ampersand</strong> (<strong>&amp;</strong>), como se de variables GET se tratara. Por ejemplo:</p>
<p><em>frameRate=50&amp;backgroundColor=#00FFFF&amp;width=800&amp;height=200</em></p>
<p>Esto ahora mismo no viene al caso, pero bueno ya lo escribí así que ahí se quedará y más tarde que lo necesitemos hablaremos de él. Lo que realmente necesitamos es utilizar el objeto <a title="Objeto FLfile" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fa1.html" target="_blank"><strong>FLfile</strong></a> para que con ayuda del método <a title="Método read del objeto FLfile" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7adf.html" target="_blank"><strong>read</strong></a> leamos el fichero de configuración, de tal forma que nuestro código quedaría así:</p>
<pre lang="javascript">var sConfiguration = FLfile.read("ruta del fichero de configuración");</pre>
<p>Ahora si, dentro de la variable <strong>sConfiguration </strong>tenemos el contenido del fichero de configuración de tal forma que vamos a tratar el contenido para utilizarlo más adelante, para esto vamos a utilizar funciones básicas de <strong>JavaScript</strong>, es decir <strong>splits </strong>y <strong>bucles </strong>para separar y obtener las variables y su valor, al final lo guardaremos en un <em>array asociativo</em> para tener todas las variables en un mismo sitio y listo, esto lo conseguimos con el siguiente código:</p>
<pre lang="javascript">var aConfiguration = new Array();
var aValues = sConfiguration.split("&amp;");
var nTotalValues = aValues.length;
for(var i = 0; i &lt; nTotalValues; i++)
{
	var aTmp = aValues[i].split("=");
	aConfiguration[aTmp[0]] = aTmp[1];
}</pre>
<h2>Parte 3: Crear el nuevo documento, configurarlo y cerrar Flash</h2>
<p>Bueno hasta ahora tenemos acceso al DOM de Flash ya que lo hemos abierto mediante línea de comandos, también tenemos una configuración almacenada en un array asociativo ya sólo nos queda crear el documento y configurarlo, esto lo conseguimos de dos formas, primero lo primero, para crear el documento Fla utilizaremos el método <a title="Método createDocument del objeto fl" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7bab.html" target="_blank"><strong>createDocument </strong></a>del objeto <strong><a title="Objeto fl" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fa0.html" target="_blank">fl</a></strong>, este método nos devuelve una referencia al documento creado, lo vamos a almacenar en una variable para más adelante modificar sus propiedades, el ejemplo de la creación del documento es el siguiente:</p>
<pre lang="javascript">var oDoc = fl.createDocument();</pre>
<p>Ahora simplemente tenemos que configurar los valores que nos indicaron en el fichero de configuración, que ahora ya los tenemos en un <em>array asociativo</em>, así que con una comprobación y una asignación lo tendremos todo resuelto. En este caso deseamos modificar el <a title="Propiedad backgroundColor del objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7e5a.html" target="_blank"><strong>color de fondo</strong></a>, los <a title="Propiedad frameRate del objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7e54.html" target="_blank"><strong>fotogramas por segundo</strong></a>, el <a title="Propiedad height del objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7e53.html" target="_blank"><strong>alto</strong></a> y el <a title="Propiedad width del objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7d3d.html" target="_blank"><strong>ancho</strong></a> del documento, así que pare esto simplemente tendremos que modificar esas propiedades de nuestro objeto <strong><a title="Objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7ffa.html" target="_blank">Document</a></strong>. El ejemplo es el siguiente:</p>
<pre lang="javascrip">if(aConfiguration["backgroundColor"])
	oDoc.backgroundColor = aConfiguration["backgroundColor"];

if(aConfiguration["frameRate"])
	oDoc.frameRate = Number(aConfiguration["frameRate"]);

if(aConfiguration["width"])
	oDoc.width = Number(aConfiguration["width"]);

if(aConfiguration["height"])
	oDoc.height = Number(aConfiguration["height"]);</pre>
<p>Y listo, ya hemos configurado el nuevo documento, ahora simplemente nos queda guardar el documento y cerrar Flash. Para guardar el documento utilizaremos el método <a title="Método saveDocument del objeto fl" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7d12.html" target="_blank"><strong>saveDocument</strong></a> del objeto <strong><a title="Objeto fl" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fa0.html" target="_blank">fl</a></strong>, éste método recibe dos parámetros, en el primero indicamos el documento que deseamos guardar y en el segundo la ruta en la que deseamos guardar el documento, por ejemplo:</p>
<pre lang="javascrip">fl.saveDocument(oDoc, "ruta_donde_queremos_guardar_el_documento\documento_creado_dinamicamente.jsfl")</pre>
<p>Vale pues ahora vamos a una de las cosas que más me gusta y sorprende, quizá sea un tontería pero saber que tenemos ese poder me gusta mucho, jejeje. Vamos a cerrar Flash, ya que una vez que hemos creado el documento, lo hemos configurado y lo hemos guardado, ya no necesitamos tener abierto Flash para nada, así que allá vamos. Esta tarea la conseguimos haciendo uso del método <strong><a title="Método quit del objeto fl" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7b94.html" target="_blank">quit</a></strong> del objeto <strong><a title="Objeto fl" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fa0.html" target="_blank">fl</a></strong>, éste método recibe un parámetro opcional para preguntar al usuario sobre guardar los cambios, en nuestro caso no lo queremos así que pasaremos false, el ejemplo es el siguiente:</p>
<pre lang="javascrip">fl.quit(false);</pre>
<p>Y listo con esto terminamos este Tutorial que espero os sea de utilidad o que de una vez por todas los haga pensar en utilizar más a menudo JSFL.</p>
<h1>DESCARGAS</h1>
<p>En este caso pongo un <a title="Ejemplo del Tutorial de JSFL sobre creación dinámica de documentos fla" href="http://www.nomeva.com/wp-content/uploads/2009/08/tutorial_jsfl_creacion_dinamica_de_documentos_fla.zip" target="_blank"><strong>zip</strong></a> donde está todo preparado para funcionar en la carpeta ejemplo en el disco duro C, si lo quieres modificar simplemente cambia la ruta en la primera variable del fichero JSFL, la variable <em>sPath</em>.</p>
<p>Saludos, para cualquier cosa, dudas o comentarios aquí estaré.</p>
<h3>Entradas relacionadas</h3>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="../2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="../2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL &#8211; Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="../2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="../2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="../2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL &#8211; Introducción a Paneles</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save" href="../2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL &#8211; Panel Auto Save</a></li>
<li><a title="Tutorial JSFL - Guardar copia FLA 1/2 (comando)" href="../2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/" target="_blank">Tutorial JSFL &#8211; Guardar copia FLA 1/2 (comando)</a></li>
<li><a title="Tutorial JSFL - Introducción a herramientas (tools)" href="http://www.nomeva.com/2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/" target="_blank">Tutorial JSFL &#8211; Introducción a herramientas (tools)<strong><br />
</strong></a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/08/28/tutorial-jsfl-crear-documentos-fla-dinamicamente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial JSFL &#8211; Introducción a herramientas (tools)</title>
		<link>http://www.nomeva.com/2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/</link>
		<comments>http://www.nomeva.com/2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 15:09:38 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[herramienta]]></category>
		<category><![CDATA[mxp]]></category>
		<category><![CDATA[tablas]]></category>
		<category><![CDATA[tables]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=389</guid>
		<description><![CDATA[
Este es un post que tenía pendiente desde hace tiempo, en esta ocasión voy a hablar sobre las herramientas (tools) de Flash y de como personalizarlas o como es nuestro caso crear una nueva herramienta con JSFL.
INTRODUCCIÓN
Recuerdo en los tiempos de Flash 4 que fué cuando empecé con Flash que por comodidad y sobre todo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-390" title="lego briks" src="http://www.nomeva.com/wp-content/uploads/2009/07/lego_briks.jpg" alt="lego briks" width="290" height="190" /></p>
<p>Este es un post que tenía pendiente desde hace tiempo, en esta ocasión voy a hablar sobre las <strong>herramientas</strong> (tools) de <strong>Flash</strong> y de como personalizarlas o como es nuestro caso crear una nueva herramienta con <strong>JSFL</strong>.</p>
<h1>INTRODUCCIÓN</h1>
<p>Recuerdo en los tiempos de <strong>Flash 4</strong> que fué cuando empecé con <strong>Flash</strong> que por comodidad y sobre todo por desconocimiento de la aplicación, quería hacer <strong>tablas</strong> en <strong>Flash</strong> y por mucho que busqué no encontré una herramienta que me sirviera para esto, así que al final aprendí a utilizar las <strong>herramientas de dibujo</strong> y a través de cuadros y líneas con las herramientas <strong>rectángulo</strong> y <strong>trazo</strong> conseguí hacer las tablas que quería, luego con el tiempo descubrí el panel alineación y distribución y con eso perfeccioné la tarea y me fué más fácil hacer estas tablas.</p>
<p>Bueno, pues la idea es que vamos a crear una herramienta para crear tablas de una manera fácil como si de rectángulos se tratara.</p>
<h1>DESARROLLO</h1>
<p><strong>JSFL</strong> nos permite extender la funcionalidad de la aplicación, como <a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank"><strong>hemos hablado</strong></a> ya en otras ocasiones, lo podemos hacer <strong>con </strong><a title="Tutorial JSFL - Introducción a comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank"><strong>comandos</strong></a> y <a title="Tutorial JSFL - Introducción a paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank"><strong>paneles</strong></a>, pero también existe otro modo de extender y automatizar procesos, me refiero a la creación de herramientas.</p>
<p>Las herramientas al igual que los comandos y paneles se programan con <strong><a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank">JSFL</a> </strong>y se almacenan en las siguiente rutas respectivamente por sistema operativo:</p>
<ul>
<li><strong>Windows Vista</strong></li>
</ul>
<p><em>unidad de arranque</em>\Users\<em>nombre de usuario</em>\Local Settings\Application Data\Adobe\Flash<br />
<strong></strong></p>
<p>CS4\<em>idioma</em>\Configuration\Tools<span> </span></p>
<ul>
<li><strong>Windows XP</strong></li>
</ul>
<p><em>unidad de arranque</em>\Documents and Settings\<em>usuario</em>\Local Settings\Application Data\Adobe\Flash<br />
<strong></strong></p>
<p>CS4\<em>idioma</em>\Configuration\Tools<span> </span></p>
<ul>
<li><strong>Mac OS X</strong></li>
</ul>
<p>Macintosh HD/Usuarios/<em>nombre de usuario</em>/Librería/Application Support/Adobe/Flash</p>
<p><strong></strong></p>
<p>CS4/<em>idioma</em>/Configuration/Tools</p>
<p>A diferencia de los comandos y los paneles en las herramientas tenemos acceso a funciones y métodos de nivel superior que nos ayudan a desarrollar y controlar el estado de nuestra herramienta, las funciones disponibles son las siguiente:</p>
<ul>
<li> activate()</li>
<li> configureTool()</li>
<li> deactivate()</li>
<li> keyDown()</li>
<li> keyUp()</li>
<li> mouseDoubleClick()</li>
<li> mouseDown()</li>
<li> mouseMove()</li>
<li> mouseUp()</li>
<li> notifySettingsChanged()</li>
<li> setCursor()<span> </span></li>
</ul>
<p>Las que utilizaremos para la creación de la herramienta <strong>tablas</strong> serán, <strong><a title="Función activate" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7765.html" target="_blank">activate</a></strong> que se dispara cuando la herramienta es seleccionada por el usuario, <strong><a title="Función deactivate" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7760.html" target="_blank">deactivate</a></strong> que se dispara cuando el usuario cambia a otra herramienta, <strong><a title="Función notifySettingsChanged" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7758.html" target="_blank">notifySettingsChanged</a></strong> que se dispara cuando el usuario modifica las propiedades de nuestra herramienta, <strong><a title="Función mouseDown" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-775b.html" target="_blank">mouseDown</a></strong>, <strong><a title="Función mouseMove" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-775a.html" target="_blank">mouseMove </a></strong>y <strong><a title="Función mouseUp" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7759.html" target="_blank">mouseUp</a></strong> que se disparan cuando el usuario hace lo que el nombre de la función dice <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . Esto con respecto a los <strong>eventos</strong> para controlar nuestra herramienta.</p>
<h3>Pero ¿cómo accedemos a la herramienta?</h3>
<p>Pues fácil, como todo en JSFL son objetos necesitamos obtener la referencia a la herramienta activa que será nuestra herramienta, esto lo hacemos con la propiedad <strong><a title="Propiedad activeTool" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7f18.html" target="_blank">activeTool</a></strong> del objeto <strong><a title="Objeto Tools" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fec.html" target="_blank">tools</a></strong>, en el ejemplo siguiente se muestra como obtener una referencia a la herramienta.</p>
<pre lang="javascript">theTool = fl.tools.activeTool;</pre>
<h3>Guay, ¿Y para qué quiero tener una referencia al objeto herramienta?</h3>
<p>Pues para asignar a nuestra herramienta nombre, tooltip, icono, opciones, especificar el tipo para el inspector de propiedades por ejemplo y muchas más cosas. Como se muestra a continuación.</p>
<pre lang="javascript">// Set the standard tool information
theTool = fl.tools.activeTool;
theTool.setToolName("Tablas");
theTool.setIcon("Tablas.png");
theTool.setMenuString("Herramienta Tablas");
theTool.setToolTip("Herramienta Tablas");
theTool.setOptionsFile("Tablas.xml");

// This tool uses the Shape property inspector
theTool.setPI( "shape" );</pre>
<h3>Vale, vale, ya me entero, pero ¿Cómo dibujo?</h3>
<p>Ah, muy cierto, pues para pintar / dibujar debemos hacer una nota importante y es que tenemos dos momento de dibujo:</p>
<ul>
<li>El momento de la previsualización</li>
<li>El momento del dibujo final</li>
</ul>
<p>Para el momento de la pre-visualización utilizaremos el objeto <a title="Objeto drawingLayer" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7ff6.html" target="_blank"><strong>drawingLayer</strong></a> y sus métodos <strong><a title="Método moveTo del objeto drawingLayer" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7c61.html" target="_blank">moveTo</a></strong> y <strong><a title="Método lineTo del objeto drawingFrame" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7c62.html" target="_blank">lineTo</a></strong> que son idénticos a los que utilizamos en la API de dibujo de ActionScript y los método <strong><a title="Método beginFrame del objeto drawingLayer" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7c62.html" target="_blank">beginFrame</a></strong> y <strong><a title="Método endFrame del objeto drawingLayer" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7c64.html" target="_blank">endFrame</a> </strong>para indicar el incio y el fin del dibujo de la pre-visualización. Por ejemplo, con el siguiente código dibujaríamos un cuadro de 20&#215;20 en 0, 0:</p>
<pre lang="javascript">fl.drawingLayer.beginFrame();
fl.drawingLayer.moveTo(0, 0);
fl.drawingLayer.lineTo(20, 0);
fl.drawingLayer.lineTo(20, 20);
fl.drawingLayer.lineTo(0, 20);
fl.drawingLayer.lineTo(0, 0);
fl.drawingLayer.endFrame();</pre>
<p>Y para el momento del dibujo final utilizaremos también el objeto <a title="Objeto drawingLayer" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7ff6.html" target="_blank"><strong>drawingLayer</strong></a> para crear un objeto <strong><a title="Objeto Path" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7f3e.html" target="_blank">path</a></strong> con el método <strong><a title="Método newPath del objeto drawingLayer" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7c5d.html" target="_blank">newPath</a>,</strong> luego utilizaremos los métodos <strong><a title="Método addPoint del objeto Path." href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-79d9.html" target="_blank">addPoint</a></strong> y <strong><a title="Método makeShape del objeto Path." href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-79d6.html" target="_blank">makeShape</a></strong> para crear nuestro dibujo. Por ejemplo:</p>
<pre lang="javascript">var myPath = fl.drawingLayer.newPath();
myPath.addPoint(0, 20);
myPath.addPoint(20, 20);
myPath.addPoint(20, 0);
myPath.addPoint(0, 0);
myPath.makeShape(false, true);</pre>
<h3>Perfecto, y ahora ¿cómo modifico las propiedades de mi herramienta?</h3>
<p>Vale, para esto debemos recordar que en un principio utilizamos el método <a title="Método setOptionsFile del objeto Tool." href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-77f2.html" target="_blank"><strong>setOptionsFile</strong></a> del objeto <strong><a title="Objeto Tool." href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7f33.html" target="_blank">tool</a></strong> donde indicamos un fichero xml, este fichero xml contiene la definición de las propiedades que utilizaremos en la herramienta. Por ejemplo para la herramienta tabla, utilizo dos propiedades <strong>nColumns</strong> y <strong>nRows</strong>. Un ejemplo del fichero xml de configuración es el siguiente:</p>
<pre lang="xml">property name="Columnas: " variable="nColumns" min="1" max="100" defaultValue="3" type="Number"
property name="Filas: " variable="nRows" min="1" max="100" defaultValue="3" type="Number"</pre>
<p>Cuando el usuario modifique estos valores en el panel de propiedades se nos notificará en el evento (la función) <strong><a title="Función notifySettingsChanged" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7758.html" target="_blank">notifySettingsChanged</a><span style="font-weight: normal;">. Un ejemplo de como utilizar los valores modificados es el siguiente:</span></strong></p>
<pre lang="javascript">function notifySettingsChanged()
{
	var theTool = fl.tools.activeTool;

	this.nColumns = theTool.nColumns;
	this.nRows = theTool.nRows;
}</pre>
<p><strong><span style="font-weight: normal;">Y listo, con esto ya tenemos controladas todas las fases del diseño de una herramienta.</span></strong></p>
<h1>EJEMPLOS</h1>
<p>A continuación un par de ejemplos de lo que podemos conseguir de una manera sencilla con esta herramienta.</p>
<p style="text-align: center;"><a href="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-2.png"><img class="aligncenter size-thumbnail wp-image-392" title="Ejemplo 1 Herramienta Tablas" src="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-2-300x187.png" alt="Ejemplo 1 Herramienta Tablas" width="300" height="187" /></a></p>
<p><a href="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-2.png"></a><a href="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-3.png"><img class="aligncenter size-medium wp-image-393" title="Ejemplo 2 Herramienta Tablas" src="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-3-300x187.png" alt="Ejemplo 2 Herramienta Tablas" width="300" height="187" /></a></p>
<p><img class="aligncenter size-full wp-image-395" title="herramienta tablas" src="http://www.nomeva.com/wp-content/uploads/2009/07/herramienta_tablas.png" alt="herramienta tablas" width="313" height="412" /></p>
<h1>DESCARGAS</h1>
<p>Tenemos dos tipos de descargas, para instalar simplemente la <strong>herramienta</strong> <strong>Tablas</strong> y para descargar el JSFL:</p>
<ul>
<li><a title="Extensión Herramienta Tablas" onclick="javascript:pageTracker._trackPageview('/downloads/tutoriales/jsfl/Escribir_palabra_mxp.zip');" href="http://www.nomeva.com/tutoriales/jsfl/herramienta_tablas.mxp" target="_blank">Extensión</a> <strong>Herramienta Tablas</strong> (instalador mxp).</li>
<li><a title="Herramienta Tablas" href="http://www.nomeva.com/tutoriales/jsfl/herramienta_tablas.zip" target="_blank">Paquete zip</a> con la <strong>Herramienta Tablas</strong> (ficheros jsfl, xml y png).</li>
</ul>
<h1>INSTALACIÓN</h1>
<p>Una vez que se haya instalado la extensión debemos asignarla a un grupo de herramienta desde el panel <strong>Personalizar panel de herramientas</strong> y listo ya se puede utilizar.</p>
<p><a href="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-4.png"><img class="aligncenter size-medium wp-image-394" title="Personalizar panel herramientas" src="http://www.nomeva.com/wp-content/uploads/2009/07/imagen-4-300x127.png" alt="Personalizar panel herramientas" width="300" height="127" /></a></p>
<p>Dudas, sugerencias o comentarios, aquí estaré.</p>
<p>Saludos.</p>
<h3>Entradas relacionadas</h3>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="http://www.nomeva.com/2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL &#8211; Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="http://www.nomeva.com/2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="http://www.nomeva.com/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL &#8211; Introducción a Paneles</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save" href="http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL &#8211; Panel Auto Save</a></li>
<li><a title="Tutorial JSFL - Guardar copia FLA 1/2 (comando)" href="http://www.nomeva.com/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/" target="_blank">Tutorial JSFL &#8211; Guardar copia FLA 1/2 (comando)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Circuito de carreras con coche en Flash AS2 &amp; AS3</title>
		<link>http://www.nomeva.com/2009/07/14/circuito-de-carreras-con-coche-en-flash-as2-as3/</link>
		<comments>http://www.nomeva.com/2009/07/14/circuito-de-carreras-con-coche-en-flash-as2-as3/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 18:38:00 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[as2]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[carreras]]></category>
		<category><![CDATA[circuito]]></category>
		<category><![CDATA[coche]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=382</guid>
		<description><![CDATA[
Después de escribir este post mi buen amigo Iván aportó una grandísima idea, un diseño y me dió más tareas para el tren, mi lado friki sentía cosquillas por hacerlo con la API de dibujo de Flash, pero para variar un poco en esta ocasión lo he hecho en ActionScript 2.0 y en ActionScript 3.0 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-383 aligncenter" title="outrun lego" src="http://www.nomeva.com/wp-content/uploads/2009/07/outrun_lego.png" alt="outrun lego" width="312" height="150" /></p>
<p>Después de escribir <a title="Circuito de carreras en Flash" href="http://www.nomeva.com/2009/07/09/circuito-carreras-flash-actionscript/" target="_blank">este</a> post mi buen amigo Iván aportó una grandísima idea, un diseño y me dió más tareas para el tren, mi lado friki sentía cosquillas por hacerlo con la <a title="API de dibujo de Flash" href="http://livedocs.adobe.com/flash/9.0_es/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000175.html" target="_blank"><strong>API de dibujo de Flash</strong></a>, pero para variar un poco en esta ocasión lo he hecho en <strong>ActionScript 2.0</strong> y en<strong> ActionScript 3.0</strong> que realmente no es tan distinto para los que ya programan en AS2.</p>
<h1>INTRODUCCIÓN</h1>
<p>La idea es poner un coche en el circuito que ya hicimos en el anterior <a title="Circuito de carreras en Flash" href="http://www.nomeva.com/2009/07/09/circuito-carreras-flash-actionscript/" target="_blank">post</a>, así que simplemente con rectángulos lo vamos a hacer. Para esto haremos uso de la <strong><a title="API de dibujo de Flash" href="http://livedocs.adobe.com/flash/9.0_es/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000175.html" target="_blank">API de dibujo de Flash</a> </strong>en AS2 y AS3, las diferencias son pequeñas y en ocasiones grandes, pero con un poco de imaginación haremos que se parezcan más, <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> .</p>
<h1>DESARROLLO</h1>
<h2>ActionScript 3.0</h2>
<p>En <strong>ActionScript 3.0</strong> utilizaremos los métodos <strong><a title="Método beginFill de la clase Graphics" href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/Graphics.html#beginFill()" target="_blank">beginFill</a></strong> y <strong><a title="Método drawRect de la clase Graphics" href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/Graphics.html#drawRect()" target="_blank">drawRect</a></strong> de la clase <strong><a title="Clase Graphics" href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/Graphics.html" target="_blank">Graphics</a></strong>.</p>
<h2>ActionScript 2.0</h2>
<p>En <strong>ActionScript 2.0</strong> no tenemos una clase <a title="Clase Graphics" href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/Graphics.html" target="_blank"><strong>Graphics</strong></a> y menos aún el método <a title="Método drawRect de la clase Graphics" href="http://help.adobe.com/es_ES/AS3LCR/Flash_10.0/flash/display/Graphics.html#drawRect()" target="_blank"><strong>drawRect</strong></a>, pero la solución es fácil, hacemos una función o método que haga lo mismo y listo <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<pre lang="actionscript">function drawRect(_mc:MovieClip, _nX:Number, _nY:Number, _nW:Number, _nH:Number):Void
{
	_mc.moveTo(_nX, _nY);
	_mc.lineTo(_nX + _nW, _nY);
	_mc.lineTo(_nX + _nW, _nY + _nH);
	_mc.lineTo(_nX, _nY + _nH);
	_mc.lineTo(_nX, _nY);
}</pre>
<h1>CÓDIGO COMPLETO</h1>
<p>A continuación el código en <strong>ActionScript 3.0</strong>:</p>
<pre lang="actionscript">package
{
	import flash.display.MovieClip;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;

	public class Car extends MovieClip
	{
		private var car:Sprite;

		private var lights:Shape;
		private var bar:Shape;
		private var structure:Shape;
		private var wheels:Shape;

		private var nCounter:uint;

		public function Car():void
		{
			this.drawCar();

			this.nCounter = 0;

			this.addEventListener(Event.ENTER_FRAME, doOnEnterFrame);
		}

		private function drawCar():void
		{
			this.car = new Sprite();

			this.lights = new Shape();
			this.bar = new Shape();
			this.structure = new Shape();
			this.wheels = new Shape();

			//Chasis
			this.wheels.graphics.beginFill(0x1E1E1E);
			this.wheels.graphics.drawRect(38, 146, 316, 28);

			this.wheels.graphics.beginFill(0x1E1E1E);
			this.wheels.graphics.drawRect(157, 172, 78, 6);

			//Llanta izquierda
			this.wheels.graphics.beginFill(0x333333);
			this.wheels.graphics.drawRect(28, 132, 45, 68);

			//Llanta derecha
			this.wheels.graphics.beginFill(0x333333);
			this.wheels.graphics.drawRect(318, 132, 45, 68);

			//Carrosería
			this.structure.graphics.beginFill(0xFF0000);
			this.structure.graphics.drawRect(42, 0, 308, 166);

			//Cristal trasero
			this.structure.graphics.beginFill(0x70A9FE);
			this.structure.graphics.drawRect(49, 7, 293, 68);

			//Retrovisor izquierdo
			this.structure.graphics.beginFill(0xFF0000);
			this.structure.graphics.drawRect(0, 65, 42, 21);

			this.structure.graphics.beginFill(0x70A9FE);
			this.structure.graphics.drawRect(3, 68, 35, 15);

			//Retrovisor derecho
			this.structure.graphics.beginFill(0xFF0000);
			this.structure.graphics.drawRect(350, 65, 42, 21);

			this.structure.graphics.beginFill(0x70A9FE);
			this.structure.graphics.drawRect(353, 68, 35, 15);

			//Luz izquierda
			this.lights.graphics.beginFill(0xFF9900);
			this.lights.graphics.drawRect(46, 100, 34, 18);

			//Luz derecha
			this.lights.graphics.beginFill(0xFF9900);
			this.lights.graphics.drawRect(312, 100, 34, 18);

			//Defensa
			this.bar.graphics.beginFill(0x808080);
			this.bar.graphics.drawRect(38, 124, 316, 28);

			//Matrícula
			this.bar.graphics.beginFill(0xFFFFFF);
			this.bar.graphics.drawRect(157, 128, 78, 20);

			this.car.addChild(this.wheels);
			this.car.addChild(this.structure);
			this.car.addChild(this.bar);
			this.car.addChild(this.lights);

			this.car.scaleX = 0.5;
			this.car.scaleY = 0.5;

			this.addChild(this.car);
		}

		private function doOnEnterFrame(_oEvent:Event):void
		{
			this.nCounter++;
			if(this.nCounter % 4 == 0)
			{
				this.lights.y = (this.lights.y == 0) ? 3: 0;
				this.structure.y = (this.structure.y == 0) ? -3: 0;
				this.bar.y = (this.bar.y == 0) ? 2: 0;
			}
		}
	}
}</pre>
<p>Y a continuación el código en <strong>ActionScript 2.0</strong>:</p>
<pre lang="actionscript">import gs.TweenLite;

var nColor1:Number = 0xFFFFFF;
var nColor2:Number = 0xCCCCCC;
var nColor3:Number = 0xFF0000;
var nColor4:Number = 0xFFFFFF;

var nColorSky:Number = 0x0066FF;
var nColorGrass:Number = 0x65FF00;

var nWidthSky:Number = Stage.width;
var nHeigthSky:Number = 80;

var nWidthGrass:Number = Stage.width;
var nHeigthGrass:Number = 170;

var nWidthBorderLine:Number = 30;
var nWidthMiddleLine:Number = 8;
var nWidthCenterLine:Number = 140;
var nHeigthLine:Number = 2.5;

var nTotalLines:Number = 68;

var nCounter:Number = 0;
var nFramesToUpdateCircuit:Number = 3;
var nFramesToUpdateCar:Number = 5;

var mcSky:MovieClip;
var mcGrass:MovieClip;
var mcCircuit:MovieClip;

var mcCar:MovieClip;

var mclights:MovieClip;
var mcBar:MovieClip;
var mcStructure:MovieClip;
var mcWheels:MovieClip;

this.create();

function create():Void
{
	Key.addListener(this);

	this.mcSky = this.createEmptyMovieClip("mcSky", 1);
	this.mcGrass = this.createEmptyMovieClip("mcGrass", 2);
	this.mcCircuit = this.createEmptyMovieClip("mcCircuit", 3);

	this.mcSky.beginFill(this.nColorSky, 100);
	this.drawBox(this.mcSky, this.nWidthSky, this.nHeigthSky);
	this.mcSky.endFill();

	this.mcGrass.beginFill(this.nColorGrass, 100);
	this.drawBox(this.mcGrass, this.nWidthGrass, this.nHeigthGrass);
	this.mcGrass.endFill();

	this.mcGrass._y = this.nHeigthSky;
	this.mcCircuit._y = this.nHeigthSky;

	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var nType:Number = ((i % 2) == 0) ? 1: 0;
		var mc:MovieClip = this.createLine(nType);
		mc._xscale = 100 + (i * 2);
		mc._x = Math.round((Stage.width - mc._width) / 2)
		mc._y = i * this.nHeigthLine;
		mc.nPosOriX = mc._x;
	}

	this.drawCar();
	this.mcCar._xscale = 40;
	this.mcCar._yscale = 40;
	this.mcCar._x = (Stage.width - this.mcCar._width ) / 2;
	this.mcCar._y = 100;
	this.mcCar.nPosOriX = this.mcCar._x;
	this.mcCar.nPosOriY = this.mcCar._y;

	this.mcInstructions.swapDepths(this.getNextHighestDepth());
}

function createLine(_nType:Number):MovieClip
{
	var nDepth:Number = this.mcCircuit.getNextHighestDepth();
	var mcLine:MovieClip = this.mcCircuit.createEmptyMovieClip("mcLine_" + String(nDepth), nDepth);
	var mcLine1:MovieClip = mcLine.createEmptyMovieClip("mcLine1", 1);
	var mcLine2:MovieClip = mcLine.createEmptyMovieClip("mcLine2", 2);

	this.contructLine(mcLine1, _nType);
	this.contructLine(mcLine2, _nType + 1);

	mcLine2._visible = false;

	return mcLine;
}

function contructLine(_mc:MovieClip, _nType:Number):Void
{
	var mcBox1:MovieClip = _mc.createEmptyMovieClip("mcBox1", 1);
	var mcBox2:MovieClip = _mc.createEmptyMovieClip("mcBox2", 2);
	var mcBox3:MovieClip = _mc.createEmptyMovieClip("mcBox3", 3);

	var nColor:Number = (_nType == 1) ? this.nColor1: this.nColor3;

	mcBox1.beginFill(nColor, 100);
	this.drawBox(mcBox1, this.nWidthBorderLine, this.nHeigthLine);
	mcBox1.endFill();

	mcBox2.beginFill(this.nColor2, 100);
	this.drawBox(mcBox2, this.nWidthCenterLine, this.nHeigthLine);
	mcBox2.endFill();

	mcBox3.beginFill(nColor, 100);
	this.drawBox(mcBox3, this.nWidthBorderLine, this.nHeigthLine);
	mcBox3.endFill();

	mcBox2._x = this.nWidthBorderLine;
	mcBox3._x = this.nWidthBorderLine + this.nWidthCenterLine;

	if(_nType == 1)
	{
		var mcBox4:MovieClip = _mc.createEmptyMovieClip("mcBox4", 4);
		mcBox4.beginFill(nColor, 100);
		this.drawBox(mcBox4, this.nWidthMiddleLine, this.nHeigthLine);
		mcBox4.endFill();

		mcBox4._x = (_mc._width - mcBox4._width) / 2;
	}
}

function drawBox(_mc:MovieClip, _nWidth:Number, _nHeigth:Number):Void
{
	_mc.lineTo(_nWidth, 0);
	_mc.lineTo(_nWidth, _nHeigth);
	_mc.lineTo(0, _nHeigth);
	_mc.lineTo(0, 0);
}

function onEnterFrame(_mc:MovieClip):Void
{
	this.nCounter++
	if(this.nCounter % this.nFramesToUpdateCircuit == 0)
	{
		for (var i:Number = 0; i &lt; this.nTotalLines; i++)
		{
			var mcLine:MovieClip = this.mcCircuit["mcLine_" + String(i)];
			mcLine.mcLine1._visible = !mcLine.mcLine1._visible;
			mcLine.mcLine2._visible = !mcLine.mcLine2._visible;
		}
	}

	if(this.nCounter % this.nFramesToUpdateCar == 0)
	{
		this.mcLights._y = (this.mcLights._y == 0) ? 3: 0;
		this.mcStructure._y = (this.mcStructure._y == 0) ? -3: 0;
		this.mcBar._y = (this.mcBar._y == 0) ? 2: 0;
	}
}

function moveLeft():Void
{
	var r:Number = 1.5;
	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var mc:MovieClip = this.mcCircuit["mcLine_" + String(i)];
		TweenLite.to(mc, 1, { _x:mc.nPosOriX - (this.nTotalLines - i) * r } );
		r -= 0.01;
	}
	TweenLite.to(this.mcCar, 1, { _x:this.mcCar.nPosOriX - 40, _y:this.mcCar.nPosOriY + 10 } );
}

function moveRight():Void
{
	var r:Number = 1.5;
	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var mc:MovieClip = this.mcCircuit["mcLine_" + String(i)];
		TweenLite.to(mc, 1, { _x:mc.nPosOriX + (this.nTotalLines - i) * r } );
		r -= 0.01;
	}
	TweenLite.to(this.mcCar, 1, { _x:this.mcCar.nPosOriX + 40, _y:this.mcCar.nPosOriY + 10 } );
}

function returnCenter():Void
{
	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var mc:MovieClip = this.mcCircuit["mcLine_" + String(i)];
		TweenLite.to(mc, 1, { _x:mc.nPosOriX } );
	}
	TweenLite.to(this.mcCar, 1, { _x:this.mcCar.nPosOriX, _y:this.mcCar.nPosOriY } );
}

function onKeyDown():Void
{
	if(Key.isDown(Key.LEFT))
	{
		this.moveLeft();
	}
	else if(Key.isDown(Key.RIGHT))
	{
		this.moveRight();
	}
	else if(Key.isDown(Key.UP))
	{
		this.returnCenter();
	}
}

function drawCar():Void
{
	this.mcCar = this.createEmptyMovieClip("mcCar", 4);

	this.mcLights = this.mcCar.createEmptyMovieClip("mcLights", 4);
	this.mcBar = this.mcCar.createEmptyMovieClip("mcBar", 3);
	this.mcStructure = this.mcCar.createEmptyMovieClip("mcStructure", 2);
	this.mcWheels = this.mcCar.createEmptyMovieClip("mcWheels", 1);

	//Chasis
	this.mcWheels.beginFill(0x1E1E1E);
	this.drawRect(this.mcWheels, 38, 146, 316, 28);

	this.mcWheels.beginFill(0x1E1E1E);
	this.drawRect(this.mcWheels, 157, 172, 78, 6);

	//Llanta izquierda
	this.mcWheels.beginFill(0x333333);
	this.drawRect(this.mcWheels, 28, 132, 45, 68);

	//Llanta derecha
	this.mcWheels.beginFill(0x333333);
	this.drawRect(this.mcWheels, 318, 132, 45, 68);

	//Carrosería
	this.mcStructure.beginFill(0xFF0000);
	this.drawRect(this.mcStructure, 42, 0, 308, 166);

	//Cristal trasero
	this.mcStructure.beginFill(0x70A9FE);
	this.drawRect(this.mcStructure, 49, 7, 293, 68);

	//Retrovisor izquierdo
	this.mcStructure.beginFill(0xFF0000);
	this.drawRect(this.mcStructure, 0, 65, 42, 21);

	this.mcStructure.beginFill(0x70A9FE);
	this.drawRect(this.mcStructure, 3, 68, 35, 15);

	//Retrovisor derecho
	this.mcStructure.beginFill(0xFF0000);
	this.drawRect(this.mcStructure, 350, 65, 42, 21);

	this.mcStructure.beginFill(0x70A9FE);
	this.drawRect(this.mcStructure, 353, 68, 35, 15);

	//Luz izquierda
	this.mcLights.beginFill(0xFF9900);
	this.drawRect(this.mcLights, 46, 100, 34, 18);

	//Luz derecha
	this.mcLights.beginFill(0xFF9900);
	this.drawRect(this.mcLights, 312, 100, 34, 18);

	//Defensa
	this.mcBar.beginFill(0x808080);
	this.drawRect(this.mcBar, 38, 124, 316, 28);

	//Matrícula
	this.mcBar.beginFill(0xFFFFFF);
	this.drawRect(this.mcBar, 157, 128, 78, 20);
}

function drawRect(_mc:MovieClip, _nX:Number, _nY:Number, _nW:Number, _nH:Number):Void
{
	_mc.moveTo(_nX, _nY);
	_mc.lineTo(_nX + _nW, _nY);
	_mc.lineTo(_nX + _nW, _nY + _nH);
	_mc.lineTo(_nX, _nY + _nH);
	_mc.lineTo(_nX, _nY);
}</pre>
<h1>RESULTADO</h1>
<p>El resultado final es una bonita carretera con su césped, su cielo y un coche que da saltitos, jejeje <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: center;"><object width="380" height="250" data="http://www.nomeva.com/wp-content/uploads/2009/07/circuito_con_coche_as2.swf" type="application/x-shockwave-flash"><param name="src" value="http://www.nomeva.com/wp-content/uploads/2009/07/circuito_con_coche_as2.swf" /></object></p>
<h6 style="text-align: center;">Circuito con coche en ActionScript 2.0</h6>
<p style="text-align: left;">El resultado en ActionScript 3.0 para generar el coche es el siguiente:</p>
<p style="text-align: center;"><object width="300" height="200" data="http://www.nomeva.com/wp-content/uploads/2009/07/car_as3.swf" type="application/x-shockwave-flash"><param name="src" value="http://www.nomeva.com/wp-content/uploads/2009/07/car_as3.swf" /></object></p>
<h6 style="text-align: center;">Coche programado con ActionScript 3.0</h6>
<h1>DESCARGAS</h1>
<p>Tenemos los ficheros para la versión en ActionScript 2.0 y para los de ActionScript 3.0:</p>
<ul>
<li>El <a title="Circuito con coche ActionScript 2.0" href="http://www.nomeva.com/wp-content/uploads/2009/07/circuito_con_coche_as2.fla" target="_blank">documento Fla</a> del circuito con el coche en ActionScript 2.0</li>
<li>El <a title="Documento Fla y clase para el coche en ActionScript 3.0" href="http://www.nomeva.com/wp-content/uploads/2009/07/car_as3.zip" target="_blank">documento Fla y la clase</a> para el coche en ActionScript 3.0</li>
</ul>
<p>Entradas relacionadas:</p>
<ul>
<li><a title="Circuito de carreras en Flash con ActionScript" href="http://www.nomeva.com/2009/07/09/circuito-carreras-flash-actionscript/" target="_blank">Circuito de carreras en Flash con ActionScript</a></li>
<li><a title="PHP Reader File SWF" href="http://www.nomeva.com/2008/09/22/php-read-file-swf-leer-fichero-swf/" target="_blank">PHP Reader File SWF</a></li>
<li><a title="Concuro 25 líneas de ActionScript" href="http://www.nomeva.com/2009/01/05/concurso-25-lineas-de-actionscript/" target="_blank">Concurso 25 líneas de ActionScript</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save Flash" href="http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL &#8211; Panel Auto Save Flash</a></li>
</ul>
<p>Saludos</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/07/14/circuito-de-carreras-con-coche-en-flash-as2-as3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Circuito de carreras en Flash con ActionScript</title>
		<link>http://www.nomeva.com/2009/07/09/circuito-carreras-flash-actionscript/</link>
		<comments>http://www.nomeva.com/2009/07/09/circuito-carreras-flash-actionscript/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:57:49 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[carreras]]></category>
		<category><![CDATA[circuito]]></category>
		<category><![CDATA[f1]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=360</guid>
		<description><![CDATA[
En un proyecto que participé hace poco tuvimos que hacer un circuito de carreras  y aunque parece increíble no encontré algo por ahí que me sirviera de base, así que al final me lo tuve que cocinar.
Dentro de los requisitos técnicos tenía que ser para Flash Player 7, con lo cual no podía utilizar la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-371 aligncenter" title="Out Run" src="http://www.nomeva.com/wp-content/uploads/2009/07/outrun-01.jpg" alt="Out Run" width="440" height="308" /></p>
<p>En un proyecto que participé hace poco tuvimos que hacer un circuito de carreras  y aunque parece increíble no encontré algo por ahí que me sirviera de base, así que al final me lo tuve que cocinar.</p>
<p>Dentro de los <strong>requisitos técnicos</strong> tenía que ser para <strong>Flash Player 7</strong>, con lo cual no podía utilizar la Clase <strong><a title="Clase BitmapData" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001942.html" target="_blank">BitmapData</a></strong> de AS2 y muchísimo menos utilizar AS3, así que la cosa se ponía más chunga, pero bueno, sino donde queda la gracia. <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Teníamos en la mente el mítico juego <strong><a title="Out Run" href="http://es.wikipedia.org/wiki/Out_Run" target="_blank">Out Run</a></strong> y queríamos conseguir algo como eso. Aunque durante la investigación vimos las maravillas de AS3 o las <a title="Modo 7 prototype" href="http://zappan.deviantart.com/art/Mode-7-Racing-Flash-Game-WIP-41860253" target="_blank"><strong>posibilidades</strong></a> al utilizar la Clase <a title="Clase BitmapData" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001942.html" target="_blank"><strong>BitmapData</strong></a> con el motor del <a title="Modo 7" href="http://es.wikipedia.org/wiki/Modo_7" target="_blank"><strong>modo 7</strong></a>, pero nada, donde manda capitán no manda marinero, así que a buscarse la vida.</p>
<p>El resultado fué el siguiente, bueno, este realmente no es, esta es una versión lite que programé en mis mañanas de tren, jejeje. Mi lado friki me obligó a hacerlo todo con programación, así que el código se puede copiar, pegar y compilar sin problema.</p>
<blockquote><p><strong>NOTA</strong>:</p>
<p>Utilizo la <strong><a title="TweenLite" href="http://blog.greensock.com/tweenliteas2/" target="_blank">TweenLite</a></strong> así que no funciona tal cual, hace falta tener la librería <a title="TweenLite" href="http://blog.greensock.com/tweenliteas2/" target="_blank"><strong>TweenLite</strong></a>. <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p></blockquote>
<h1>CÓDIGO</h1>
<pre lang="javascript">import gs.TweenLite;

var nColor1:Number = 0xFFFFFF;
var nColor2:Number = 0xCCCCCC;
var nColor3:Number = 0xFF0000;
var nColor4:Number = 0xFFFFFF;

var nColorSky:Number = 0x0066FF;
var nColorGrass:Number = 0x65FF00;

var nWidthSky:Number = Stage.width;
var nHeigthSky:Number = 80;

var nWidthGrass:Number = Stage.width;
var nHeigthGrass:Number = 170;

var nWidthBorderLine:Number = 30;
var nWidthMiddleLine:Number = 8;
var nWidthCenterLine:Number = 140;
var nHeigthLine:Number = 2.5;

var nTotalLines:Number = 68;

var nCounter:Number = 0;
var nFramesToUpdate:Number = 3;

var mcSky:MovieClip;
var mcGrass:MovieClip;
var mcCircuit:MovieClip;

this.create();

function create():Void
{
	Key.addListener(this);

	this.mcSky = this.createEmptyMovieClip("mcSky", 1);
	this.mcGrass = this.createEmptyMovieClip("mcGrass", 2);
	this.mcCircuit = this.createEmptyMovieClip("mcCircuit", 3);

	this.mcSky.beginFill(this.nColorSky, 100);
	this.drawBox(this.mcSky, this.nWidthSky, this.nHeigthSky);
	this.mcSky.endFill();

	this.mcGrass.beginFill(this.nColorGrass, 100);
	this.drawBox(this.mcGrass, this.nWidthGrass, this.nHeigthGrass);
	this.mcGrass.endFill();

	this.mcGrass._y = this.nHeigthSky;
	this.mcCircuit._y = this.nHeigthSky;

	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var nType:Number = ((i % 2) == 0) ? 1: 0;
		var mc:MovieClip = this.createLine(nType);
		mc._xscale = 100 + (i * 2);
		mc._x = Math.round((Stage.width - mc._width) / 2)
		mc._y = i * this.nHeigthLine;
		mc.nPosOriX = mc._x;
	}
}

function createLine(_nType:Number):MovieClip
{
	var nDepth:Number = this.mcCircuit.getNextHighestDepth();
	var mcLine:MovieClip = this.mcCircuit.createEmptyMovieClip("mcLine_" + String(nDepth), nDepth);
	var mcLine1:MovieClip = mcLine.createEmptyMovieClip("mcLine1", 1);
	var mcLine2:MovieClip = mcLine.createEmptyMovieClip("mcLine2", 2);

	this.contructLine(mcLine1, _nType);
	this.contructLine(mcLine2, _nType + 1);

	mcLine2._visible = false;

	return mcLine;
}

function contructLine(_mc:MovieClip, _nType:Number):Void
{
	var mcBox1:MovieClip = _mc.createEmptyMovieClip("mcBox1", 1);
	var mcBox2:MovieClip = _mc.createEmptyMovieClip("mcBox2", 2);
	var mcBox3:MovieClip = _mc.createEmptyMovieClip("mcBox3", 3);

	var nColor:Number = (_nType == 1) ? this.nColor1: this.nColor3;

	mcBox1.beginFill(nColor, 100);
	this.drawBox(mcBox1, this.nWidthBorderLine, this.nHeigthLine);
	mcBox1.endFill();

	mcBox2.beginFill(this.nColor2, 100);
	this.drawBox(mcBox2, this.nWidthCenterLine, this.nHeigthLine);
	mcBox2.endFill();

	mcBox3.beginFill(nColor, 100);
	this.drawBox(mcBox3, this.nWidthBorderLine, this.nHeigthLine);
	mcBox3.endFill();

	mcBox2._x = this.nWidthBorderLine;
	mcBox3._x = this.nWidthBorderLine + this.nWidthCenterLine;

	if(_nType == 1)
	{
		var mcBox4:MovieClip = _mc.createEmptyMovieClip("mcBox4", 4);
		mcBox4.beginFill(nColor, 100);
		this.drawBox(mcBox4, this.nWidthMiddleLine, this.nHeigthLine);
		mcBox4.endFill();

		mcBox4._x = (_mc._width - mcBox4._width) / 2;
	}
}

function drawBox(_mc:MovieClip, _nWidth:Number, _nHeigth:Number):Void
{
	_mc.lineTo(_nWidth, 0);
	_mc.lineTo(_nWidth, _nHeigth);
	_mc.lineTo(0, _nHeigth);
	_mc.lineTo(0, 0);
}

function onEnterFrame(_mc:MovieClip):Void
{
	this.nCounter++
	if(this.nCounter % this.nFramesToUpdate == 0)
	{
		for (var i:Number = 0; i &lt; this.nTotalLines; i++)
		{
			var mcLine:MovieClip = this.mcCircuit["mcLine_" + String(i)];
			mcLine.mcLine1._visible = !mcLine.mcLine1._visible;
			mcLine.mcLine2._visible = !mcLine.mcLine2._visible;
		}
	}
}

function moveLeft():Void
{
	var r:Number = 1.5;
	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var mc:MovieClip = this.mcCircuit["mcLine_" + String(i)];
		TweenLite.to(mc, 1, { _x:mc.nPosOriX - (this.nTotalLines - i) * r } );
		r -= 0.01;
	}
}

function moveRight():Void
{
	var r:Number = 1.5;
	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var mc:MovieClip = this.mcCircuit["mcLine_" + String(i)];
		TweenLite.to(mc, 1, { _x:mc.nPosOriX + (this.nTotalLines - i) * r } );
		r -= 0.01;
	}
}

function returnCenter():Void
{
	for (var i:Number = 0; i &lt; this.nTotalLines; i++)
	{
		var mc:MovieClip = this.mcCircuit["mcLine_" + String(i)];
		TweenLite.to(mc, 1, { _x:mc.nPosOriX } );
	}
}

function onKeyDown():Void
{
	if(Key.isDown(Key.LEFT))
	{
		this.moveLeft();
	}
	else if(Key.isDown(Key.RIGHT))
	{
		this.moveRight();
	}
	else if(Key.isDown(Key.UP))
	{
		this.returnCenter();
	}
}</pre>
<h1>RESULTADO</h1>
<p style="text-align: left;">Circuito de carreras en Flash con ActionScript</p>
<p style="text-align: center;"><object width="380" height="250" data="wp-content/uploads/2009/07/circuito.swf" type="application/x-shockwave-flash"><param name="src" value="wp-content/uploads/2009/07/circuito.swf" /><param name="bgcolor" value="#65FF00" /></object></p>
<p style="text-align: center;">
<h1>DESCARGAS</h1>
<p style="text-align: left;">Para el que quiera el fla <a title="Circuito Flash" href="http://www.nomeva.com/recursos/circuito.fla" target="_blank">aquí</a> está.</p>
<p style="text-align: left;">Saludos!!!</p>
<p>Entradas relacionadas:</p>
<ul>
<li><a title="PHP Reader File SWF" href="http://www.nomeva.com/2008/09/22/php-read-file-swf-leer-fichero-swf/" target="_blank">PHP Reader File SWF</a></li>
<li><a title="Concuro 25 líneas de ActionScript" href="http://www.nomeva.com/2009/01/05/concurso-25-lineas-de-actionscript/" target="_blank">Concurso 25 líneas de ActionScript</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save Flash" href="http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL &#8211; Panel Auto Save Flash</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/07/09/circuito-carreras-flash-actionscript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutorial JSFL &#8211; Timeline</title>
		<link>http://www.nomeva.com/2009/07/07/tutorial-jsfl-timeline/</link>
		<comments>http://www.nomeva.com/2009/07/07/tutorial-jsfl-timeline/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 06:31:19 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[frame]]></category>
		<category><![CDATA[layer]]></category>
		<category><![CDATA[mxp]]></category>
		<category><![CDATA[timeline]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=350</guid>
		<description><![CDATA[
Desde siempre me han llamado la atención las marquesinas. Quizá por las veo muy habitualmente en el tren que viajo todos los días para ir de la casa al trabajo y del trabajo a casa, aunque ya desde mucho antes me gustaban.
NOTA
Puede ser interesante leer antes o después este otro post de Introducción a Comandos para saber [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-351 aligncenter" title="marquesina lego jsfl" src="http://www.nomeva.com/wp-content/uploads/2009/07/marquesina_lego_jsfl.jpg" alt="marquesina lego jsfl" width="400" height="130" /></p>
<p>Desde siempre me han llamado la atención las <a title="Marquesina, texto animado, leds" href="http://wigflip.com/signbot/lj" target="_blank"><strong>marquesinas</strong></a>. Quizá por las veo muy habitualmente en el tren que viajo todos los días para ir de la casa al trabajo y del trabajo a casa, aunque ya desde mucho antes me gustaban.</p>
<blockquote><p><strong>NOTA</strong><br />
Puede ser interesante leer antes o después este otro <a title="Tutorial JSFL - Introducción a Comandos" href="../2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank"><strong>post</strong></a> de <strong>Introducción a Comandos</strong> para saber qué son, dónde van y cómo funcionan.</p></blockquote>
<h1>INTRODUCCIÓN</h1>
<p>Bueno, pues con esa idea en la cabeza se me ocurrió hacer un <strong>comando</strong> que en si mismo no tiene una utilidad claro, sino más bien abstracta o artística, pero que me viene muy bien para explicar el Objeto <a title="Objeto Timeline" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004463.html" target="_blank"><strong>Timeline</strong></a> de JSFL.</p>
<blockquote><p>El comando <strong>Escribir palabra</strong> no tiene una utilidad clara, es decir, no se creó con el fin de resolver un problema, sencillamente se hizo porque una tarde con una visión muy al estilo matrix (puede ser por la película o por una matriz) y con la nostalgia de las marquesinas de leds en la mente (quizá influenciado por las pantallas de los trenes de cercanías), si hizo.</p></blockquote>
<h1>TUTORIAL</h1>
<p>Primero utilizaremos el objeto <strong><a title="Objeto Document" href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00003804.html" target="_blank">Document</a> </strong>para acceder a su biblioteca (<strong><a title="Objeto library" href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00003804.html" target="_blank">library</a></strong>), creamos y editamos un MovieClip en ella y por último acceder a su línea de tiempo (<a title="Objeto Timeline" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004463.html" target="_blank"><strong>Timeline</strong></a>).</p>
<pre class="brush:js">var oDoc;
var oLib;
var oTimeline;

this.oDoc = fl.getDocumentDOM();
this.oLib = this.oDoc.library;
this.oLib.addNewItem("movie clip", "Nombre_MovieClip");
this.oLib.editItem("Nombre_MovieClip");
this.oTimeline = this.oDoc.getTimeline();</pre>
<p style="text-align: left;">Una vez que tenemos una referencia al objeto <a title="Objeto Timeline" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004463.html" target="_blank"><strong>Timeline</strong></a> podremos utilizar sus métodos y propiedades, en este caso vamos a utilizar el método <a title="Método addNewLayer del objeto Timeline" href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00003804.html" target="_blank"><strong>addNewLayer</strong></a> para agregar tantas capas como necesitemos.</p>
<pre class="brush:js">this.oTimeline.addNewLayer();</pre>
<p style="text-align: left;">Luego seleccionamos los <strong>fotogramas</strong> con los que vamos a trabajar, esto lo hacemos con el método <a title="Método setSelectedFrames del objeto Timeline" href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00003804.html" target="_blank"><strong>setSelectedFrames</strong></a> y los convertimos en <strong>fotogramas clave</strong>:</p>
<pre class="brush:js">this.oTimeline.setSelectedFrames(INICIO, FIN, REMPLAZAR_SELECCIÓN);
this.oTimeline.convertToKeyframes();</pre>
<p style="text-align: left;">Y listo lo siguiente es simplemente ir creando algo en cada fotograma en función de un patrón para que la línea de tiempo tenga forma. Una forma sencilla de hacer esto es dibujando un círculo en el escenario, de esta manera el fotograma dejará de estar vacío, para dibujar el círculo utilizamos el método <a title="Método addNewOval del objeto Document" href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00003804.html" target="_blank"><strong>addNewOval</strong></a> del objeto <a title="Objeto Document" href="http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00003804.html" target="_blank"><strong>Document</strong></a>:</p>
<pre class="brush:js">this.oDoc.addNewOval({left:0, top:0, right:10, bottom:10});</pre>
<p style="text-align: left;">El resultado al que queremos llegar es el que se muestra en la siguiente imagen.</p>
<blockquote>
<p style="text-align: left;"><em>Quizá sea mejor verlo desde lejos, porque muy cerca de la pantalla cuesta un poco leerlo.</em></p>
</blockquote>
<p style="text-align: center;"><img class="size-full wp-image-352 aligncenter" title="flash timeline jsfl" src="http://www.nomeva.com/wp-content/uploads/2009/07/flash_timeline_jsfl.png" alt="flash timeline jsfl" width="384" height="190" /></p>
<p style="text-align: left;">El código completo es el siguiente:</p>
<pre class="brush:js">var oDoc;
var oLib;
var oTimeline;
var aLetters;
var aWord;

this.config();

function config()
{
	fl.showIdleMessage(false);
	fl.outputPanel.clear();

	if(fl.getDocumentDOM())
	{
		this.oDoc = fl.getDocumentDOM();
		this.oLib = this.oDoc.library;

		this.init();
	}
	else
	{
		alert("Debes tener un documento abierto.");
	}
}

function init()
{
	this.configLetters();
	this.configWord();

	var nTotalLetters = this.aWord.length;
	for(var i = 0; i &lt; nTotalLetters; i++)
	{
		this.createLetter(this.aWord[i], i * 6);
	}
}

function configLetters()
{
	this.aLetters = new Array();

	this.aLetters[" "] = "0,0,0,0,0|0,0,0,0,0|0,0,0,0,0|0,0,0,0,0|0,0,0,0,0|0,0,0,0,0|0,0,0,0,0";
	this.aLetters["A"] = "0,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,1,1,1,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1";
	this.aLetters["B"] = "1,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,1,1,1,0";
	this.aLetters["C"] = "0,1,1,1,0|1,0,0,0,1|1,0,0,0,0|1,0,0,0,0|1,0,0,0,0|1,0,0,0,1|0,1,1,1,0";
	this.aLetters["D"] = "1,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,1,1,1,0";
	this.aLetters["E"] = "1,1,1,1,1|1,0,0,0,0|1,0,0,0,0|1,1,1,1,0|1,0,0,0,0|1,0,0,0,0|1,1,1,1,1";
	this.aLetters["F"] = "1,1,1,1,1|1,0,0,0,0|1,0,0,0,0|1,1,1,1,0|1,0,0,0,0|1,0,0,0,0|1,0,0,0,0";
	this.aLetters["G"] = "0,1,1,1,0|1,0,0,0,1|1,0,0,0,0|1,0,1,1,1|1,0,0,0,1|1,0,0,0,1|0,1,1,1,0";
	this.aLetters["H"] = "1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,1,1,1,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1";
	this.aLetters["I"] = "0,1,1,1,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0|0,1,1,1,0";
	this.aLetters["J"] = "0,0,0,0,1|0,0,0,0,1|0,0,0,0,1|0,0,0,0,1|0,0,0,0,1|1,0,0,0,1|0,1,1,1,0";
	this.aLetters["K"] = "1,0,0,0,1|1,0,0,1,0|1,0,1,0,0|1,1,0,0,0|1,0,1,0,0|1,0,0,1,0|1,0,0,0,1";
	this.aLetters["L"] = "1,0,0,0,0|1,0,0,0,0|1,0,0,0,0|1,0,0,0,0|1,0,0,0,0|1,0,0,0,0|1,1,1,1,1";
	this.aLetters["M"] = "1,0,0,0,1|1,1,0,1,1|1,0,1,0,1|1,0,1,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1";
	this.aLetters["N"] = "1,0,0,0,1|1,0,0,0,1|1,1,0,0,1|1,0,1,0,1|1,0,0,1,1|1,0,0,0,1|1,0,0,0,1";
	this.aLetters["O"] = "0,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|0,1,1,1,0";
	this.aLetters["P"] = "1,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,1,1,1,0|1,0,0,0,0|1,0,0,0,0";
	this.aLetters["Q"] = "0,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,1,1|0,1,1,1,1";
	this.aLetters["R"] = "1,1,1,1,0|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,1,1,1,0|1,0,0,1,0|1,0,0,0,1";
	this.aLetters["S"] = "0,1,1,1,0|1,0,0,0,1|1,0,0,0,0|0,1,1,1,0|0,0,0,0,1|1,0,0,0,1|0,1,1,1,0";
	this.aLetters["T"] = "1,1,1,1,1|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0";
	this.aLetters["U"] = "1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|0,1,1,1,0";
	this.aLetters["V"] = "1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|0,1,0,1,0|0,1,0,1,0|0,0,1,0,0";
	this.aLetters["W"] = "1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|1,0,1,0,1|1,0,1,0,1|1,1,0,1,1|1,0,0,0,1";
	this.aLetters["X"] = "1,0,0,0,1|1,0,0,0,1|0,1,0,1,0|0,0,1,0,0|0,1,0,1,0|1,0,0,0,1|1,0,0,0,1";
	this.aLetters["Y"] = "1,0,0,0,1|1,0,0,0,1|1,0,0,0,1|0,1,0,1,0|0,0,1,0,0|0,0,1,0,0|0,0,1,0,0";
	this.aLetters["Z"] = "1,1,1,1,1|0,0,0,0,1|0,0,0,1,0|0,0,1,0,0|0,1,0,0,0|1,0,0,0,0|1,1,1,1,1";
}

function configWord()
{
	sWord = prompt("Escribe una palabra.");

	this.aWord = new Array();
	var nWordLength = sWord.length;
	for(var i = 0; i &lt; nWordLength; i++)
	{
		this.aWord.push(sWord.substring(i, i + 1));
	}

	this.createTimeline(sWord);
}

function createTimeline(_sWord)
{
	var sWordLengthInFrames = _sWord.length * 6;
	this.oLib.addNewItem("movie clip", _sWord);
	this.oLib.editItem(_sWord);
	this.oTimeline = this.oDoc.getTimeline();
	this.oTimeline.setSelectedFrames(0, sWordLengthInFrames, true);
	this.oTimeline.convertToKeyframes();
	for(var i = 0; i &lt; 6; i++)
	{
		this.oTimeline.addNewLayer();
		this.oTimeline.setSelectedFrames(0, sWordLengthInFrames, true);
		this.oTimeline.convertToKeyframes();
	}
}

function createLetter(_sLetter, _nStartFrame)
{
	var sConfigLetter = this.aLetters[_sLetter];
	if(sConfigLetter)
	{
		var aConfigLetter = sConfigLetter.split("|");
		for(var i = 0; i &lt; 7; i++) aConfigLetter[i] = aConfigLetter[i].split(",");

		for(var i = 0; i &lt; 7; i++)
		{
			for(var j = 0; j &lt; 5; j++)
			{
				if(aConfigLetter[i][j] == "1")
				{
					this.oTimeline.setSelectedLayers(i);
					this.oTimeline.setSelectedFrames(_nStartFrame + j, _nStartFrame + j + 1, true);
					this.oDoc.addNewOval({left:0, top:0, right:10, bottom:10});
				}
			}
		}
	}
	else
	{
		alert("No existe el caracter: " + _sLetter);
	}
}</pre>
<h1>DESCARGAS</h1>
<p style="text-align: left;">Tenemos dos tipos de descargas, para instalar simplemente el comando y para descargar el JSFL:</p>
<ul>
<li><a title="Extensión Escribir palabra" href="http://www.nomeva.com/tutoriales/jsfl/Escribir_palabra_mxp.zip" target="_blank">Extensión</a> <strong>Escribir palabra</strong> (instalador mxp).</li>
<li><a title="Comando Escribir palabra" href="http://www.nomeva.com/tutoriales/jsfl/Escribir_palabra_jsfl.zip" target="_blank">Comando</a> <strong>Escribir palabra</strong> (fichero jsfl).</li>
</ul>
<p>Dudas, sugerencias o comentarios, aquí estaré.</p>
<p>Saludos.</p>
<h3>Entradas relacionadas</h3>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="../2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="../2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL &#8211; Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="../2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="../2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="../2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL &#8211; Introducción a Paneles</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save" href="../2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL &#8211; Panel Auto Save</a></li>
<li><a title="Tutorial JSFL - Guardar copia FLA 1/2 (comando)" href="http://www.nomeva.com/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/" target="_blank">Tutorial JSFL &#8211; Guardar copia FLA 1/2 (comando)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/07/07/tutorial-jsfl-timeline/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutorial JSFL &#8211; Guardar copia FLA 1/2 (comando)</title>
		<link>http://www.nomeva.com/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/</link>
		<comments>http://www.nomeva.com/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 09:27:34 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[Extensiones]]></category>
		<category><![CDATA[fla]]></category>
		<category><![CDATA[mxp]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=340</guid>
		<description><![CDATA[
Esta es la primera entrega de un grupo de dos tutoriales sobre una misma tarea, guardar una copia del documento Fla con el que se esta trabajando pero sin perder el documento actual en el IDE de Flash.
Introducción
Me explico mejor, existe la opción de Guardar como, pero esta opción lo que hace es abrir el cuadro [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-343 aligncenter" title="document fla backup" src="http://www.nomeva.com/wp-content/uploads/2009/07/document_fla_backup.jpg" alt="document fla backup" width="214" height="159" /></p>
<p>Esta es la primera entrega de un grupo de dos <strong><a title="Tutoriales en nomeva.com" href="http://www.nomeva.com/category/tutoriales/" target="_blank">tutoriales</a></strong> sobre una misma tarea, <strong>guardar</strong> una <strong>copia</strong> del <strong>documento</strong> <a title="Documento Fla" href="http://filext.com/file-extension/fla" target="_blank"><strong>Fla</strong></a> con el que se esta trabajando pero sin perder el documento actual en el <strong>IDE</strong> de<strong> Flash.</strong></p>
<h1>Introducción</h1>
<p>Me explico mejor, existe la opción de <strong>Guardar como</strong>, pero esta opción lo que hace es abrir el cuadro de diálogo donde nos permite especificar la ruta y nombre del documento <a title="Documento Fla" href="http://filext.com/file-extension/fla" target="_blank"><strong>Fla</strong></a>, al hacer clic el guardar el documento que se queda en edición en el <strong>IDE</strong> de <strong>Flash</strong> es el nuevo. Pero, ¿que pasa si quiero trabajar sobre el mismo fichero?, porque lo que realmente quería hacer era una copia del documento, pues que tenemos que cerrar el documento nuevo y abrir el original.</p>
<p>Bueno para esto sirve el <strong>comando</strong> que vamos a hacer en este <strong>tutorial</strong>. En el siguiente tutorial vamos a hacer lo mismo pero lo haremos con un <strong>panel</strong> para ver las ventajas de un sistema sobre el otro.</p>
<blockquote><p><strong>NOTA</strong><br />
Puede ser interesante leer antes o después este otro <a title="Tutorial JSFL - Introducción a Comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank"><strong>post</strong></a> de <strong>Introducción a Comandos</strong> para saber qué son, dónde van y cómo funcionan.</p></blockquote>
<h1>Tutorial</h1>
<p>Para hacer la tarea de <strong>guardar</strong> una <strong>copia</strong> debemos primeramente guardar el documento en edición, esto lo hacemos mediante el método <a title="Método save del Objeto Document" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004635.html" target="_blank"><strong>save</strong></a> del objeto <strong><a title="Objeto Document" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004635.html" target="_blank">Document</a><span style="font-weight: normal;">,</span></strong></p>
<pre lang="javascript">fl.getDocumentDOM().save(true);</pre>
<p><strong><span style="font-weight: normal;">Una vez guardado el documento procedemos a realizar una copia, para esto hacemos uso del método </span><a title="Método copy del objeto FLfile" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004661.html#137637" target="_blank">copy</a><span style="font-weight: normal;"> del objeto </span><a title="Objeto FLfile" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004660.html" target="_blank">FLfile</a><span style="font-weight: normal;">, éste método recibe dos parámetros:</span></strong></p>
<ul>
<li><strong>Origen</strong>: La ruta del fichero que deseamos copia.</li>
<li><strong>Destino</strong>: La ruta del fichero resultante.</li>
</ul>
<blockquote><p><strong>NOTA</strong>:</p>
<p>Es importante destacar que las rutas deben estar expresadas en  <strong>file:///</strong></p></blockquote>
<p>Ya que las rutas las debemos especificar mediante  <strong>file:///</strong> haremos uso de una de las novedades de <strong>Flash CS4</strong>, me refiero a la propiedad <a title="Propiedad pathURI del objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS9931616E-E7F0-41de-A90D-50B9342C8D04.html" target="_blank"><strong>pathURI</strong></a> del objeto <strong><a title="Objeto Document" href="http://help.adobe.com/es_ES/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7ffa.html" target="_blank">Document</a> </strong>ya<strong> </strong>que esta propiedad nos devuelve precisamente la <strong>ruta</strong> del <strong>documento</strong> <strong>Fla</strong> en edición expresda en <strong>file:///</strong>.</p>
<blockquote><p><strong>NOTA</strong>:</p>
<p>En caso de que el documento no haya sido guardado todavía el valor de la propiedad <strong>pathURI</strong> será <strong>udefined</strong> con lo que podemos controlar esa situación.</p></blockquote>
<p>El código que utilizaremos para hacer la copia sería el siguiente:</p>
<pre lang="javascript">FLfile.copy(fl.getDocumentDOM().pathURI, NUEVO_NOMBRE);</pre>
<p>El caso de que la copia se realice con éxito el método <a title="Método copy del objeto FLfile" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004661.html#137637" target="_blank"><strong>copy</strong></a> nos devolverá <strong>true</strong>, en caso contrario devolverá <strong>false</strong>, con lo cual también podemos controlar esa situación para informar al usuario.</p>
<p style="text-align: center;"><img class="size-full wp-image-344 aligncenter" title="command save copy" src="http://www.nomeva.com/wp-content/uploads/2009/07/command_save_copy.png" alt="command save copy" width="401" height="285" /></p>
<p>A continuación en código completo del commando:</p>
<pre lang="javascript">var oDoc;

this.config();

function config()
{
	fl.showIdleMessage(false);
	fl.outputPanel.clear();

	if(fl.getDocumentDOM())
	{
		this.oDoc = fl.getDocumentDOM();

		this.init();
	}
	else
	{
		alert("Debes tener un documento abierto.");
	}
}

function init()
{
	if(this.oDoc.pathURI)
	{
		this.oDoc.save(true);
		var bResult = FLfile.copy(this.oDoc.pathURI, this.oDoc.pathURI.split(".fla")[0] + "_back.fla");
		if(bResult)
		{
			alert("La copia se ha guardado correctamente.");
		}
		else
		{
			alert("Error al guardar la copia.");
		}
	}
	else
	{
		alert("El documento no ha sido guradado.\nPara crear una copia debes guardar antes el documento.");
	}
}</pre>
<h1>Descargas</h1>
<ul>
<li><a title="Extensión mxp save copy document" href="http://www.nomeva.com/tutoriales/jsfl/Guardar_copia_mxp.zip" target="_blank">Extensión para instalar el comando</a> (fichero mxp).</li>
<li><a title="save copy document jsfl" href="http://www.nomeva.com/tutoriales/jsfl/Guardar_copia_jsfl.zip" target="_blank">Fichero JSFL</a>.</li>
</ul>
<p>Dudas, sugerencias o comentarios, aquí estaré.</p>
<p>Saludos.</p>
<h3>Entradas relacionadas</h3>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="http://www.nomeva.com/2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL &#8211; Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="http://www.nomeva.com/2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="http://www.nomeva.com/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL &#8211; Introducción a Paneles</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save" href="http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL &#8211; Panel Auto Save</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tutorial JSFL &#8211; Panel Auto Save</title>
		<link>http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/</link>
		<comments>http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 06:38:30 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[auto guardado]]></category>
		<category><![CDATA[auto save]]></category>
		<category><![CDATA[autoguardado]]></category>
		<category><![CDATA[autosave]]></category>
		<category><![CDATA[mxp]]></category>
		<category><![CDATA[panel]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=330</guid>
		<description><![CDATA[
Bienvenido querido lector a la sección de tutoriales en nomeva, en esta ocasión vamos a crear con Flash mediante JSFL y ActionScript un Panel que realice la tarea de guardar automáticamente el documento Fla en edición.
NOTA
Puede ser interesante leer antes o después este otro post de Introducción a Paneles para saber qué son, dónde van [...]]]></description>
			<content:encoded><![CDATA[<div><img class="alignnone size-full wp-image-332" title="Memoria USB Lego" src="http://www.nomeva.com/wp-content/uploads/2009/06/usb_lego.jpg" alt="Memoria USB Lego" width="276" height="109" /></div>
<p>Bienvenido querido lector a la sección de <a title="Tutoriales en nomeva.com" href="http://www.nomeva.com/category/tutoriales/" target="_blank"><strong>tutoriales</strong></a> en <a title="nomeva.com" href="http://www.nomeva.com/" target="_blank"><strong>nomeva</strong></a>, en esta ocasión vamos a crear con <a title="Flash en nomeva.com" href="http://www.nomeva.com/category/flash/" target="_blank"><strong>Flash</strong></a> mediante<a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank"> <strong>JSFL</strong></a> y ActionScript un <strong>Panel</strong> que realice la tarea de guardar automáticamente el documento <a title="Documento Fla" href="http://filext.com/file-extension/fla" target="_blank">Fla</a> en edición.</p>
<blockquote><p><strong>NOTA</strong><br />
Puede ser interesante leer antes o después este otro <a title="Tutorial JSFL - Introducción a Paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank"><strong>post</strong></a> de <strong>Introducción a Paneles</strong> para saber qué son, dónde van y cómo funcionan.</p>
</blockquote>
<div></div>
<div style="text-align: center;"><img class="alignnone size-full wp-image-333" title="Panel Autoguardado" src="http://www.nomeva.com/wp-content/uploads/2009/06/imagen-2.png" alt="Panel Autoguardado" width="202" height="169" /></div>
<p><strong>Auto Save</strong> es un <strong>Panel</strong> (plugin) que en un principio(*) tiene una misión muy importante, guardar automáticamente el documento (<a title="Documento Fla" href="http://filext.com/file-extension/fla" target="_blank">fla</a>) con el cual estamos trabajando.</p>
<h5>(*)<strong>Digo en un principio porque al pensarlo bien, tal como funciona el IDE de Flash y sobre todo con la gran cantidad de fallos (bugs) que he encontrado en esta nueva versión de <a title="Adobe Flash CS4 Professional" href="http://www.adobe.com/es/products/flash/" target="_blank">Adobe Flash CS4 Professional</a> no estoy 100 % seguro si nos podrá ayudar o no. <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Con esto quiero decir que el uso de este Panel es bajo tu propio riesgo.</strong></h5>
<p>Ahora si, dicho todo lo anterior hablemos del Panel.</p>
<h2>CONFIGURACIÓN Y USO</h2>
<p>Es muy fácil de <strong>configurar</strong> el <strong>Panel</strong>, son únicamente tres valores:</p>
<ul>
<li><strong>Frecuencia</strong>: Como su nombre indica sirva para <strong>configurar la frecuencia</strong> el minutos del auto guardado.</li>
<li><strong>Preguntar</strong>: Si está <strong>activado</strong> antes de guardar te <strong>preguntará</strong> <strong>si deseas guardar</strong>, pudiendo responder que no y seguir tranquilamente con tu trabajo.</li>
<li><strong>Activo / Inactivo</strong>: Este es nuestro botón de <strong>encendido</strong>, con el cual indicamos que el <strong>auto guardado</strong> está activo o inactivo.</li>
</ul>
<p>Y ya está, así de fácil es configurar el <strong>Panel </strong>de<strong> Auto guardado</strong> de documentos <a title="Documento Fla" href="http://filext.com/file-extension/fla" target="_blank">Fla</a>. (Hola <strong>Gus</strong>!!!)</p>
<h2>Uso</h2>
<p>Para usar el <strong>Panel</strong> debemos abrirlo, desde el menú <strong>Ventana</strong> &gt; <strong>Otros paneles</strong> &gt; <strong>Auto save </strong>y configurarlo tal como indicamos arriba. Es importante mencionar que para que funcione debe estar visible, es decir, el Panel debe estar abierto. Tal como se muestra en la siguiente imagen.</p>
<h2>Un poco de historia</h2>
<p>Hablando con un amigo (Iván) me comentó una funcionalidad importantísima y es que recuerde la configuración porque sino sería un verdadero incordio tener que estar configurándolo cada vez que lo utilizas, así que <strong>SI</strong>, el <strong>Panel</strong> <strong>recuerda</strong> la <strong>configuración</strong> cada vez que lo cierras y lo abres e incluso si cierras el IDE de Flash.</p>
<h1>Descarga</h1>
<p>Para todo aquel que simplemente necesite el <strong>Panel Auto Save</strong> y no tenga interés en saber como funciona por dentro puede <strong>descargar </strong><a title="Instalador mxp Auto save Panel " href="http://www.nomeva.com/recursos/AutoSave.zip" target="_blank"><strong>aquí</strong></a> el instalador mxp.</p>
<p>A los que les interese saber como funciona sigan leyendo hasta el final que también hay otro enlace al instalador al final. ;D</p>
<h1>Parte friki, tutorial, código y demás</h1>
<p>Hasta ahora hemos hablado del <strong>Panel</strong> y sus beneficios (es verdad, también hemos hablado de las posibles no bondades <img src='http://www.nomeva.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ), pero todavía no sabemos <strong>cómo</strong> <strong>funciona</strong>, qué <strong>engranes</strong> se mueven por dentro, dónde está la <strong>magia</strong> y demás historias que en realidad es <span style="text-decoration: line-through;">lo que quiero contar</span> de lo que trata este post.</p>
<p>Pues vamos allá, jejeje, es que realmente el <strong>funcionamiento</strong> <strong>interno</strong> de este <strong>Panel</strong> es realmente <strong>sencillo</strong>, únicamente utilizamos dos métodos de <a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank"><strong>JSFL</strong></a>, uno para comprobar que exista un documento abierto y otro para guardar el documento, si, así de fácil.</p>
<h3>Explicación</h3>
<p>Para saber si existe un documento <a title="Documento Fla" href="http://filext.com/file-extension/fla" target="_blank">Fla</a> abierto utilizamos el <strong>método</strong> <a title="JSFL fl.getDocumentDOM()" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004635.html" target="_blank">fl.getDocumentDOM()</a> que nos devolverá un <strong>Objeto</strong> de tipo <strong><a title="Objeto Document" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004635.html" target="_blank">Document</a></strong> en caso de existir, en caso contrario nos devolverá <strong>undefined</strong>, con lo cual podemos hacer las comprobaciones necesarias en nuestro código <strong>ActionScript</strong>.</p>
<p>Lo siguiente que tenemos que hacer en caso de que <strong>exista</strong> el <strong>documento</strong> y que las variables de configuración del <strong>Panel</strong> (Frecuencia, Preguntar y Activo) nos los permitan es guardarlo, haciendo uso del <strong>método</strong> <a title="Método save del Objeto Document" href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00004635.html" target="_blank">fl.getDocumentDOM().save(true)</a> y listo.</p>
<h3>Resultado final</h3>
<p>En esta ocasión es más código <strong>ActionScript</strong> que código <a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank"><strong>JSFL</strong></a>, como en los anteriores post aquí también hacemos uso de la función <strong><a title="Función MMExecute" href="http://livedocs.adobe.com/flash/9.0_es/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00001194.html" target="_blank">MMExecute</a></strong> que nos permite ejecutar <a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank"><strong>JSFL</strong></a> desde un fichero <strong>swf</strong> con <strong>ActionScript</strong>.</p>
<p>A continuación os pongo el código. Hay un par de cosas feas por ahí, así que tener en cuenta que lo programé el viernes por la mañana mientras iba en el tren hacia el trabajo, así que si alguién lo quiere modificar para dejarlo más bonito o añadir funcionalidad es libre de hacerlo siempre y cuando mencione el origen (<span style="text-decoration: line-through;">y si no lo menciona también</span>, total, lo que quiero es compartir).</p>
<pre class="brush:js">import fl.controls.Button;
import fl.controls.CheckBox;
import fl.controls.Label;
import fl.controls.NumericStepper;
import flash.events.Event;

var nIntervalID:uint;
var nMinutesToAutoSave:uint;
var bCheckBoxAsk:Boolean;
var bActive:Boolean;

var comButtonOnOff:Button;
var comCheckBoxAsk:CheckBox;
var oLabel:Label;
var comNumericStepperFrecuency:NumericStepper;

var oSharedObject:SharedObject;

this.config();
this.init();

function config():void
{

	this.oSharedObject = SharedObject.getLocal("DATA_AUTOSAVE_SO");

	this.nMinutesToAutoSave = (this.oSharedObject.data.nMinutesToAutoSave != undefined) ? this.oSharedObject.data.nMinutesToAutoSave: this.comNumericStepperFrecuency.value;
	this.bCheckBoxAsk = (this.oSharedObject.data.bCheckBoxAsk != undefined) ? this.oSharedObject.data.bCheckBoxAsk: this.comCheckBoxAsk.selected;
	this.bActive = (this.oSharedObject.data.bActive != undefined) ? this.oSharedObject.data.bActive: false;

	this.comNumericStepperFrecuency.value = this.nMinutesToAutoSave;
	this.comCheckBoxAsk.selected = this.bCheckBoxAsk;
	if (this.bActive)
		this.comButtonOnOff.label = "On";
	else
		this.comButtonOnOff.label = "Off";

	this.comButtonOnOff.addEventListener(MouseEvent.CLICK, onClickButtonOnOff);
	this.comCheckBoxAsk.addEventListener(Event.CHANGE, onCheckBoxAskChange);
	this.comNumericStepperFrecuency.addEventListener(Event.CHANGE, onNumericStepperFrecuencyChange);

	this.saveSharedObject();
}

function saveSharedObject():void
{
	this.oSharedObject.data.nMinutesToAutoSave = this.nMinutesToAutoSave;
	this.oSharedObject.data.bCheckBoxAsk = this.bCheckBoxAsk;
	this.oSharedObject.data.bActive = this.bActive;

	this.oSharedObject.flush();
}

function onClickButtonOnOff(_oMouseEvent:MouseEvent):void
{
	if (this.bActive)
	{
		this.bActive = false;
		this.comButtonOnOff.label = "On";
	}
	else
	{
		this.bActive = true;
		this.comButtonOnOff.label = "Off";

		this.init();
	}

	this.saveSharedObject();
}

function onCheckBoxAskChange(_oEvent:Event):void
{
	this.bCheckBoxAsk = this.comCheckBoxAsk.selected;

	this.saveSharedObject();
}

function onNumericStepperFrecuencyChange(_oEvent:Event):void
{
	this.nMinutesToAutoSave = this.comNumericStepperFrecuency.value;

	this.init();

	this.saveSharedObject();
}

function init():void
{
	clearInterval(this.nIntervalID);
	this.nIntervalID = setInterval(autoSave, this.nMinutesToAutoSave * 60 * 1000);
}

function autoSave():void
{
	if (this.bActive &amp;&amp; this.isDocument())
	{
		if (this.comCheckBoxAsk.selected)
		{
			var sCodeJSFL:String = "";
			var sResult:String = "";

			sCodeJSFL = "confirm(\"Quieres guardar\");";
			sResult = MMExecute(sCodeJSFL);

			if (sResult == "true")
			{
				this.saveDocument();
			}
		}
		else
		{
			this.saveDocument();
		}
	}
}

function isDocument():Boolean
{
	var bRet:Boolean;

	var sCodeJSFL:String = "";
	var sResult:String = "";
	sCodeJSFL = "fl.getDocumentDOM();";
	sResult = MMExecute(sCodeJSFL);
	bRet = (sResult != "undefined") ? true: false;

	return bRet;
}

function saveDocument():void
{
	var sCodeJSFL:String = "";
	var sResult:String = "";
	sCodeJSFL = "fl.getDocumentDOM().save(true);";
	sResult = MMExecute(sCodeJSFL);
}</pre>
<p>Aquí tenéis los archivos de descarga.</p>
<ul>
<li><a title="Panel Auto Save mxp" href="http://www.nomeva.com/recursos/AutoSave.zip" target="_blank">Instalador MXP</a></li>
<li><a title="Código fuente tutorial jsfl panel auto save" href="http:///www.nomeva.com/tutoriales/jsfl/auto_save.zip" target="_blank">Código fuente</a> (Fla)</li>
</ul>
<p>Sugerencias, dudas, ideas o comentarios?</p>
<p>Saludos!!!</p>
<p>Entradas relacionadas:</p>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="http://www.nomeva.com/2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="http://www.nomeva.com/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL &#8211; Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="http://www.nomeva.com/2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="http://www.nomeva.com/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL &#8211; Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="http://www.nomeva.com/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL &#8211; Introducción a Paneles</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/06/28/tutorial-jsfl-panel-auto-save/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
