| Rastros del Mouse - Huellas - Pisadas |
|
|
|
| Escrito por Fernando |
| Martes, 21 de Abril de 2009 09:30 |
|
1- Primero crearemos la huella que queremos mostar para ello utilizamos la imagen de arriba. la importamos al escenario y luego la convertimos en un movieclip, bueno como sabéis las huellas de personas bienen de par en par así que como es lógico debemos crear tanto la huella del pie derecho como del izquierdo, así que abrimos el mc con la primera huella y la colocamos en X= -34.0 y Y=1, crea un segundo fotograma y coloca una copia de la imagen invertida horizontalmente y colocala en posición X=8 y Y=1 el resultado sera el siguiente. por ultimo para detener las huellas vamos a colocar stop() en cada fotograma así no se repita de forma consecutiva el mc 2.-Abrimos la biblioteca ( Ctrl-L ) dentro encontraremos nuestra mc huella lo seleccionamos y dando clik derecho lo vinculamos con el nombre de huella
3- Ahora vamos con el código en el primer fotograma del escenario coloca esto Código :as3 import flash.utils.Timer; import flash.events.TimerEvent; stage.addEventListener( MouseEvent.MOUSE_MOVE, rastroMouse ); /* Boque de Variables necesarias */ //Coordenadas de X y Y donde se colocara la nueva huella y hara de referencia para la distancia de la segunda var PX:Number=stage.mouseX; var PY:Number=stage.mouseY; //Con esta variable nos ayuda a determinar si el la huella derecho o izquierda la que tenemos que colocar var pie:Boolean; //En esta variable se almasenaran las huellas ceadas par luego saber cula es la ultima var contenedor:Array=new Array; //Con esta variable se determina la distancia entre huella y huella var distancia:Number=60; //Con esta variable nos ayuda a determinar el tiempo de vida en la que se mostraran las huellas var vidaHuella:Number=1000; /*funciones */ function rastroMouse( event:MouseEvent ):void { //Recatamos una variables necesarias para determinar la distancia entre la primera huella y la segunda var xdif = PX - stage.mouseX; var ydif = PY - stage.mouseY; //Según el teorema de Pitagoras determinados si la posición actual del mouse es mayor a la de la distancia //activamos la función si no simplemente no hacemos nada if ((Math.sqrt(Math.pow(xdif,2)+Math.pow(ydif,2)))>distancia) { //Creamos desde la biblioteca var Pisada:MovieClip = new huella(); //Añadimos dentro del Array las huellas que se crean contenedor.push(Pisada); //Usando las funciones Math podemos hacer calcular el ángulo de un ponto a otro Pisada.rotation =-Math.atan2(xdif,ydif)*180/Math.PI;//lo multiplicamos por 180/Math.PI ya que el Math.atan2 nos devuelve los valores en radianes //Colocamos las nuevas coordenadas del ultimopunto donde apareció la huella PX=stage.mouseX; PY=stage.mouseY; //Colocamos la nueva huella en la posición actual del mouse Pisada.x = stage.mouseX; Pisada.y = stage.mouseY; //Con este if comparamos si la ultima huella es la derecho o la izquierda if (pie) { distancia=distancia/2 pie=false; } else { distancia=distancia*2 Pisada.gotoAndStop(2); pie=true; } //Con esto creamos un temporizador de vida para cada huella //Para mas información de esta función mira en el archivo de ayuda es muy interezante y practico var tiempo:Timer = new Timer(vidaHuella, 1); tiempo.addEventListener(TimerEvent.TIMER, FTiempo); tiempo.start(); //Mostramos la huella en el escenario addChild( Pisada ); } } //Con esta funcion detectamos cual es la primera huella que se mostró y luego la eliminaremos tanto //del Array como del escenario function FTiempo(event:TimerEvent):void { //Obtenemos del Array contenedor el primer objeto en este caso seria la primera huella , //y la eliminamos del Array para que la según solicitud no pida el ha huella que ya no existe var t=contenedor.shift(); //Añadimos un enterFrame para crear un efecto mas suave de eliminación t.addEventListener(Event.ENTER_FRAME,elimina); } // Esta quizás sea la funcion mas importante ya que si no eliminamos las huellas creadal a la larga // saturaremos de memoria del ordenador function elimina( event:Event ):void { //Capturamos la huella que se va ha eliminar var mc =event.target; //Restamos su alpha si el valor es mayor mas rapido desaparecera mc.alpha -= 0.05; //Si el alpha del mc es menor a 0 este es eliminado if ( mc.alpha <= 0 ) { mc.removeEventListener( Event.ENTER_FRAME, elimina ); removeChild(mc); } } Analizado en 0.046 segundos ha 74.15 KB/s, GeSHi 1.0.8.2-- CFX.GHCode Programado Por Crea-Flash.com Después de todo podemos crer mas aplicaciones con un poco de imaginacion ,como por ejemlo este la huellas de un gatito descargar archivo de ejemplo Avanzados : para los que trabajan con clases el código seria así Código :as3 package { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.*; public class rastroMouse extends MovieClip { private var PX:Number=0; private var PY:Number=0; private var pie:Boolean; private var contenedor:Array=new Array; private var distancia:Number=60; private var vidaHuella:Number=1000; public function rastroMouse():void { PX=stage.mouseX; PY=stage.mouseY; stage.addEventListener( MouseEvent.MOUSE_MOVE, Pisadas ); } private function Pisadas( event:MouseEvent ):void { var xdif = PX - stage.mouseX; var ydif = PY - stage.mouseY; if ((Math.sqrt(Math.pow(xdif,2)+Math.pow(ydif,2)))>distancia) { var Pisada:MovieClip = new huella(); contenedor.push(Pisada); Pisada.rotation =-Math.atan2(xdif,ydif)*180/Math.PI; Pisada.x =PX= stage.mouseX; Pisada.y = PY=stage.mouseY; if (pie) { distancia=distancia/2 pie=false; } else { distancia=distancia*2 Pisada.gotoAndStop(2); pie=true; } var tiempo:Timer = new Timer(vidaHuella, 1); tiempo.addEventListener(TimerEvent.TIMER, FTiempo); tiempo.start(); addChild( Pisada ); } } private function FTiempo(event:TimerEvent):void { var t=contenedor.shift(); t.addEventListener(Event.ENTER_FRAME,elimina); } private function elimina( event:Event ):void { var mc =event.target; mc.alpha -= 0.05; if ( mc.alpha <= 0 ) { mc.removeEventListener( Event.ENTER_FRAME, elimina ); removeChild(mc); } } } } Analizado en 0.038 segundos ha 40.63 KB/s, GeSHi 1.0.8.2-- CFX.GHCode Programado Por Crea-Flash.com Espero que les guste cualquier comentario o duda hacerlo en el foro |
| Última actualización el Martes, 21 de Abril de 2009 21:41 |


