Entradas con la etiqueta ‘AS3’

AS3 – Precargar la película principal (II)

Publicado por Iván Gajate el 10 de agosto de 2010 en AS3, Flash, Tutoriales | 10 comentarios »

Ya vimos cómo hacer un preload en AS3 de nuestra película principal. Ahora he cambiado un poco los archivos para que resulte más fácil de utilizar y me quito de encima las cosas que no me gustaban de la anterior precarga, aunque la idea sigue siendo la misma: una peli externa que carga la principal.

Ahora va por eventos, y se gestiona todo desde la peli precarga.fla. Ahí cambias la gráfica de la precarga y lo que quieras que haga durante el progreso y cuando termine.

Ya no hay que meter parámetros propios en el html (a menos que se quiera claro). También recoge los parámetros de la url directamente y se los inyecta a la peli principal como flashvars.

Hay un parámetro que si que puede recibir para evitar la caché del navegador ‘avoidCache’ (por defecto a false).

Descargar ejemplo del Precargador

Crear Dinámicamente Instancias de Clase en AS3

Publicado por Iván Gajate el 7 de junio de 2009 en AS3, Flash | 19 comentarios »

Normalmente creamos una instancia de una clase con un simple

var cuadrado:Cuadrado = new Cuadrado();

Y eso está muy bien cuando conocemos el tipo de objeto que queremos crear, en este caso un Cuadrado.

Pero cuando no lo conocemos porque es variable, por ejemplo porque depende de una elección del usuario, tenemos que hacerlo así:

import flash.utils.getDefinitionByName;

var nombreClase:String = "es.yporqueno.Cuadrado";
var miClase:Class = Class(getDefinitionByName(nombreClase));
var instancia:* = new miClase();

addChild(instancia);

 

Leer el resto de esta entrada

AS3 – Precargar la película principal

Publicado por Iván Gajate el 14 de abril de 2009 en AS3, Flash, Tutoriales | 13 comentarios »

UPDATED: He mejorado un poco la precarga, se puede ver aquí.

Hay varias formas de hacer precargas en AS3, pero la solución más sencilla es precargar nuestra peli principal desde otro swf que haga todo el trabajo sucio.

El método consiste en una peli ligera ‘precargador.swf’ que es la que se embebe en el html, y se le pasa como parámetro la peli que queremos cargar. Cuando se termine la carga, el precargador añade la peli principal al escenario y ésta funciona como si se hubiese cargado directamente en el html.

Así podemos trabajar en nuestra película principal sin preocuparnos de su precarga y sin cambiar nuestra rutina de trabajo, y cuando queramos verla online, tan solo hay que poner el precargador de 8 KB al lado 🙂
Leer el resto de esta entrada

AttachMovie en AS3 desde Eclipse

Publicado por Iván Gajate el 15 de febrero de 2009 en AS3, Flash, Tutoriales | 4 comentarios »

Ya hemos visto como instalar Eclipse con el plugin de Flex para editar ActionScript, pero no sabemos cómo vincular un clip de película de la biblioteca al escenario, lo que en AS2 era un attachMovie.

En Flash lo haríamos así:

var cuadrado:Cuadrado = new Cuadrado();
cuadrado.x = 100;
cuadrado.y = 100;
addChild(cuadrado);

donde Cuadrado es el nombre de la clase asociada a ese clip de la biblioteca, pero en Eclipse no tenemos biblioteca. Entonces, ¿como lo hacemos???

Tenemos que exportar la biblioteca como un archivo swc, e importarlo luego en nuestro proyecto de Eclipse. El resto es exactamente igual.

Leer el resto de esta entrada

Rendimiento y Optimización de AS3

Publicado por Iván Gajate el 23 de enero de 2009 en AS3, Flash | 15 comentarios »

Leo en xinterface un listado de enlaces que pone Diego muy interesante sobre el rendimiento y la optimización de AS3:

Aplicación Flex con pruebas de rendimiento en tiempo real y reflejadas en gráficas de datos comparativas
http://businessintelligence.me/projects/performance_tester/performanceTester.html

Visible vs alpha vs removeChild()
Ventajas y desventajas de cada uno de los métodos, y situaciones prácticas de cada uno
http://www.insideria.com/2008/11/visible-false-versus-removechi.html

Caracteres “\n” y “\r” en un String de ActionScript
http://www.moock.org/blog/archives/000281.html

Descarga (unload) de contenidos cargados en Flash Player.
A veces es un infierno. Aquí entendereis el por qué y cómo solventarlo
http://www.moock.org/blog/archives/000279.html

Más sobre descarga de contenidos
http://www.gskinner.com/blog/archives/2008/04/failure_to_unlo.html

La manera más rápida de copiar un array
http://agit8.turbulent.ca/bwp/2008/08/04/flash-as3-optimization-fastest-way-to-copy-an-array/

Operaciones matemáticas más rápidas. Optimización mediante operadores de bit
http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/

Comparativa de rendimiento de los distintos loops de AS3
http://lab.polygonal.de/2006/10/08/as3-loops-performance-comparison/

