Archive for the ‘Flash CS3’ Category

Asignar código actionscript en clases a fotogramas concretos

Miércoles, Octubre 8th, 2008

Cuando trabajamos con Flash es probable que montemos la película colocando cada pantalla de la aplicación en un fotograma de la linea de tiempo principal, y que vayamos saltando de fotograma a fotograma para cambiar de pantalla.

Evidentemente cada fotograma tendrá sus gráficos y botones que deberán ejecutar unas funciones. En principio estos códigos deberíamos colocarlos en los fotogramas correspondientes. Quizás para el código no nos interese tener que ir colocándolo fotograma a fotograma sino que queramos trabajarlo a través de clases, y mantener el .fla limpio de código.

Mucha gente al hacer esto se encuentra con el problema que no sabe como escribir y ejecutar funciones a medida vas cambiando de fotograma en la película, o que les salta el típico error de ejecutar las acciones antes de que el fotograma esté disponible.

En este tip mostraré una serie de clases que me sirvieron para hacer esto.

El resultado es que en la clase de la película principal tengo esté código:

Código :

package
{
   import flash.display.MovieClip;
   import com.zguillez.core.TimelineScript;
   //--------------------------------------------------------------------------------
   public class Main extends MovieClip
   {
      private var _timelineScript:TimelineScript;
      //----------------------------------------------------------------------------
      public function Main()
      {
         _timelineScript = new TimelineScript(this);
         _timelineScript.setFrame( 1, new Frame1(this) );
         _timelineScript.setFrame( 2, new Frame2(this) );
         _timelineScript.setFrame( 3, new Frame3(this) );
         /* etc.. */
         stop();
      }
      //----------------------------------------------------------------------------
   }
}

Como se ve, hay una clase que le llamo TimelineScript que me controla que código hay en cada fotograma, y a la que se le agragan a través de la función setFrame() una serie de clases (Frame1, Frame2, Frame3, etc..) que son las clases que contienen el código para cada fotograma independientemente.

Un ejemplo de clase para manejar un fotograma podría ser este:

Código :

package
{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import com.zguillez.core.FrameScript;
   //--------------------------------------------------------------------------------
   public class Frame1 extends FrameScript
   {
      //----------------------------------------------------------------------------
      public function Frame1(ruta:MovieClip)
      {
         super(ruta);
      }
      //----------------------------------------------------------------------------
      override protected function actions():void
      {
         var boton:MovieClip = _ruta.getChildByName("bot1") as MovieClip;
         boton.buttonMode = true;
         boton.addEventListener(MouseEvent.CLICK, function()
         {
            gotoFrame(2)
         });
         /* resto del código para este fotograma */
      }
      //----------------------------------------------------------------------------
   }
}

El código para este fotograma lo colocaremos dentro de la función actions(). En este caso únicamente hacemos que un clip llamado "bot1" nos salte la película hasta el fotograma 2. En principio tendríamos una clase como esta para cada fotograma.

Hay que fijarse que esta clase extiende de otra clase llamada FrameScript. Esta clase contiene métodos comunes para todas las clases de fotogramas como la clase actions(), que deberemos sobreescribir desde las clases concretas, y la función pública gotoFrame() que es la que nos cambia de fotograma y que deberemos utilizar en lugar de un gotoAndStop().

Tanto la clase FrameScript como la TimelineScript las tendremos guardadas dentro de nuestro package de clases para reutilizarlas en diferentes proyectos ya que no necesitaremos editarlas para ningún proyecto concreto.

Aquí las vemos:

Código :

