#011 ActionScript [Q] Tips: controla tus eventos

Todos los que tenemos más fresco AS2 (en mi caso por Flash Lite) tenemos que esforzarnos para mantener los eventos controlados en AS3. En AS2 cuando eliminabas un elemento del escenario, o de un clip, dejaba de responder a los eventos a los que estaba suscrito, y en AS3 esto no es así. Una buena manera de poder llevar un control del estilo de AS2 (que cuando borremos un elemento de la DisplayList deje de escuchar eventos, y de que los recupere cuando deseamos es encerrar estas llamadas, las de addEventListener y removeEventListener en dos métodos y suscribir éstos a los eventos ADDED y REMOVED).

Seguir leyendo…

#010 ActionScript [Q] Tips: recorte irregular de bitmaps con suavizado

Este tip es en realidad una presentación del método copyChannel de la clase BitmapData, pero al menos lo presentamos con una utilidad práctica. Imagina que te piden recortar dinámicamente unas zonas de una imagen pero con formas complejas, e incluso con suavizado en el corte…

Se nos puede ocurrir nada más plantearlo si la forma es regular, emplear una fórmula para saber si un punto se encuentra dentro o fuera (y quedarnos solamente con los interiores), pero y si la forma no es regular? y si el corte no ha de ser brusco, sino con un equivalente al “feather” de photoshop?

Seguir leyendo…

#009 ActionScript [Q] Tips: controla tu foco en AS3

Ya sábado y sin poner el tip correspondiente… una semana complicada creedme…

En AS2 disponíamos de la clase Selection con sus métodos getFocus y setFocus que nos permitían controlar el cambio de Foco o elegir a quién queríamos dárselo, en AS3 se simplifica el proceso con la propiedad focus de stage (aplicable sobre cualquier InteractiveObject), y por otro lado tenemos la clase FocusManager para todos los componentes que implementan la IFocusManagerComponent.

Si lo que queremos es simplemente respetar un orden, podemos trabajar sobre los tabIndex de los elementos en pantalla (sean elementos normales o componentes, y que se mantiene desde AS2), de tal manera que empezando en 1 y dando sucesivos valores, tengamos el orden deseado. Con esto controlamos la transición de uno a otro mediante tabulador.

Seguir leyendo…

#008 ActionScript [Q] Tips: sincronizar FPS

En el útlimo proyecto en el que nos hemos visto embarcados, hemos sufrido muy de cerca 2 características de flash que no son especialmente agradables: no te puedes fiar de los FPS para darle velocidad a un movieclip, y no te puedes fiar de un intervalo, Timer, o como lo quieras llamar para darle velocidad a un clip.

La física ayuda, si un coche va a 40Km/h de forma constante, y avanza recto durante 1 hora, sabes que estará 40 kilómetros desde el punto de medición. Pero en flash lo normal no es actuar así, sino que en un ENTER_FRAME o en un intervalo, le vamos incrementando la posición.
Seguir leyendo…

#007 ActionScript [Q] Tips: recibir valores por flashvars en AS3

El de esta semana es corto, pero necesario ya que es un cambio notable frente al método habitual que estaba establecido para AS2 (donde nos creaba automáticamente una variable con ese nombre en la raiz del documento). Cuando a un SWF le pasamos variables inicialmente por flashvars o por parámetros en la URL, podemos acceder a los mismos de la siguiente manera:

var valor:String = root.loaderInfo.parameters.nombreVariable;

donde nombreVariable es el nombre del parámetro que le pasamos al SWF externamente por flashvars, ya sea desde el OBJECT, EMBED, etc. Hay que tener en cuenta que como todo lo que se recibe externamente por estos métodos, son cadenas de texto a menos que les hagamos la correspondiente conversión.

Upload con FileReference y variables por GET en Mac

