miércoles, 9 de diciembre de 2009

ActionScript 3: Solución para problemas con la Clase Tween

Hoy te traigo un jueguito muy simple pero que tiene algunas cosas interesante para analizar como listeners para teclado y mouse, setInterval() y otras yerbas que irán apareciendo en el script.
Desde ActionScript2 vengo utilizando con maravillosos resultados la clase tween para hacer animaciones pequeñas (cambiar alphas, posicion, tamaño, etc).

Por eso, cuando me mudé a ActionScript3 me puse muy contento al saber que todavía existia nuestra clase Tween.

El problema es que, entregado al Tween, de pronto me encontré haciendo algo como esto:

import fl.transitions.*;
import fl.transitions.easing.*;
function hacerAlgo():void{
var mySprite:Sprite;
for (var i:uint = 0; i <>
mySprite = new cuadrado_mc();
stage.addChild(mySprite);
mySprite.x = Math.random() * stage.stageWidth;
mySprite.y = Math.random() * stage.stageHeight;
new Tween(mySprite, 'alpha', None.easeNone, 0, 1, 1, true);
}
}
hacerAlgo();

Mientras éste código lo cargo una vez no hay problemas, pero cuando necesita rehacer el dibujo (digamos si cambio los valores desde un combo box u otra modificación en tiempo de ejecución) ocurre que a veces funciona y a veces no.

Cuando me cansé de buscar y rebuscar donde me había equivocado empecé a buscar respuestas en internet. Resulta que este problemita del tween viene de la mano de un nuevo artilugio de flash (al menos nuevo para mí): El Garbage Collector.

Lo que hace este recolector de basura es borrar las variables que flash carga en la memoria y que estan sin uso. El asunto parece ser que el tween ocupa mucho espacio en memoria y como flash termina el bucle (for) antes de que el tween termine su proceso, se borran las variables temporales y el proceso del tween queda trunco: A veces funciona, a veces funciona a medias y otras directamente no funciona.

Encontré montones de recomendaciones muy complejas. Algunas no las entendí, otras directamente no funcionaban.

La solución definitiva (hasta el momento porque nada es definitivo) la encontré con una Clase externa que se monta en tu proyecto y reemplaza a la clase tween de flash.
Esta galería de clases se llama CGSafe (algo así como seguro contra el garbage collector) y funciona muy parecido a la de flash, pero bien ;). Es gratuita y funciona muy bien.

Además sirve para problemas similarers con: Timers, Loaders y URLLoaders.

Lo que hay que hacer es:
1) Descargarse el paquete de Clases de la pagina del desarrollador. o haciendo click AQUI (es la ruta original del desarrollador).
2) Poner dentro de tu proyecto la carpeta com que contiene todas las clases CGSafe.
3) Importar las clases en actionscript:
donde antes importabas import fl.transitions.*; ahora importas import com.exanimo.transitions.GCSafeTween;.
4) En lugar crear al tween como new Tween(mySprite, 'alpha', None.easeNone, 0, 1, 1, true); ahora lo creas escribiendo new new CSafeTween(mySprite, 'alpha', None.easeNone, 0, 1, 1, true);.
Es prácticamente igual. El código de nuestro ejemplo, modificado, quedaría así:

import com.exanimo.transitions.GCSafeTween;
import fl.transitions.easing.*;
function hacerAlgo():void{
var mySprite:Sprite;
for (var i:uint = 0; i <>
mySprite = new cuadrado_mc();
stage.addChild(mySprite);
mySprite.x = Math.random() * stage.stageWidth;
mySprite.y = Math.random() * stage.stageHeight;
new CSafeTween(mySprite, 'alpha', None.easeNone, 0, 1, 1, true);
}
}
hacerAlgo();

5) Disfrutas viendo tus animaciones sin cortes abruptos ni errores incomprensibles.

Nota: Hay un monton de Clases por ahí que hacen lo mismo. Yo elegí la GCSafe porque es la más similar a la de Adobe y porque funciona muy bien.

Nota 2: Si esta información te sirvió por favor hacé click en los enlaces patrocinados para ayudarme a mantener este blog en línea.

sábado, 5 de diciembre de 2009

Recursos gratuitos navideños 2: Muchos recursos

Siguiendo con la busqueda de recursos navideños llego hasta el blog de Teo Atienza quien presenta un gran compilado de recursos gratuitos para diseños navideños compuesta por íconos, fondos de escritorio, vectores, pinceles, themes para wordpress y fotografías. Aquí van los links para cada descarga.

Diseños navideños gratuitos

Se viene la navidad y con ella los desarrollos de e-cards, postcards, tarjetas de felicitación y otros tantos derivados para campañas con motivos navideños.

Salimos a buscar recursos gratuitos por internet y encontramos algunas cosas interesantes.

La gente de CreativosOnline publicó un paquete con 31 vectores navideños gratuitos útiles en formato .EPS y .AI de gran tamaño que podes descargar haciendo click acá o sobre la imagen de al lado.

Además dejan un pack de 150 patrones y estampados con movitos navideños gratuitos útiles para diseño de wallpapers, tarjetas, etc. Podes descargarlos haciendo click en cáda imagen del post.

martes, 1 de diciembre de 2009

ForDesigner: Un monton de cosas útiles y gratuitas

ForDesigner.com es un sitio dedicado a recolectar recursos vectoriales gratuitos y ponerlos a disposición de los usuarios.

Allí podremos encontrar desde colecciones de íconos y trazos vectorizados , recursos y templates completos en flash, psd, banco de imagenes.