package com.zguillez.core
{
   import flash.display.MovieClip;
   import flash.events.Event;
   import com.zguillez.core.TimelineScript;
   //--------------------------------------------------------------------------------
   public class FrameScript
   {
      protected var _ruta:MovieClip;
      private var _timelineScript:TimelineScript;
      //----------------------------------------------------------------------------
      public function FrameScript(ruta:MovieClip)
      {
         _ruta = ruta;
      }
      //----------------------------------------------------------------------------
      internal function set timelineScript(t:TimelineScript):void
      {
         _timelineScript = t;
      }
      //----------------------------------------------------------------------------
      public final function init():void
      {
         _ruta.stage.addEventListener(Event.ENTER_FRAME, iniActions);
      }
      //----------------------------------------------------------------------------
      private final function iniActions(e:Event):void
      {
         if (_ruta.numChildren > 0)
         {
            if (_ruta.getChildAt(0) != null)
            {
               _ruta.stage.removeEventListener(Event.ENTER_FRAME, iniActions);
               actions();
            }
         }
         else
         {   
            _ruta.stage.removeEventListener(Event.ENTER_FRAME, iniActions);         
            actions();
         }
      }
      //----------------------------------------------------------------------------
      protected function actions():void { /* override */ }
      //----------------------------------------------------------------------------
      protected final function gotoFrame(f:uint):void
      {
         _ruta.gotoAndStop(f);
         _timelineScript.update();
      }
      //----------------------------------------------------------------------------
   }
}

Como vemos esta clase, que es de la que extienden todas las clases concretas de fotogramas, contiene una referencia de la ruta en la que están los gráficos y una referencia de la clase TimelineScript que es la que contiene todas las clases concretas de fotogramas.

Esta clase contiene un método actions() que esta vacío ya que este método será sustituido a través de un override desde las clases concretas de fotograma, ya que evidentemente cada clase tendrá sus propias funciones a ejecutar.

También tiene el método gotoFrame() que como he dicho antes es el que nos hace saltar de fotograma. Vemos que esta función contiene el gotoAndStop() y además ejecuta el método update() de la clase TimelineScript.

Las acciones que incluyamos en la función actions() han de ser inicializadas desde el método init(), más concretamente desde el método iniActions().

Como podemos ver hemos utilizado un ENTER_FRAME para realizar la llamada a la función actions(). Esto es debido a que cuando cambiamos de fotograma y ejecutamos un código, este código se ejecuta antes de que los elementos gráficos de dicho fotograma estén disponibles, con lo que cualquier referencia a ellos desde el código (como por ejemplo el getChildByName("bot1")) nos daría el error de que no existen. Con el ENTER_FRAME generemos un bucle de llamadas hasta que reconoce los elementos gráficos del fotograma, en ese momento ejecuta la acción que les asigna el código.

Vista esta clase, nos queda la clase TimelineScript:

Código :

package com.zguillez.core
{
   import flash.display.MovieClip;
   import com.zguillez.core.FrameScript;
   //--------------------------------------------------------------------------------
   public class TimelineScript
   {
      private var _ruta:MovieClip;
      private var _frameScript:Array = new Array();
      //----------------------------------------------------------------------------
      public function TimelineScript(ruta:MovieClip)
      {
         _ruta = ruta;
         initArray();
      }
      //----------------------------------------------------------------------------
      private function initArray():void
      {
         for (var i:uint = 0; i <= _ruta.totalFrames; i++)
         {
            _frameScript.push(void);
         }
      }
      //----------------------------------------------------------------------------
      public function setFrame(n:uint, s:FrameScript):void
      {
         s.timelineScript = this;
         _frameScript[n] = s;
         if (n == _ruta.currentFrame)
         {
            _frameScript[n].init();
         }
      }
      //----------------------------------------------------------------------------
      public function update():void
      {
         _frameScript[_ruta.currentFrame].init();
      }
      //----------------------------------------------------------------------------
   }
}

Esta clase contiene un Array al que le introducimos tantos elementos como fotogramas tiene la línea de tiempo principal.

A este Array le añadiremos las clases de código concreto para cada fotograma en la posición que les corresponda, a través del método setFrame(), tal como vimos en la clase de la película.

Esta clase también contiene una función update() que lo que hace es ejecutar la función init() de la clase que corresponda al fotograma actual y de esta manera ejecutar las funciones correspondientes para dicho fotograma, y como hemos visto anteriormente esta función update() se ejecuta cada vez que cambiamos de fotograma en la película.

