Archivo categoría ActionScript
Quienes han trabajado con otros lenguajes de programación, por ejemplo PHP, tienen a su disposición la función trim(), que quita de una cadena, los espacios excedentes tanto al principio como al final de la misma. En Flash no tenemos esa opción (aunque en Flex sí a través de la class mx.utils.StringUtils), por lo que tendremos que hacerla nosotros mismos:
String.prototype.trim = function():String
{
return this.replace(/^\s*(.*?)\s*$/g, "$1");
}
var cadena = " cadena con espacios en los laterales ";
trace("*" + cadena.trim() + "*");
La misma utiliza expresiones regurales para quitar los espacios sobrantes, presente desde AS3.
Ésta es una de las primeras classes que armé (ya no recuerdo para qué) cuando estaba tratando de aprender un poco de AS3. La class TweenText nos permitirá mostrar y ocultar un textField de un modo más ‘animado’:
package chicho.effects{
import flash.text.TextField;
import fl.transitions.Tween;
import fl.transitions.easing.*;
public class TweenText extends TextField {
private var _txtfield:TextField;
private var _tiempo:int;
public function TweenText(txtfield:TextField):void {
this._txtfield = txtfield;
this._tiempo = 12;
}
public function mostrar(texto:String):void {
this._txtfield.text = texto;
tween(this._txtfield,0,100,Regular.easeIn);
}
public function ocultar():void {
tween(this._txtfield,100,0,Strong.easeOut);
}
public function set tiempo(tiempo:int):void {
this._tiempo=tiempo;
}
private function tween(myTextField:TextField,inicio:int,fin:int,easing:Function):void {
var myTween:Tween=new Tween(myTextField,"alpha",easing,inicio,fin,this._tiempo,false);
}
}
}
La misma es muy sencilla, cuando instanciamos la class, le pasamos entre paréntesis el textField sobre la cual actuará:
import chicho.effects.TweenText; // var a:TweenText = new TweenText(texto);
Tenemos una propiedad, tiempo, que permitirá configurar la cantidad de fotogramas que llevará el efecto para mostrar y/o ocultar el textField.
Para hacer ésto, existe dos métodos: mostrar(string a mostrar) y ocultar(). El primero mostrará el texto (asignándoselo a la propiedad text del textField) y el segundo lo ocultará. En el medio, y con la ayuda de la class Tween actuando sobre la propiedad alpha del objeto, se hace visible (alpha a 1) o invisible (alpha 0).
a.tiempo = 20;
a.mostrar("Hola!, que tal ?");
a.tiempo = 10; a.ocultar();
La class admite muchas mejoras, entre ellas, que se pueda mostrar contenido HTML, por ejemplo. Siéntanse libre de modificarla a gusto y de acuerdo a sus necesidades.
Si trabajamos dentro del IDE de Flash o en Flex, contamos varias formas de obtener valores mientras estamos desarrollando. Pero una vez publicado, si queremos debuggear no es tan sencillo.
Arthropod es una mini aplicación RIA que nos permite conocer los valores no sólo de un string, sino también de array, object y bitmap.
Luego de descargarla y ejecutada por primera vez, nos pregunta si queremos guardar una copia de la class Debug, que necesitaremos importar en nuestros proyectos para que funcione en conjunto con la aplicación:
import com.carlcalderon.arthropod.Debug;
Debug.log("Mi mensaje para el Debugger");
Con ésto enviamos un string a la ventana del debugger. Si quisiéramos mostrar un array u object:
var aArray:Array = new Array(1,2,3,4,5); Debug.array(aArray); var oObject:Object = new Object(); oObject.nombre = 'Juan'; oObject.apellido = 'Pérez'; Debug.object(oObject);
También disponemos de métodos como warning y error, que muestran mensajes de advertencias / errores destacados por algún color diferentes (los cuales también podemos personalizar):
Debug.warning("Cuidado que puede dar error");
Debug.error("Ésto ha causado un error");

Para descargar la aplicación, y una lista completa de propiedades y métodos: Arthropod.
Mucha gente dirá que hace rato que existe la versión 3 de ActionScript (aprox. más de 4 años) y que hacer un artículo ahora sobre la versión anterior es un poco tarde.
En realidad por mucho que uno intenta imponer AS3, todavía hay programadores y diseñadores que lo utilizan diariamente, y multitud de desarrollos están en AS2.
Luego éste pequeño justificativo, vamos al problema que nos toca en el día de hoy. Si utilizamos un array con índices numéricos, con la propiedad length podremos conocer la cantidad de elementos que contiene determinado array:
var array:Array = new Array(); array[0] = 0; array[1] = 1; array[2] = 2; array[3] = 3; trace(array.length); //devuelve 4
También se podría haber utilizado push() para insertar los elementos, con el mismo efecto. Pero si queremos utilizar como índice una cadena, el resultado no es el mismo (acaso un bug?):
var array2:Array = new Array(); array2['cero'] = 0; array2['uno'] = 1; array2['dos'] = 2; array2['tres'] = 3; trace(array2.length); //devuelve 0
Aún cuando nos aseguramos que los valores se han guardado en el array:
trace(array2['cero']); //devuelve 0 trace(array2['uno']); //devuelve 1 trace(array2['dos']); //devuelve 2 trace(array2['tres']); //devuelve 3
Para solucionar ésto podemos recurrir a un prototype para que nos calcule ésto:
Array.prototype.getLength = function():Number {
var empty:Array = [];
var long:Number = 0;
for (var key:String in this) {
if (empty[key] == undefined){
long++;
}
}
return long;
}
Es un sencillo bucle, que cuenta la cantidad de elementos y retorna ese valor:
trace(array2.getLength()); //devuelve 4
Espero que les sea útil, hasta la próxima.