Las secciones estan divididas por tipo de recurso: Vectores / PSD / Flash / Imagenes (banco) / PNG / Templates (flash, html, etc).

Las temáticas varían pero principalmente está enfocado a vectores: shapes, galerías de íconos, backgrounds, trazos.


miércoles, 25 de noviembre de 2009

ActionScript 3: Sumar dos String

Hoy te traigo un jueguito muy simple pero que tiene algunas cosas interesante para analizar como listeners para teclado y mouse, setInterval() y otras yerbas que irán apareciendo en el script.Cuando ponemos contenido dentro de una variable del tipo XML, éstos serán siempre cadenas de texto. Por Ejemplo:
Si queremos realizar alguna operació con los valores del xml tenemos al menos dos opciones:

1) Definir nuevas variables del tipo Number y cargar el contenido del xml
var numero1:Number = operadoras.children()[0].attribute("historico"); //En el primer children (0) con el atributo "historico";
var numero2:Number = operadoras.children()[1].attribute("historico"); //En el segundo children (1) con el atributo "historico"
2) Realizar la nueva operación pero "avisandole" a actionscript que debe tratar ese contenido como si fuera numérico:
suma = Number(operadoras.children()[1].attribute("historico")) + Number(operadoras.children()[0].attribute("historico"));//Toma los datos del xml pero previamente se indica que lo trate como number: Number("el string que sea"). trace(suma);

Personalmente me gusta la segunda forma. De más esta decir que en ambos casos, si el contenido del xml no es un número nos dará el famoso NaN (Not a number).

Si querés el archivo .fla de este ejemplo dejame un post con tu email.

martes, 24 de noviembre de 2009

ActionScript 3: Clase para crear un ComboBox con datos de un XML

Pues eso: Si tenés un combo box en tu biblioteca de flash y un .xml donde están sus datos puedes cargarlos dinámicamente utilizando una pequeña clase en actionscript.

Entonces:
1) Generá un archivo .fla que se llame "Ejemplo_combo_xml.fla".
1a) Poné en la biblioteca un ComboBox
1b) Definí la clase del documento como "Ejemplo_combo_xml" (en propiedades: Clase del documento: nombre de la clase)

2) Armá un archivo .xml llamado "Ejemplo_combo_xml.xml" que contiene la información para el combo de éste modo:

3) Generas un archivo llamado "Ejemplo_combo_xml.as" y acá empieza lo bueno. Este es el código que debemos escribir para crear la clase:

package{
import flash.display.*; //importo todos los displays
import flash.events.*; //eventos de movie
import flash.net.*; // clases para cargar xml
import fl.controls.ComboBox; //el combo esta previamente cargado en la biblioteca
//CLASE
public class Ejemplo_combo_xml extends MovieClip{
//CONSTRUCTOR - No me gusta poner cosas allí. Si es necesario iran variables.
public function Ejemplo_combo_xml(){
miNuevoCombo(); //llamo a la funcion mi combo
}
//FUNCION QUE CREA LOS COMBOS
function miNuevoCombo():void{
var miCombo:ComboBox = new ComboBox();
miCombo.width = 150; //ancho que quiero que tenga el combo
addChild(miCombo);
llenarCombo(miCombo);//Llamo a la funcion que va a cargar los datos en los combos
//FUNCION PARA LEER EL COMBOBOX CUANDO HAGA CLICK
miCombo.addEventListener(Event.CHANGE, cambiarCombo);
function cambiarCombo(evt:Event){
if(miCombo.value!="seleccionar"){
trace(miCombo.value);
}
}
}
//FUNCION PARA LLENAR LOS COMBOS CON EL XML DE PAIS
function llenarCombo(miCombo):void{ //RE
miCombo.addItem({label:"Seleccionar",data:"seleccionar"});
var generalXML:XML; //creo una variable tipo XML que contendrá el contenido del archivo .xml
var cargador:URLLoader=new URLLoader();//cargador del xml funciona/no funciona
cargador.addEventListener(Event.COMPLETE, cargarXML); // si todo bien con el XML llamo a la funcion que carga los datos en la variable XML
cargador.addEventListener(IOErrorEvent.IO_ERROR, errorCargarXML); //si todo mal con el XML te lo aviso
cargador.load(new URLRequest("Ejemplo_combo_xml.xml"));
//FUNCION QUE CARGA LOS DATOS DEL ARCHIVO .XML EN LA VARIABLE XML
function cargarXML(evt:Event):void {
generalXML=new XML(evt.target.data);
cargador.removeEventListener(Event.COMPLETE, cargarXML);
cargador.removeEventListener(IOErrorEvent.IO_ERROR, errorCargarXML);

for(var i:int=0;i<generalxml.children().length();i++){
miCombo.addItem( { label:generalXML.children()[i].attribute("nombre"), data:generalXML.children()[i].attribute("valor") } );
}
}
//FUNCION QUE AVISA SI HUBO UN PROBLEMA CON EL XML
function errorCargarXML(evt:IOErrorEvent):void {
trace("Error en la carga");
}
}
}
}

Si quieres el archivo fuente de este ejemplo dejame un comentario con tu mail y te lo mando.
Saludos!

jueves, 19 de noviembre de 2009

Create Your Own Wallpapers Application


x3 studios presenta esta aplicación flash premiada por thefwa (the Favourite Website Awords) para generar wallpapers de forma dinámica.

Esta aplicación flash permite a cualquier usuario crear fondos de pantalla personalizados sobre la marcha, con elementos de fondo, gráficos, texto y las opciones de fuente.

Un buen juego de diseño, programación y buenos resultados personalizados.
El portal que comparte sus ingresos