Espero que se entienda el proceso y les sea útil Guiño

Enviar comentario

Cómo usar la herramienta Deco Effect de Flash CS4

Miércoles, Octubre 8th, 2008

Junto con la aparición de la nueva suite de Adobe, se aguardaron por varias sorpresas en Flash de las cuales algunas fueron ciertas, aunque hubo otras completamente inesperadas.
Tal es el caso de la nueva herramienta Deco Tool.

Es por ello que en este Tip, pretendo mostrar un poco sobre esta genial y sencilla herramienta. La cual quizá facilitara mucho el trabajo de algunos diseñadores, ¿y por que no?, también el de algunos pocos programadores.

La Herramienta a grandes rasgos

Permite añadir un tramado continuo, o patrón a lo largo de todo el documento, efecto similar al que se utiliza en Photoshop con su cubo de pintura, pero con la diferencia de que aquí, al personalizar el tramado puedes agregar un clip de película (a partir de aquí, MC) en lugar de una sola imagen.

Por lo que de una manera mas ambiciosa nos da la oportunidad de agregar sus acciones de Action Script, o las animaciones que este clip contenga.

Probando

  • NOTA: Para hacer uso de la herramienta, obviamente necesitaras las versión CS4 de Flash.
  1. Primero vamos a crear un documento nuevo, donde las medidas del mismo no importan mucho. Yo en este caso emplee 410 por 230 pixeles.
  2. Seleccionamos la herramienta Deco Tool, y antes de utilizarla, mostraré aspectos básicos de la misma. Para ello debes abrir el panel de Propierties/Propiedades, tal y como se muestra en la siguiente imagen.

        Como podras ver, este panel esta dividido en dos secciones

    • Drawing Effect: Es aquí de donde elegiremos el MC, o no, para dibujar nuestro patrón. Adelante retomo esta parte mejor.
    • Advanced Options: En cambio, aquí podemos elegir cuantos pixeles se dejan como margen entre los MCs, así como la escala con la que serán dibujados. Si te fijas, deje solamente unos 5 pixeles de margen, a una escala del 100%

  3. Ahora, volviendo al panel de arriba. Podemos dejar el recuadro fill vacío, y Flash solamente dibujará un patrón de lunares o cuadros sin mucha ciencia. En cambio podemos crear en el escenario un MC y así poder personalizar un poco mas el resultado. Creamos un nuevo MC en el que trabajaremos, y daremos click en el botón Edit y seleccionaremos el MC de nuestra biblioteca.
  4. Yo cree un pequeño lunar de unos 8 pixeles de diámetro, que de momento no presenta mayor gracia. Aquí podemos dar un click sobre el escenario con nuestra herramienta Deco, y veras como aparecen dentro de un grupo ordenado todos los MCs ya duplicados.



    Como veras, el resultado no deja de ser mas que un simple patrón de lunares
  • Puedes entrar a la biblioteca, donde tienes tu MC, y entrar a su modo de edición, con un doble click basta para ello. Una ves ahí agregar unas Interpolaciones de Movimiento/Motion Tween al aparecer el MC, y hacer que se vea mas dinámico todo.
  • Otra opción es que agregues algunas Interpolaciones de Forma/Shape Tween, y hacer que constantemente todos los MCs estñen cambiando de color, destelleen, crezcan o se encojan.
  • Finalmente, utilizando un poco de AS3, hacer las dos cosas anteriores sin tanta linea de tiempo y que respondan a algún método del mouse.

Selecciona el unico keyframe en este caso, del MC que estamos editando. Y agrega el siguiente codigo al panel de Acciones/Actions:

Código :