Utilizando el  FileReference para subir un fichero al servidor desde un Mac nos puede pasar que en nuestro código as no se dispare algún eventos asociado al FileReference, es decir el onComplete, onProgress, etc. Para este problema encontré en multitud de foros la solución que es tan fácil como que la pagina php o asp devuelva algo, es decir, bastaría en el caso de php escribir echo(“hola caracola”) o si queremos ser un poco más elegantes echo(“transerencia=OK”).

En mi caso después de aplicar esta solución los eventos seguían sin dispararse por lo que seguí buscando por Internet sin encontrar nada que me ayudara. Más tarde empecé a hacer pruebas sobre mi código dando con la solución que os pongo a continuación y espero os ahorre el tiempo que yo invertí pegándome con ello.

Seguir leyendo…

Colisiones y motores de física en Action Script

En la vida de un desarrollador flash lo normal es encontrarse con algún proyecto que implica el manejo de propiedades fisicas, como colisiones, escalados, fuerzas, traslaciones, rotaciones… En muchas ocasiones los efectos son sencillos y no es demasiado complicado crear un sistema realista y funcional, pero otras esto no basta.

Somos programadores y no tenemos por qué tener un grado de conocimiento de matemáticas muy elevado (aunque para bien o para mal nuestro mundo gira totalmente entorno a la geometría y trigonometría), así que nunca viene mal tener un aliado de ese lado, en mi caso tengo la suerte de tener un hermano físico, que muchas veces me ha sacado de un apuro, por un signo incorrecto, una interpretación del problema no adecuada… pero no es plan de abusar de la familia.

Seguir leyendo…

#007 ActionScript [Q] Tips: color aleatorio

Este tip ya lo solté por twitter, pero la verdad que como no quiero que pase otro viernes sin daros vuestra ración (que luego me venís con hambre y esas cosas…) pues creo que no viene mal como ejemplo de ultratip.

Resulta que haciendo un tema para una cabecera en el que necesitaba generar unos colores aleatorios se me cruzó la feliz idea de pensar en meterle un random al mayor de los hexadecimales… porque con un poco de suerte las conversiones implicitas que se hicieran en el proceso, podrían cuadrar. Y efectivamente cuadraron, con lo que no se me ocurre mejor manera de sacar un color random que esta:

var colorAleatorio:Number = Math.random() * 0xFFFFFF;

trace('Color decimal: '+colorAleatorio.toString());
trace('Color hexadecimal: 0x'+colorAleatorio.toString(16));

var circulo:Shape = new Shape();
circulo.graphics.beginFill(colorAleatorio, 80);
circulo.graphics.drawCircle(100, 100, 50);
circulo.graphics.endFill();
addChild(circulo);

Espero que os guste, no sirve para casi nada, pero ahi queda. Además este post tiene doble mérito, es el primero desde mi nuevo Mac Book Pro, con el cual espero poder empezar a dar la lata en breve sobre mis experiencias con Objective-C, Cococha Cocoa y desarrollo para iPhone.

Ejemplos AS3 Adobe Devnet para Flash CS4

De vez en cuando no viene mal un poco de material formativo como éste que os presentamos, que viene de la mano de Adobe, y que en su conjunto es un buen recurso para conocer algunas de las partes de nuestro querido AS3.

Un buen puñado de ejemplos y recursos que tocan temas variados como gestión de coordenadas, API de dibujo, anidamiento de movieclips, trabajo con 3D carga de contenidos multimedia, interactividad, e incluso un par de jueguecillos de ejemplo.

Como complemento os dejamos también este link al trabajo con animación en Flash que también nos viene de la mano de Adobe. Material muy interesante y completo para ampliar conocimientos.

Que los disfrutéis!

#006 ActionScript [Q] Tips: contains()

Este tip es muy directo ya que simplemente comentaré uno de los métodos que obtienen todos las clases que extienden de DisplayObjectContainer, ya sean propias o las consabidas Stage, Sprite, Loader y MovieClip.

En realidad lo interesante de esta función es que no solamente funciona para descendientes directos en la jerarquia de la Display List, sino que busca el resultado en todos los descendientes. Veamos un ejemplo:

Seguir leyendo…