Comparativa de rendimiento entre Flash Player Debugg y Flash Player Release
http://lab.polygonal.de/2006/10/08/as3-loops-performance-comparison/

Optimización de operaciones con seno y coseno
http://lab.polygonal.de/2007/07/18/fast-and-accurate-sinecosine-approximation/

Optimización de cálculo
http://rockonflash.wordpress.com/2007/08/11/optimizations-for-as3-calculations/

Técnicas generales de optimización. Pdf muy completo
http://je2050.joa-ebert.com/files/misc/as3opt.pdf

Optimización de operaciones de cálcula básicas y uso de la clase Math
http://osflash.org/as3_speed_optimizations

Comparativa entre métodos “manuales” y la clase Math
http://www.calypso88.com/?cat=7

Loops y variables. Un ejemplo muy concreto
http://www.bit-101.com/blog/?p=1271

AS3 – Cosas que se deben hacer antes de descargar un swf

Publicado por Iván Gajate el 11 de enero de 2009 en AS3, Flash | 15 comentarios »

Un listado muy completo por Colin Moock para evitar problemas con el garbage collector en AS3 al descargar un swf. Via Moock Blog.

Things You Must Do Before Unloading a SWF File

If you load a .swf file into Flash Player 9 with ActionScript 3.0 and subsequently wish to remove it from memory, you must first deactivate it, and then dereference it. If you dereference the .swf without deactivating it, it will continue to consume resources and in some cases might never become eligible for garbage collection.

Here is an unofficial list of tasks required to deactivate a .swf file:

  • Tell any loaded .swf child assets to disable themselves.
  • Stop any sounds from playing.
  • Stop the main timeline, if it is currently playing.
  • Stop any movie clips that are currently playing.
  • Close any connected network objects, such as instances of Loader, URLLoader, Socket, XMLSocket, LocalConnection, NetConnections, and NetStream.
  • Release all references to cameras and microphones.
  • Unregister all event listeners in the .swf (particularly Event.ENTER_FRAME, and mouse and keyboard listeners)
  • Stop any currently running intervals (via clearInterval()).
  • Stop any Timer objects (via the Timer class’s instance method stop()).

Note that the preceding list is, by definition, insufficient because it is neither exhaustive nor officially maintained by Adobe. If you know of a task that needs adding to the preceding list, please sent it to me via email (username colin, domain moock.org).

As of Flash Player 10, the preceding tasks can be performed automatically by calling the Loader class’s new method unloadAndStop().

For further discussion, see Charge #2 in my Inside RIA article, The Charges Against ActionScript 3.0 and Grant Skinner’s article Additional Information on Loader.unloadAndStop().

AS3 si, AS3 no, AS3 si, AS3 no…

Publicado por Iván Gajate el 31 de diciembre de 2008 en Desarrollo Web, Flash | 17 comentarios »

Transcribo aquí una conversación muy interesante que hemos tenido en ASNativos sobre el gran paso que ha dado Flash con el AS3. Me gusta la forma tan gráfica en que lo expresa Fede.

Usuario:

Bueno, es lo de siempre: ¿hacer una clase sólo para esto?
Sigo pensando que AS3 está mal hecho y tb Moock (http://www.insideria.com/2008/07/the-charges-against-actionscri.html)

Yo:

No está mal hecho (aunque aún tienen que arreglar cosas), pero el cambio es muy radical.
Han dado la espalda a todos los diseñadores-desarrolladores sin conocimientos de programación, que son los que en su día hicieron grande Flash, y ahora se encuentran con que no pueden poner un boton para mandar un email sin pedir ayuda o leer mucho en internet. Y eso si me parece mal. Es una apuesta muy arriesgada, y por mucho que nos guste AS3 a los programadores, no se si podremos *mantener* nosotros solos el ritmo de crecimiento del programa. El programa está muy lanzado, pero antes conocía mucha gente que había empezado con Flash trasteando, y ahora casi no veo que nadie empiece por su cuenta, y eso a medio plazo no se en qué va a terminar.
Un saludo.

Fede Rivas:

Hombre, mal hecho no, pero es cierto que muchas comodidades se han perdido. Yo pico ahora muchisimo mas codigo ahora con AS3 que antes con AS2, esta claro que el lenguaje ha supuesto un avance brutal, pero hay simples operaciones que ahora son ciertamente complicadas de realizar, cuando no tendrían porque.

Estoy con Ivan, a ver a cuantos conoceis iniciandose en Flash por su cuenta y riesgo, tal como hicimos muchos en su día.

Realmente, no se hasta que punto esto puede ser positivo o negativo. Por una parte, esto nos deja a los que estamos mas puestos en picar código en una posicion buena, ya que nuestro gremio es bastante reducido y de hecho, puedes encontrar ofertas de programadores AS3 donde quieras, pero por otra parte, deja al público de flash mucho más restringido a gente con conocimientos avanzados de programación, lo cual para el avance de la aplicación es ciertamente peligroso.

Yo lo que veo es lo siguiente. Pongamos, una escala de 0 a 100 de utilización Flash. Para un uso muy básico, lease animaciones sin más, con interacción nula por parte del usuario, lease de 0 a 20 por decir, el programa es sencillo, y adsequible para gran parte del público.

Ahora, si pasamos a un punto de 20 a 40, donde entra ya interactividad, y uso de programacion, se pone la cosa bastante cuesta arriba ( siempre hablando de AS3 ), aqui ya se produce una criba importante. Es como el “salto al vacio” para aquellos que no saben programacion.

Si el uso fuera de un 40 a un 80, digamos programacion avanzada, bases de datos y tal, la aplicacion responde bien y tal, pero queda este rango para programadores tal cual, y empieza a ser complicado meterse hasta aqui.

Bien, si ya usas del 80 al 100, programando en plan friki aplicaciones bastante tochas, Flash cojea bastante de muchos sitios, aparecen bugs, empiezan terrenos farragosos de garbage collector, sandbox, y demas movidas, y llegas a la conclusion de que quiza la aplicacion esta verde aun en este rango.

En definitiva, creo que la aplicacion tiene un inicio “bueno” y una zona intermedia “buena”, pero cuenta con un salto importante para aquellos que quieran una interactividad basica, y bastantes fallos para aquellos que buscan exprimir mas alla del 80 el programa.

Adobe se tiene que poner las pilas, muy bonito lo del 3D, lo de los “bones” y tal, muy potente el AS3, pero creo que deben pulirse muchas cosas, y facilitar una curva de aprendizaje mas lineal para usuarios que comienzan desde 0.

AS3 – Calcular del valor máximo de un array numérico

Publicado por Iván Gajate el 27 de noviembre de 2008 en AS3, Flash, Tutoriales | 17 comentarios »

Lo típico, tienes un array de números, y quieres saber el valor máximo. Extrañamente no hay ningún método en los Arrays de AS3 para hacerlo ¿? y con un sort a veces se le pira la pinza y no lo hace bien. Además, se supone que es mas costoso de rendimiento.

// Devuelve el valor maximo de un array numerico
function max(array:Array):Number{
	var maxVal:Number = 0;
	for each(var item:Number in array){
		maxVal=(item>maxVal) ? item : maxVal;
	}
	return maxVal;
}

var miArray:Array = [1, 4, 35, -76, 2];
trace(max(miArray));  // Devuelve 35

Simular un evento en AS3

Publicado por Iván Gajate el 11 de noviembre de 2008 en AS3, Flash, Tutoriales | 20 comentarios »

La gestión de eventos de AS3 es muy buena, aunque a veces nos obliga a estar demasiado “encorsetados” en el trabajo día a día.

Algo que es muy común es poner un botón con su listener y una función detectora del evento, que recibe un parámetro de tipo MouseEvent:

import flash.events.MouseEvent;

miBoton.addEventListener(MouseEvent.MOUSE_DOWN, miOnMouseDown);

function miOnMouseDown(evento:MouseEvent):void{
	trace("Boton pulsado!!");
}

Hasta aquí todo guay. El problema viene cuando queremos llamar a esa función directamente, sin haber pulsado el botón, por ejemplo si queremos simular la acción del usuario o ejecutar el código de miOnMouseDown nada mas entrar en la sección. Nuestra función espera un evento de tipo MouseEvent como parámetro, y si hacemos la llamada sin ese parámetro nos dará un error al compilar.

La solución pasa por pasarle un parámetro de tipo MouseEvent construido por nosotros mismos:

miOnMouseDown(new MouseEvent(MouseEvent.MOUSE_DOWN));

Leer el resto de esta entrada

Emitir eventos personalizados en AS3 (I)

Publicado por Iván Gajate el 9 de noviembre de 2008 en AS3, Flash, Tutoriales | 23 comentarios »

Ahora en AS3 es mucho mas fácil emitir un evento personalizado desde un objeto y recogerlo con un listener. Se hace mediante dispatchEvent.

Al igual que cuando queremos recoger el evento de ratón mouseDown lo hacemos así:

import flash.events.MouseEvent;

boton_btn.addEventListener("mouseDown", botonPulsado);

function botonPulsado(evento:MouseEvent):void{
	trace("Boton pulsado!!");
}

también podemos hacer que nuestros objetos emitan eventos para que otros objetos puedan recogerlos con un listener.

En AS3 todos los objetos que hereden de alguna subclase de DisplayObject (todos los de la lista de visualización) pueden emitir eventos, con lo que si nuestra clase extiende de Sprite, que será lo mas normal, pues ya podemos hacerlo.

Para emitir un evento haremos esto:

dispatchEvent(new Event("accionTerminada"));

donde accionTerminada es nuestro evento personalizado. Para recoger este evento usamos un listener:

import flash.events.Event;

emisor.addEventListener("accionTerminada", onAccionTerminada)

function onAccionTerminada(evento:Event):void{
	trace("Accion Terminada");
}

Leer el resto de esta entrada