import fl.transitions.*;
import fl.transitions.easing.*;
this.alpha = 0.5;
//
addEventListener(MouseEvent.ROLL_OVER, roll_over);
function roll_over(e:MouseEvent):void{
var xSize:Tween = new Tween(this, "scaleX", Regular.easeOut, 1, 2, 5, false);
var ySize:Tween = new Tween(this, "scaleY", Regular.easeOut, 1, 2, 5, false);
var alfa:Tween = new Tween(this, "alpha", Regular.easeIn, 0.5, 1, 5, false);}
//
addEventListener(MouseEvent.ROLL_OUT, roll_out);
function roll_out(e:MouseEvent):void{
var xSize:Tween = new Tween(this, "scaleX", Regular.easeOut, 2, 1, 5, false);
var ySize:Tween = new Tween(this, "scaleY", Regular.easeOut, 2, 1, 5, false);
var alfa:Tween = new Tween(this, "alpha", Regular.easeIn, 1, 0.5, 5, false);}

Sal de tu MC, llega hasta el escenario y prueba la película nuevamente. El resultado será parecido a este:



Mueve el mouse dentro del recuadro para ver un resultado

Enviar comentario

Flash Player confirmado para iPhone

Martes, Septiembre 30th, 2008

Fueron tres veces las que hablamos de las posibilidades y muertes de la noticia del Flash Player en el iPhone. Pero al fin hay confirmación oficial de Adobe.

Para pocos era un secreto que en las oficinas de Adobe y los clubs de San Francisco, ingenieros de Adobe se pasean con iPhones que tienen el Flash Player cargado. El problema nunca había sido técnico, sino político y táctico, dada la conocida paranoia de Apple por el control absoluto de sus plataformas.

Hoy, en el evento Flash on the Beach, el director de ingeniería en Adobe Systems, Paul Betlem, confirmó la existencia del Flash Player para iPhone.

Paul Bletem :

Mi equipo está trabajando en Flash para el iPhone, pero es una plataforma cerrada.

Obviamente, esto significa que depende de Apple el lanzarlo o no. También significa que Adobe descarta completamente usar el instalador de aplicaciones por Jailbreak (Cydia, Installer). Probablemente un buen movimiento político, pero aun así, es difícil que Apple quiera un plugin de desarrollo de aplicaciones que ellos no puedan controlar dentro de su teléfono.

Por cierto, también está confirmado que habrá Flash Player para Android y el Google 1.

Enviar comentario

Adobe Flash CS4: Top 8 de novedades

Martes, Septiembre 23rd, 2008

Adobe Flash CS4 ha sido desvelado y todas las características que habíamos predicho han sido confirmadas. No muchas sorpresas, pero varias cosas más fáciles de lo que esperaba. Video en H264, rotaciones 3D con eje Z, animación "orientada a objetos" y un cambio completo de muchos elementos de interfaz. Aquí una por una:

Animación basada en objetos

Un nuevo sistema de animación hace que cada objeto en el escenario tenga su propia capa, linea de tiempo y sistema de animación. Los keyframes básicamente desaparecen como los conocíamos para convertirse en puntos de animación. En general parece mucho más fácil animar ahora en Flash CS4 que en las versiones anteriores.

Transformación 3D

Flash CS4 incluye una herramienta de rotación 3D. Con sólo arrastrar y soltar se puede rotar un objeto en los ejes X, Y y Z. Realmente eso es todo lo que es posible hacer con la transformación 3D. Pero hacer esto nativo hará que motores como Papervision3D o Away3D tengan mucha mayor calidad, velocidad, menos peso y mejores gráficos.

Editor de movimiento

Con el editor de movimiento es posible editar TODO. Hay curvas detalladas para el movimiento en X, en Y, las escalas, dimensiones, deformación, rotaciones, todo. Todo es controlable y ajustable en detalle. Ideal para el neurotico promedio de la animación profesional.

Cinematica: Herramienta de huesos

