<?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; command</title>
	<atom:link href="http://www.nomeva.com/tag/command/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>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<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>Tutorial JSFL &#8211; Embeber fuentes y panel Historial</title>
		<link>http://www.nomeva.com/2009/11/13/tutorial-jsfl-embeber-fuentes-y-panel-historial/</link>
		<comments>http://www.nomeva.com/2009/11/13/tutorial-jsfl-embeber-fuentes-y-panel-historial/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 08:09:41 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[embeber fuentes]]></category>
		<category><![CDATA[panel historial]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=460</guid>
		<description><![CDATA[INTRODUCCIÓN El objetivo de JSFL es ayudar a agilizar el proceso de edición en Adobe Flash Professional. Pero, ¿qué quiere decir esto? bueno, eso nos lo responde la ayuda de Ampliación de Flash CS4 Professional con ejemplos tales como automatizar tareas repetitivas o la creación de herramientas personalizadas. La API JavaScript permite escribir scripts para [...]]]></description>
			<content:encoded><![CDATA[<h1>INTRODUCCIÓN</h1>
<p>El objetivo de <strong><a title="JSFL en nomeva.com" href="http://www.nomeva.com/category/jsfl/" target="_blank">JSFL</a></strong> es ayudar a <strong>agilizar el proceso de edición</strong> en <strong><a title="Adobe Flash Professional" href="http://www.nomeva.com/category/jsfl/" target="_blank">Adobe Flash Professional</a></strong>. Pero, ¿qué quiere decir esto? bueno, eso nos lo responde la <strong><a title="Ampliación de Adobe Flash CS4 Professional" href="http://www.nomeva.com/2008/10/05/flash-cs4-extendiendo-con-jsfl/" target="_blank">ayuda de Ampliación de Flash CS4 Professional</a></strong> con ejemplos tales como automatizar tareas repetitivas o la creación de herramientas personalizadas.</p>
<blockquote><p>La API JavaScript permite escribir scripts para aplicaciones Flash que ayudan a agilizar el proceso de edición. Por ejemplo, se pueden escribir scripts para automatizar tareas repetitivas o añadir herramientas personalizadas al panel Herramientas.</p></blockquote>
<h1>TUTORIAL</h1>
<p>En este tutorial vamos a ver como <strong>automatizar</strong> una tarea muy habitual y repetitiva en el día a día de un <strong>desarrollador / diseñador Flash</strong>. Vamos a ver como crear un <strong>comando</strong> para <strong>embeber caracteres</strong> a un campo de texto dinámico y además vamos a ver como utilizar el <strong>Panel Historial</strong>.</p>
<p>Primero abriremos el <strong>Panel Historial</strong>, esto lo hacemos desde el menú <strong>Ventana -&gt; Otros paneles -&gt; Historial</strong> o con los atajos de teclado <strong>Ctr + F10</strong> en Windows y <strong>Cmd + F10</strong> en Mac OS X.</p>
<p style="text-align: center; "><a style="text-decoration: none;" href="http://www.nomeva.com/wp-content/uploads/2009/11/panel_historial_adobe_flash.png"><br style="text-decoration: underline;" /><img class="aligncenter size-full wp-image-461" title="panel historial adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/panel_historial_adobe_flash.png" alt="panel historial adobe flash" width="466" height="259" /></a></p>
<p>Ahora comprobaremos el estado de visualización del Panel, debe estar en <strong>&#8220;JavaScript del panel&#8221;</strong>, si no es así lo modificamos.</p>
<p style="text-align: center; "><a href="http://www.nomeva.com/wp-content/uploads/2009/11/visualizacion_panel_historial_adobe_flash.png"><img class="aligncenter size-medium wp-image-464" title="visualizacion panel historial adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/visualizacion_panel_historial_adobe_flash-300x90.png" alt="visualizacion panel historial adobe flash" width="300" height="90" /></a></p>
<p>Ahora si con el <strong>Panel</strong> abierto haremos esa tarea tan repetitiva que es <strong>embeber fuentes</strong> en un campo de texto dinámico. Para esto hacemos lo siguiente:</p>
<ul>
<li><strong>Creamos</strong> un <strong>campo de texto</strong> con la <strong>herramienta texto</strong>.</li>
<li><strong>Volvemos dinámico</strong> el campo de texto utilizando el <strong>Panel de propiedades</strong>.</li>
<li>Seleccionamos en el desplegable de <strong>Suavizado</strong> la opción &#8220;<strong>Suavizado para animación</strong>&#8220;.</li>
</ul>
<p style="text-align: center; "><a href="http://www.nomeva.com/wp-content/uploads/2009/11/panel_propiedades_texto_adobe_flash.png"><img class="aligncenter size-full wp-image-466" title="panel propiedades texto adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/panel_propiedades_texto_adobe_flash.png" alt="panel propiedades texto adobe flash" width="317" height="441" /></a></p>
<ul>
<li>Hacemos <strong>click</strong> en el <strong>botón</strong> &#8220;<strong>Incorporación de caracteres…</strong>&#8220;.</li>
<li>En la ventana que se abre <strong>seleccionamos</strong> los <strong>juegos de caracteres</strong> a embeber.</li>
<li>En el campo de texto añadimos los <strong>caracteres especiales</strong>, tales como letras con tildes, diéresis, ñ y ç entre otros.</li>
</ul>
<p style="text-align: center; "><a href="http://www.nomeva.com/wp-content/uploads/2009/11/incorporacion_de_caracteres_adobe_flash.png"><img class="aligncenter size-full wp-image-465" title="incorporacion de caracteres adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/incorporacion_de_caracteres_adobe_flash.png" alt="incorporacion de caracteres adobe flash" width="505" height="539" /></a></p>
<p>Aceptamos y listo ya tenemos nuestro <strong>campo de texto dinámico</strong> con las<strong> fuentes embebidas</strong>, ahora nos vamos al <strong>Panel Historial</strong> y veremos todo lo que hemos estado haciendo, pero con el pequeño añadido que ahora veremos el <strong>código JSFL</strong> que tenemos que utilizar en nuestro comando.</p>
<p style="text-align: center; "><a href="http://www.nomeva.com/wp-content/uploads/2009/11/panel_historial_comandos_embedfonts_adobe_flash.png"><img class="aligncenter size-full wp-image-467" title="panel historial comandos embed fonts adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/panel_historial_comandos_embedfonts_adobe_flash.png" alt="panel historial comandos embed fonts adobe flash" width="466" height="259" /></a></p>
<p>En la parte inferior derecha del <strong>Panel Historial</strong> tenemos el <strong>botón Guardar</strong>, éste se activa cuando seleccionamos alguna línea de código, en este caso lo que queremos hacer es guardar las líneas de código en las que indicamos al campo de texto que utilice <strong>Suavizado para animación</strong>, los <strong>juegos de caracteres</strong> y los <strong>caracteres especiales</strong>. Así que una vez seleccionadas hacemos click en el <strong>botón Guardar</strong> y ahora simplemente tenemos que <strong>escribir</strong> el <strong>nombre del comando</strong>.</p>
<p style="text-align: center; "><a href="http://www.nomeva.com/wp-content/uploads/2009/11/ventana_guardar_como_comando_adobe_flash.png"><img class="aligncenter size-full wp-image-468" title="ventana guardar como comando adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/ventana_guardar_como_comando_adobe_flash.png" alt="ventana guardar como comando adobe flash" width="537" height="219" /></a></p>
<p>Listo, con esto <strong>hemos creado</strong> un <strong>comando</strong> sin tener que picar nada de código, es una forma muy simple y eficiente con la que <strong>cualquiera puede crear comandos sin necesidad de saber programar</strong>.</p>
<p>Ahora para ejecutar el comando simplemente vamos al menú <strong>Comandos</strong> y seleccionamos de la lista el comando que hemos creado, <strong>Embeber caracteres</strong>.</p>
<p style="text-align: center;"><a href="http://www.nomeva.com/wp-content/uploads/2009/11/menu_comandos_comando_embeber_caracteres_adobe_flash.png"><img class="size-full wp-image-469 aligncenter" title="menu comandos comando embeber caracteres adobe flash" src="http://www.nomeva.com/wp-content/uploads/2009/11/menu_comandos_comando_embeber_caracteres_adobe_flash.png" alt="menu comandos comando embeber caracteres adobe flash" width="366" height="210" /></a></p>
<h1>DESCARGAS</h1>
<p>Como es habitual dejo descargas del fichero <strong>JSFL </strong>y también del fichero <strong>MXP</strong> para instalar el comando.</p>
<ul>
<li><a title="Comando - Embeber caracteres" href="http://www.nomeva.com/wp-content/uploads/2009/11/embeber_caracteres.jsfl" target="_blank"><strong>Comando</strong></a> Embeber caracteres (versión JSFL).</li>
<li><a title="Instalador MXP - Comando Embeber caracteres" href="http://www.nomeva.com/wp-content/uploads/2009/11/embeber_caracteres.mxp" target="_blank"><strong>Instalador</strong></a> de<strong> Comando</strong> Embeber caracteres.</li>
</ul>
<h1>NOTAS</h1>
<p>Para utilizar el comando debes seleccionar un campo de texto. Para cualquier cosa, dudas, comentarios o sugerencias aquí estaré.</p>
<p>Saludos!!!</p>
<h3>Entradas relacionadas</h3>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="../category/2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="../category/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL – Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="../category/2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL – Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="../category/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL – Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="../category/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL – Introducción a Paneles</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save" href="../category/2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL – Panel Auto Save</a></li>
<li><a title="Tutorial JSFL - Guardar copia FLA 1/2 (comando)" href="../category/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/" target="_blank">Tutorial JSFL – Guardar copia FLA 1/2 (comando)</a></li>
<li><a title="Tutorial JSFL - Introducción a herramientas (tools)" href="../2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/" target="_blank">Tutorial JSFL – Introducción a herramientas (tools)</a></li>
<li><a title="Tutorial JSFL - Localización de contenidos (comando)" href="http://www.nomeva.com/2009/11/11/tutorial-jsfl-localizacion-de-contenidos-comando/" target="_blank">Tutorial JSFL &#8211; Localización de contenidos (comando)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/11/13/tutorial-jsfl-embeber-fuentes-y-panel-historial/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Tutorial JSFL &#8211; Localización de contenidos (Comando)</title>
		<link>http://www.nomeva.com/2009/11/11/tutorial-jsfl-localizacion-de-contenidos-comando/</link>
		<comments>http://www.nomeva.com/2009/11/11/tutorial-jsfl-localizacion-de-contenidos-comando/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 08:47:47 +0000</pubDate>
		<dc:creator>Luis Adrián</dc:creator>
				<category><![CDATA[Comandos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[JSFL]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[element]]></category>
		<category><![CDATA[frame]]></category>
		<category><![CDATA[layer]]></category>
		<category><![CDATA[localización]]></category>
		<category><![CDATA[timeline]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.nomeva.com/?p=447</guid>
		<description><![CDATA[La localización (traducción) de contenidos es un tema muy importante, en ocasiones es el punto clave de los desarrollos, pero en muchas ocasiones no se tiene en cuenta. En mi caso he tenido que pasar por esta situación más de una vez. Cuando se nos platea la situación siempre pensamos en una configuración inteligente de [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">La localización (traducción) de contenidos es un tema muy importante, en ocasiones es el punto clave de los desarrollos, pero en muchas ocasiones no se tiene en cuenta. En mi caso he tenido que pasar por esta situación más de una vez.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Cuando se nos platea la situación siempre pensamos en una configuración inteligente de los contenidos basada en XML, crear un gestor, objetos, eventos, listeners, switch on the fly para cambiar de idioma y muchas ideas súper guays, pero como siempre tenemos al señor tiempo que viene a presionar, por otro lado el cliente ya tiene el curso completo y funcional, lo único que quiere ahora es que su producto esté en X o Y idioma, vamos que eso tiene que estar chupado.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Pero que pasa cuando quien ha desarrollado esos contenidos no pensó en que algún día se localizarían y utilizó mogollón de campos de texto estáticos, por no hablar de imágenes o diseños, pero esa es otra historia.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Bueno, ahora que más o menos he contado un poco el panorama, jejeje vamos a ver para que sirve todo eso, resumiendo, tenemos, por que si, un fla de su padre y de su madre con un montón de campos de texto estáticos distribuidos por símbolos, gráficos, botones, clips de película y en distintos fotogramas de sus líneas de tiempo respectivas, es decir, un verdadero caos del bueno.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Claro, también tenemos un cliente que nos pide para mañana la traducción de ese curso a Chino, Alemán e Italiano.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">¿Qué hacemos?</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Le decimos al cliente que estamos hasta arriba de trabajo y que no podremos dar prioridad a su trabajo, vamos que no lo vamos a hacer.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Le decimos al cliente que no podemos hacerlo en ese tiempo y que necesitaremos dos semanas por lo menos y que el trabajo será muy costoso.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Le decimos que vale.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Pero que!!!!, ¿cómo que vale? pero este tío está loco, pero si esa tarea es imposible.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Bueno, ahora es donde entra en juego nuestro querido y siempre infravalorado JSFL.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">IDEA E HISTORIETA</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Tenemos una línea de tiempo y muchos elementos en una biblioteca, pues simplemente tenemos que recorrer todas las líneas de tiempo y encontrar todos los campos de texto estáticos, convertirlos en campos de texto dinámicos, asignarles una variable, leer su contenido y guardarlo en un fichero XML.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Como trabajamos en una súper empresa enorme con múltiples departamentos, contamos con un departamento de traducción y muchos más, nos ponemos en contacto con nuestro amigo Axel del departamento de traducción y le pedimos que nos traduzca el fichero XML a los idiomas que ha pedido el cliente, en unas horas nos lo devuelve. ¡Qué gusto trabajar en esta empresa! todos son tan eficientes que dan ganas de dar el 200% de cada uno.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">Bueno, ahora ya tenemos los ficheros XML en Chino, Alemán e Italiano. Pero recordemos, como hemos dicho que trabajamos en una súper empresa en la que todos son la hostia de eficientes, nosotros no vamos a ser menos, así que mientras Axel trabajaba en la traducción del XML, nosotros hemos estado creado el súper lector de XML que simplemente creará variables y asignará valores, para que cuando los textos dinámicos las necesiten ya estén ahí. Así que mira que coincidencia, hemos terminado al mismo tiempo que Axel, con todo el desarrollo que hemos hecho, más esos XML&#8217;s ya tenemos el contenido en 3 idiomas y nos ha tomado menos de un día.</div>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">QUE NECESITAMOS</div>
<h1>INTRODUCCIÓN</h1>
<p>La <strong>localización</strong> (traducción) de contenidos es un tema muy importante, en ocasiones es el punto clave de los desarrollos, pero en muchas ocasiones no se tiene en cuenta. En mi caso he tenido que pasar por esta situación más de una vez.</p>
<p>Cuando se nos platea la situación siempre pensamos en una configuración inteligente de los <strong>contenidos</strong> basada en <strong>XML</strong>, crear un <strong>gestor</strong>, objetos, eventos, listeners,<strong> switch on the fly </strong>para cambiar de idioma y muchas ideas súper guays, pero como siempre tenemos al señor <strong>tiempo</strong> que viene a <strong>presionar</strong>, por otro lado el cliente ya tiene el curso completo y funcional, lo único que quiere ahora es que su producto esté en X o Y idioma, vamos que eso tiene que estar chupado.</p>
<p>Pero que pasa cuando quien ha desarrollado esos contenidos <strong>no pensó</strong> en que algún día se <strong>localizarían</strong> y utilizó mogollón de campos de <strong>texto estáticos</strong>, por no hablar de imágenes o diseños, pero esa es otra historia.</p>
<p><strong>Bueno</strong>, ahora que más o menos he contado un poco el panorama, jejeje vamos a ver para que sirve todo eso, resumiendo, <strong>tenemos</strong>, por que si, <strong>un fla</strong> de su padre y de su madre con un montón de <strong>campos de texto estáticos</strong> distribuidos por símbolos, gráficos, botones, clips de película y en distintos fotogramas de sus líneas de tiempo respectivas, es decir, un verdadero caos del bueno.</p>
<p>Claro, también tenemos un <strong>cliente</strong> que nos pide <strong>para mañana</strong> la <strong>traducción</strong> de ese curso a Chino, Alemán e Italiano.</p>
<h2>¿Qué hacemos?</h2>
<ul>
<li>Le decimos al cliente que estamos hasta arriba de trabajo y que no podremos dar prioridad a su trabajo, vamos que no lo vamos a hacer.</li>
<li>Le decimos al cliente que no podemos hacerlo en ese tiempo y que necesitaremos dos semanas por lo menos y que el trabajo será muy costoso.</li>
<li>Le decimos que vale.</li>
</ul>
<blockquote><p>Pero qué!!!!, ¿cómo que vale? pero este tío está loco, pero si esa tarea es imposible.</p></blockquote>
<p>Bueno, ahora es donde entra en juego nuestro querido y siempre infravalorado <strong>JSFL</strong>.</p>
<h1>IDEA E HISTORIETA</h1>
<p>Tenemos una línea de tiempo y muchos elementos en una biblioteca, pues simplemente tenemos que recorrer todas las líneas de tiempo y encontrar todos los campos de texto estáticos, convertirlos en campos de texto dinámicos, asignarles una variable, leer su contenido y guardarlo en un fichero XML.</p>
<p>Como trabajamos en una súper empresa enorme con múltiples departamentos, contamos con un departamento de traducción y muchos más, nos ponemos en contacto con nuestro amigo Axel del departamento de traducción y le pedimos que nos traduzca el fichero XML a los idiomas que ha pedido el cliente, en unas horas nos lo devuelve. ¡Qué gusto trabajar en esta empresa! todos son tan eficientes que dan ganas de dar el 200% de cada uno.</p>
<p>Bueno, ahora ya tenemos los ficheros XML en Chino, Alemán e Italiano. Pero recordemos, como hemos dicho que trabajamos en una súper empresa en la que todos son la ostia de eficientes, nosotros no vamos a ser menos, así que mientras Axel trabajaba en la traducción del XML, nosotros hemos estado creado el súper lector de XML que simplemente creará variables y asignará valores, para que cuando los textos dinámicos las necesiten ya estén ahí. Así que mira que coincidencia, hemos terminado al mismo tiempo que Axel, con todo el desarrollo que hemos hecho, más esos XML&#8217;s ya tenemos el contenido en 3 idiomas y nos ha tomado menos de un día.</p>
<h1>QUE NECESITAMOS</h1>
<p>Primero un repaso rápido al <strong>entorno de Flash</strong>, en la imagen que se muestra  a continuación podemos ver listados los elementos con los que trabajamos a diario y que para este <strong>Comando</strong> vamos a necesitar.</p>
<p><a href="http://www.nomeva.com/wp-content/uploads/2009/11/esquema_objetos_jsfl.jpg"><img class="aligncenter size-medium wp-image-450" title="esquema objetos jsfl" src="http://www.nomeva.com/wp-content/uploads/2009/11/esquema_objetos_jsfl-300x187.jpg" alt="esquema objetos jsfl" width="300" height="187" /></a></p>
<ol>
<li><strong>Documento</strong> <em>fl.getDocumentDOM()</em></li>
<li><strong>Línea de tiempo</strong><em> fl.getTimeline()</em></li>
<li><strong>Capas</strong><em> fl.getTimeline().layers</em></li>
<li><strong>Biblioteca</strong><em> fl.getDocumentDOM().library</em></li>
<li><strong>Panel de Propiedades</strong><em> fl.setProperty(&#8220;property&#8221;, &#8220;value&#8221;);</em></li>
</ol>
<p>Y ahora si, manos a la obra maestro.</p>
<p>Primero que nada vamos a recorrer la línea de tiempo principal para buscar campos de texto, eso ya nos da pistas sobre lo que tenemos que hacer, veamos, hemos dicho que vamos a recorrer la línea de tiempo principal, entonces esto nos indica que necesitaremos una <strong>referencia </strong>al<strong> documento</strong>, esto lo resolvemos fácilmente utilizando el comando:</p>
<pre class="brush:js">var oDoc = fl.getDocumentDOM();</pre>
<p>Una vez que tenemos una referencia al documento ahora si ya podemos obtener una <strong>referencia</strong> a la<strong> línea de tiempo</strong>, esto lo hacemos con el siguiente dódigo:</p>
<pre class="brush:js">var oTimeline = oDoc.getTimeline();</pre>
<p>Una vez que tenemos una referencia a la línea de tiempo ahora tenemos que obtener una <strong>referencia</strong> a las <strong>capas (layers)</strong>, esta nos la proporciona el objeto línea de tiempo, lo que nos <strong>devuelve</strong> es un <strong>Array </strong>(que guay!!!, de verdad que es súper cómodo trabajar con los Arrays), así que aquí empezaremos a ejecutar bucles <strong>for anidados</strong>. Utilizando un código similar a este:</p>
<pre class="brush:js">var aLayers = oTimeline.layers;
var nTotalLayers = aLayers.length;
for(var i = 0; i &lt; nTotalLayers; i++) { ... }</pre>
<p>Ahora que recorremos las capas, &#8230;</p>
<blockquote><p>¿Porqué recorremos las capas?</p>
<p>Muy buena pregunta, un punto para el que hizo esa pregunta. La respuesta es sencilla, recorremos las capas por que para buscar los campos de texto tenemos que buscar en los fotogramas clave y la única forma que tenemos de garantizar una búsqueda completa es recorriendo todos los fotogramas de la línea de tiempo.</p>
<p>Pero qué!!!!</p>
<p>A ver, a ver, lo vas a hacer tú? o tú? o yo, no, lo va a hacer automáticamente Flash por nosotros, así que hay de que preocuparse.</p></blockquote>
<p>&#8230; vamos a utilizar la propiedad <strong>frames</strong> (<strong>fotogramas</strong>) del objeto <strong>Layer</strong> (<strong>capa</strong>) que también nos devuelve un Array (ahora si que ya no quepo de gozo), para buscar los elementos que tiene ese fotograma, tendríamos un código similar a este:</p>
<pre class="brush:js">var oLayer = aLayers[i];
var aFrames = oLayer.frames;
var nTotalFrames = aFrames.length;
for(var j = 0; j &lt; nTotalLayers; j++) { ... }</pre>
<p>Con esto llegamos casi al punto que nos interesa, el campo de texto, pero nos falta un pequeño paso, el objeto <strong>frame</strong> tiene una propiedad muy útil, me refiero a la propiedad <strong>elements</strong>, esta propiedad curiosamente también nos devuelve un Array (he dicho que me gustan mucho los Arrays, es que son la mar de útiles), el código que utilizaríamos sería algo como lo siguiente:</p>
<pre class="brush:js">var oFrame = aFrames[j];
var aElements = oFrame.elements;
var nTotalElements = aElements.length;
for(var k = 0; k &lt; nTotalLayers; k++) { ... }</pre>
<p>Ahora si, hemos llegado, después de tres bucles anidados, ya tenemos acceso a los elementos del fotograma, así que simplemente tenemos que preguntar el tipo de elemento y en caso de ser de tipo texto podemos modificar sus propiedades y leer el texto que tiene, el código sería más o menos parecido al siguiente:</p>
<pre class="brush:js">var oElement = aElements[k];
if (oElement.elementType == "text") { ... }</pre>
<p>Bueno, que en el párrafo de arriba escribí de más, así que ahora tengo que volver a escribir otra vez lo de modificar las propiedades del campo de texto y leer su texto, esto lo haremos con el siguiente código:</p>
<pre class="brush:js">oElement.textType = "type";
oElement.variableName = "variable_name";
oElement.getTextString();</pre>
<p>Y listo, ya lo tenemos.</p>
<blockquote><p>Menos mal, ya me estaba cansando.</p>
<p>Hey!!! que puedo leer vuestras mentes, a ver tú y tú, los puntos que os habéis ganado hace rato ahora los habéis perdido.</p>
<p>No, no estoy de acuerdo. Si, me estoy cansando, ¿y qué? es normal, con estos tutoriales tan grandes como quieres conservar la atención tanto tiempo. Si quieres mi atención deberías hacer algo más interactivo, entretenido, divertido, cómico, algo en lo podamos participar y no quedarnos todo el rato leyendo. Pero &#8230;</p>
<p>Vale, vale, lo siento. Es que estoy aprendiendo. Pero tomo nota de tus comentario, es más, por ser tan honesto te has ganado 150 puntos. Veis chicos, si todos participaseis cuando menos un poco así &#8230;</p></blockquote>
<p>Ahora veamos el código completo:</p>
<pre class="brush:js">//Delcaración de variables
var oDoc;
var oLib;
var SEPARATOR = ";";
var PREFFIX_VAR_NAME = "_root.varCommandTextLocalizable_";
var nCounter;

var sXML;

//Llamada a los métodos de configuración e inicialización del comando
this.config();
this.init();

/**
 * @method		config
 * @description	Método encargado de configurar el comando
 * @return		Void
 */
function config()
{
	//Indicamos que no queremos ver el mensaje sobre un script de ejecución demasiado larga
	fl.showIdleMessage(false);

	//Limpiamos la ventana de salida
	fl.outputPanel.clear();

	if(fl.getDocumentDOM())
	{
		//Obtenemos la referencia al documento y a la biblioteca
		this.oDoc = fl.getDocumentDOM();
		this.oLib = this.oDoc.library;
	}
	else
	{
		//En caso que no haya un documento abierto mostrarmo un mensaje de alerta.
		alert("Debes tener un documento abierto.");
	}
}

/**
 * @method		init
 * @description	Método encargado de inicializar el comando
 * @return		Void
 */
function init()
{
	//Delcaración de variables
	var aItems = this.oLib.items;
	var nTotalItems = aItems.length;
	var oItem;
	this.nCounter = 1;

	//Inicializamos el valor del XML abriendo la etiqueta principal
	this.sXML  = "&lt;DATA&gt;\n";

	//Llamamos al método analizeTimeline para que analice le línea de tiempo principal
	this.analizeTimeline();

	for (var i = 0; i &lt; nTotalItems; i++)
	{
		oItem = aItems[i];
		if ((oItem.itemType == "movie clip") || ( oItem.itemType == "graphic") || (oItem.itemType == "button") )
		{
			this.oLib.editItem(oItem.name);
			this.analizeTimeline();
		}
	}

	//Finalizamos el valor del XML cerrando la etiqueta principal
	this.sXML += "&lt;/DATA&gt;";

	//Llamada al método createXmlFile
	this.createXmlFile();

	//Limpiamos la memoria de Flash eliminando las variable que hemos creado
	delete aItems, nTotalItems, oItem;
}

/**
 * @method		analizeTimeline
 * @description	Método encargado analizar una línea de tiempo para buscar campos de texto
 *				si encuentra campos de texto, los convierte en dinámicos y les añade
 *				una variable.
 *				Toda la información que va encontrando la almacena en la variable sXML
 * @return		Void
 */
function analizeTimeline()
{
	//Delcaración de variables
	var oTimeline = this.oDoc.getTimeline();
	var aLayers = oTimeline.layers;
	var nTotalLayers = aLayers.length;
	var oLayer;

	//Recorremos las capas
	for (var j = 0; j &lt; nTotalLayers; j++)
	{
		oLayer = aLayers[j];
		oLayer.locked = false;
		oLayer.visible = true;
		if ((oLayer.layerType != "guide") || (oLayer.layerType != "folder"))
		{
			//Delcaración de variables
			var aFrames = oLayer.frames;
			var nTotalFrames = aFrames.length;
			var oFrame;
			var aElements;

			//Recorremos los fotogramas de la capa
			for (var k = 0; k &lt; nTotalFrames; k++)
			{
				oFrame = aFrames[k];
				if (oFrame.elements.length &gt; 0)
				{
					aElements = oFrame.elements;

					//Delcaración de variables
					var nTotalElements = aElements.length;
					var oElement;

					//Recorremos los elementos del fotograma
					for (var l = 0; l &lt; nTotalElements; l++)
					{
						oElement = aElements[l];
						if (oElement.elementType == "text" &amp;&amp; oElement.textType != "input")
						{
							//Delcaración de variables
							var sDataItem = "Nombre de la timeline: " + oTimeline.name;
							var sDataLayer = "Nombre de la capa: " + oLayer.name;
							var sDataFrame = "Número de fotograma: " + (k + 1);
							var sDataElement = "Nombre del elemento: " + oElement.name;
							var sElementText = "Texto del elemento: " + oElement.getTextString();
							var sElementFormat = "Formato del elemento: " + "";
							//fl.trace(sDataItem + this.SEPARATOR + sDataLayer + this.SEPARATOR + sDataFrame + this.SEPARATOR + sDataElement + this.SEPARATOR + sElementText);

							oElement.textType = "dynamic";
							oElement.variableName = this.PREFFIX_VAR_NAME + this.nCounter;

							this.sXML += "	&lt;node varName=\"" + this.PREFFIX_VAR_NAME + this.nCounter + "\"&gt;\n";
							this.sXML += "		&lt;![CDATA[" + oElement.getTextString() + "]]&gt;\n";
							this.sXML += "	&lt;/node&gt;\n";

							this.nCounter++;
						}
					}

					//Limpiamos la memoria de Flash eliminando las variable que hemos creado
					delete nTotalElements, oElement;

				}

				//Incrementamos el valor de k con la duración del fotograma, esto es para que en el siguiente
				//ciclo del bucle vayamos director al siguiente fotograma clave
				k += oFrame.duration - 1;
			}

			//Limpiamos la memoria de Flash eliminando las variable que hemos creado
			delete aFrames, nTotalFrames, oFrame, aElements;
		}

		this.oDoc.exitEditMode();
	}

	//Limpiamos la memoria de Flash eliminando las variable que hemos creado
	delete oTimeline, aLayers, nTotalLayers, oLayer;
}

/**
 * @method		createXmlFile
 * @description	Método encargado de crear el fichero XML con la relación entre textos y variables
 * @return		Void
 */
function createXmlFile()
{
	//Declaración de variables
	var sPath = this.oDoc.pathURI.split(this.oDoc.name).shift();
	var sFileURI = sPath + "textos_extraidos_automaticamente.xml";

	//Comprobación, si existe el fichero lo eliminamos
	if (FLfile.exists(sFileURI))
		FLfile.remove(sFileURI);

	//Creamos el fichero XML
	FLfile.write(sFileURI, this.sXML);

	//Limpiamos la memoria de Flash eliminando las variable que hemos creado
	delete sPath, sFileURI;
}</pre>
<p>Bueno, en este código encontramos además de lo explicado en este tutorial para <strong>recorrer las líneas de tiempo</strong>, <strong>modificar propiedades de campos de texto</strong> y <strong>extraer textos</strong>, código para crear ficheros de texto, en el caso del ejemplo crear un fichero XML con la relación entre la variable asignada al campo de texto y el texto.</p>
<p>El código está comentado, pero si hace falta alguna explicación, si tenéis alguna duda, comentario, mejora, sugerencia, pues aquí estaré gustoso de seguir compartiendo.</p>
<h1>DESCARGAS</h1>
<p>Como es habitual dejo descargas del fichero <strong>JSFL</strong>, también el fichero <strong>MXP</strong> instalable y un <strong>zip</strong> con el paquete del JSFL y un FLA de ejemplo para extraer los textos.</p>
<ul>
<li><a title="Comando - Extractor de Textos" href="http://www.nomeva.com/wp-content/uploads/2009/11/extractor_de_textos.jsfl" target="_blank"><strong>Comando</strong></a> Extractor de Textos (versión JSFL).</li>
<li><a title="Instalador MXP - Extractor de Textos" href="http://www.nomeva.com/wp-content/uploads/2009/11/extractor_de_textos.mxp" target="_blank"><strong>Instalador</strong></a> de<strong> Comando</strong> Extractor de Textos.</li>
<li><a title="Paquete - Extractor de Textos" href="http://www.nomeva.com/wp-content/uploads/2009/11/extractor_textos_paquete.zip" target="_blank"><strong>Paquete</strong></a> con <strong>JSFL</strong> y <strong>FLA</strong> de ejemplo.</li>
</ul>
<p>Saludos!!!</p>
<h1>NOTAS</h1>
<p>Se que algunas personas tendrán mucho que decir, así que por favor háganlo, el tema es complicado, la localización de contenidos es algo muy chungo en ocasiones tal como lo plateo en este ejemplo.</p>
<p>También es cierto que con este ejemplo <strong>no salvamos </strong>otros obstáculos tales como <strong>imágenes que tienen textos </strong>y que con la solución de modificar los campos de texto podríamos estropear el funcionamiento de algunos <strong>campos de texto que ya fuesen dinámicos </strong>y que utilizaran variables.</p>
<p>Ahora si, después de estas notas y una última aclaración, <strong>mi objetivo</strong> es <strong>explicar</strong> el funcionamiento de los <strong>objetos </strong>de<strong> JSFL</strong>, el ejemplo se presta para sacarle partido al lenguaje, así que por eso lo he desarrollado.</p>
<h3>Entradas relacionadas</h3>
<ul>
<li><a title="Recursos JSFL en nomeva.com" href="../category/2008/08/24/recursos-jsfl/" target="_blank">Recursos JSFL</a></li>
<li><a title="Tutorial JSFL - Introducción a comandos" href="../category/2008/09/26/tutorial-jsfl-introduccion-a-comando/" target="_blank">Tutorial JSFL – Introducción a comandos</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica" href="../category/2008/10/12/tutorial-jsfl-comandos-con-interfaz-grafica/" target="_blank">Tutorial JSFL – Comandos con interfaz gráfica</a></li>
<li><a title="Tutorial JSFL - Comandos con interfaz gráfica II" href="../category/2008/11/09/tutorial-jsfl-comandos-con-interfaz-grafica-ii/" target="_blank">Tutorial JSFL – Comandos con interfaz gráfica II</a></li>
<li><a title="Tutorial JSFL - Introducción a Paneles" href="../category/2009/04/24/tutorial-jsfl-introduccion-a-paneles/" target="_blank">Tutorial JSFL – Introducción a Paneles</a></li>
<li><a title="Tutorial JSFL - Panel Auto Save" href="../category/2009/06/28/tutorial-jsfl-panel-auto-save/" target="_blank">Tutorial JSFL – Panel Auto Save</a></li>
<li><a title="Tutorial JSFL - Guardar copia FLA 1/2 (comando)" href="../category/2009/07/05/tutorial-jsfl-guardar-copia-fla-12-comando/" target="_blank">Tutorial JSFL – Guardar copia FLA 1/2 (comando)</a></li>
<li><a title="Tutorial JSFL - Introducción a herramientas (tools)" href="../2009/07/17/tutorial-jsfl-introduccion-herramientas-tools/" target="_blank">Tutorial JSFL – Introducción a herramientas (tools)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.nomeva.com/2009/11/11/tutorial-jsfl-localizacion-de-contenidos-comando/feed/</wfw:commentRss>
		<slash:comments>9</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 [...]]]></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 [...]]]></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>
	</channel>
</rss>

