Archive for junio, 2009

Hace un mes vengo incursionando en realidad aumentada y he estado haciendo un par de experimentos. La curva de aprendizaje es bastante profunda… ya pulbicaré aquí mis experimentos, sin embargo la idea de este post fué porque me crucé con un ejemplo que me pareció increible. Se trata de la página de promoción de la película Transformer the revenge of the fallen. En ésta página no usan sólo Flash sino que hace falta instalar también un plugin aparte y lo µas impresionante es que usan un sistema de reconocimiento y seguimiento de rostro.  No dejen de visitarla en http://www.weareautobots.com/

igual aquí va un video de demostración para aquellos que no tengan webcam:

pasar parametros desde botones en AS3

en Actionscript 3.0 cada vez que apretamos un botón se dispara un evento y eso nos lleva a la función que maneja dicho disparo. Y generalmente es cómodo hacer una sola función como respuesta a todos lo botones, y si bien podemos distinguir dentro de la función quien la disparó mediante evento.target a veces necesitamos pasarle mas que sólo quien la disparó sino algún que otro parámetro que nos permita tomar distintas decisiones dentro de dicha función. En el siguiente ejemplo tres botones disparan la misma función y en la función hay un tweener que hace que un mc en el escenario cambia de color según el botón.

bt1_btn._color=0x0000FF; 
bt2_btn._color=0xFF0000;
bt3_btn_color=0xFFFF00;
bt1_btn.addEventListener(MouseEvent.CLICK, cambiarColor);
bt2_btn.addEventListener(MouseEvent.CLICK, cambiarColor);
bt3_btn.addEventListener(MouseEvent.CLICK, cambiarColor);
 
function cambiarColor( e:Event ):void
{
  Tweener.addTween(this.bigBox, {_color:e.target._color, time:1, transition:"linear"});
 }

otra forma de hacerlo es:

bt1_btn.addEventListener(MouseEvent.CLICK, function(e:Event) { cambiarColor(0x0000FF); });
bt2_btn.addEventListener(MouseEvent.CLICK, function(e:Event) { cambiarColor(0xFF0000); });
bt3_btn.addEventListener(MouseEvent.CLICK, function(e:Event) { cambiarColor(0xFFFF00); });
 
 
function cambiarColor(color:Number):void {
         Tweener.addTween(this.bigBox, {_color:color, time:1, transition:"linear"});
 }

Formulas útiles

La idea de este post es publicar formulas que son súper útiles para hacer cálculos de MCs con respecto el mouse. Por ejemplo mover hacia un lado u otro un mc según la distancia del puntero del mouse al centro de escenario o mover una lista de thumbnails según la posición del mouse con respecto distancia al centro del movieclip contenedor.
Lo anterior lo podríamos hacer por trigonometría sacando la distancia, pero también hay formulas útiles para calcular circunferencias y con ellas dibujar tortas para estadísticas incluso animarlas en tiempo de ejecución.

Distancias

La distancia entre dos puntos (x1,y1) y (x2,y2) es representada por la siguiente formula:

Como sacar la distancia del mouse al centro del escenario en AS3:

   var x1=stage.stageWidth/2;
    var x2=mouseX;
    var y1=stage.stageHeight/2;
    var y2=mouseY;
    var distx:Number=Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2));

y si necesitamos esa distancia en porcentaje:

var porcentage=(distx*100)/x1

La única aclaración sería que el método con el cual saco la mitad al centro del escenario en AS3 es: stage.stageWidth y AS2 sólo cambiaría por Stage.width . Cambiando sólo eso debiran andar sin problemas en AS2.

DispatchEvent

Dispatch event, dispatch significa despachar o enviar. y en rigor sirve para forzar un evento, osea decirle a Flash que un evento sucedió o pasó aunque en realidad no haya sido del todo así. Por ejemplo tenes un botón en el escenario que cuando es apretado por el mouse dispara una función:

b1_btn.addEventListener(MouseEvent.CLICK,moveTo);

El botón con instancia b1_btn está en el escenario y cada vez que se clickea llama a la función moveTo

Ahora supongamos que necesito correr esa misma función pero en e; runtime (desde el código en tiempo de ejecución), incluso si nadie haya apretado ese botón. Estaría bueno poder decirle a Flash que sí se apretó el botón, de alguna forma mentirle; y con dispatchEvent se puede y es de la siguiente forma:

b1_btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK, true, false));

El código anterior lo que hace es enviar el evento Click como si hubiese sido disparado por b1_btn los demás parámetros son para el garbage colector (liberar recursos y memoria).

Cortar parte de un texto

Se habrán encontrado varias veces con la necesidad de mostrar un resumen del texto de una noticia, esta función les va a facilitar la tarea sin necesidad de tener que poner  en la base de datos un campo con el resumen de la noticia, salvo que esta sea necesaria.

texto_completo = es la variable que contiene texto de la noticia completa
resumen = es la nueva variable que contendrá 80 caracteres de la noticia completa

var resumen = texto_completo.substring(0, 80);