Muchos ya sabíamos que Flash CS4 incluía una herramienta de huesos para hacer cinemática inversa. Útil para animar extremidades del cuerpo, piezas mecánicas entrelazadas y, bueno, huesos. Lo que no sabíamos era lo estúpidamente fácil que es. Básicamente dividides los "huesos" de un sistema de animación en varios movie clips, luego dibujar los huesos encima y se acabó. Lo mejor de todo es que los huesos pueden ser referencia para animación o interactivos con un sólo click. Al ser interactivos, son arrastrables y reaccionan al usuario en ejecución.

Patrones de movimiento

Esta es aburrida, pero seguro es útil para muchos. Creas un estilo de animación, lo guardas y luego lo puedes aplicar fácilmente a otros movie clips. Con la ventaja de que ahora Flash CS4 sabe como está ubicado todo e intenta sincronizar las animaciones de manera inteligente.

Herramienta deco: Modelado procedural

La herramienta deco me tomó por sorpresa. Al seleccionarla, es posible insertar dibujos, vectores o clips de la librería en forma de patrones. Necesitas insertar 15 clips de rayos de sol alrededor de una bola amarilla, la deco tool lo hace en un click. Necesitas insertar muchas estrellas de manera aleatoria y artística en un fondo de noche, la deco tool también hace eso. Parece muy útil al diseñar, pero veo su alcance muy limitado.

Video en H.264

No hay sorpresas aquí. Flash CS4 interpreta, entiende y muestra video en H.264 (.mov, .mp4, MPEG4 en general). Esto ya lo hace la ultima versión del Flash Player 9 y es, por ejemplo, como funcionan los videos de alta definición de vimeo (HD). Flash CS4 no hace el menor intento de recodificar un video si encuentra que es H.264. Con tantas herramientas excelentes para crear videos en MPEG4, no es necesario.

Adobe AIR: Exportación directa

Otra no-sorpresa. Flash CS4 exporta con un simple CTRL+ENTER a Adobe AIR. Muy útil y seguro hará el proceso de crear aplicaciones en AIR mucho más sencillo. Aunque mi sospecha es que la mayoría de autores de AIR sólo usan Flex Builder. Pero seguro será útil para muchas cosas.

Video de lanzamiento


¿Satisfecho? ¿Decepcionado?

Como es costumbre en Macromedia/Adobe: Una versión para desarrolladores y una versión para diseñadores. En esta ocasión les tocó a los diseñadores y los cambios son profundos. El nuevo modelo de animación y las capacidades 3D harán los intros más terroríficos que haya sufrido la web, pero también cosas bastante interesantes para el futuro del diseño de interfaces

¿A ti qué te pareció Flash CS4? ¿Valió la pena la espera o seguirás aferrado a tu Flash 8 con Actionscript 2?

Enviar comentario

Arquitectura Aplicaciones RIA Adobe

Lunes, Julio 28th, 2008

Estaba buscando nuevas novedades de nuestro Gurú de Adobe Mike Chambers en el entorno de las aplicaciones RIA y me he encontrado con este gráfico además de este buen pdf en el que compila todas las APIS, clases, etc. disponibles en la actualidad en la tecnología Adobe. Es verdad que están saliendo cada vez más aplicaciones como el escaparate de Sony Ericcson, Harley Davidson, y aquí en España profesionales como Carlos Rovira ya desarrolla aplicaciones en Flex para el Metro de Madrid sobre Geolocalización y mapas ( Geometro ), Cap Gemini realizó una aplicación también sobre lentes para una franquicia de opticas, etc, eso es que esto se mueve. Por lo que os dejo una imagen que vale más que mil palabras, más enlace al pdf.

Gaia Framework Opensource para Flash

Lunes, Julio 21st, 2008

flash_cs3_50×50.gifUna vez más tenemos que rendirnos al trabajo de Joseba alonso, que para todo aquel que aún no esté inscrito a su grupo de correo ASNativos , no sabe lo que se pierde si te consideras un flashero. Más que nada os dejamos un enlace hacia el artículo que nos deleita ofreciéndonos la opinión y sus impresiones de este nuevo Framework Opensource.

Aquí lo tenéis