Comunidad de diseño web y desarrollo en internet online

Duda con eventos

Citar            
MensajeEscrito el 03 Jun 2009 11:36 pm
ke tal gente! aki vengo con otra pekeña duda, espero me orienten.

Lo ke deseo es que al aser click en un displayObject y posteriormente soltar el mouse en cualkier parte del escenario me devuelva una referencia al displayObject al ke se le iso click, concretamente me refieron a los eventos: MouseEvent.MOUSE_DOWN y MouseEvent.MOUSE_UP, me explico mejor:

Planteandonos este contexto: en el stage principal tengo varios sprites, a cada uno lo registro para el evento mouse_down de la siguiente manera:

Código ActionScript :

sprite01.addEventListener(MouseEvent.MOUSE_DOWN, funcionComun);
sprite02.addEventListener(MouseEvent.MOUSE_DOWN, funcionComun);
sprite03.addEventListener(MouseEvent.MOUSE_DOWN, funcionComun);
spriteXXXXX.addEventListener(MouseEvent.MOUSE_DOWN, funcionComun);

function funcionComun(event:MouseEvent) {
   //lo unico que se ase aki es asignar el evento mouse_up cuando se ase clik en un sprite
   stage.addEventListener(MouseEvent.MOUSE_UP, mouseSuelto);
}
function mouseSuelto(event:MouseEvent) {
   trace(XXXXX);//<--aki XXXXX debe ser una referncia al sprite donde se iso click
}


en otras palabras. lo que quiero eske al soltar el mouse en cualkier parte del escenario me diga en cual de los sprites ise click inicialmente, y esto es lo que debe aser la funcion mouseSuelto. Como deberia implementar mi codigo para lograr este resultado??????.
Espero haver sido lo suficientemente claro.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

chrome
Citar            
MensajeEscrito el 04 Jun 2009 07:07 am
No tienes más que guargar en una variable el "target" de donde se hizo el MOUSE_DOWN

Código ActionScript :

//declaramos la variable FUERA de cualquier función
var spritePulsado:Sprite; 

function funcionComun(event:MouseEvent) { 
   //doy valor a la variable spritePulsado
   spritePulsado=event.target
   //lo unico que se ase aki es asignar el evento mouse_up cuando se ase clik en un sprite 
   stage.addEventListener(MouseEvent.MOUSE_UP, mouseSuelto); 
} 
function mouseSuelto(event:MouseEvent) { 
   //es la variable
   trace(spritePulsado);
}


Vale, toca ahora hablar de las "fases de los eventos" y de la diferencia entre target y currentTarget
Primero, leemos un poco de inglés sobre Las Fases de los eventos
Segundo podemos "jugar" con el siguiente código

Código ActionScript :

//Crear un fichero llamado "main.as"
//Cortar y pegar 
//Crear una película Flash nueva y decirle que es la Clase de documento de dicha película es Main
package 
{
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.events.MouseEvent;
   import flash.text.TextField;
   
   public class Main extends MovieClip 
   {
      public var texto:TextField = new TextField();
      public function Main():void 
      {
         if (stage) init();
         else addEventListener(Event.ADDED_TO_STAGE, init);
      }
      
      private function init(e:Event = null):void 
      {
         var container:Sprite = new Sprite();
         container.name = "container";
         var one:Sprite = new Sprite();
         one.graphics.beginFill(0xaaaaaa);
         one.graphics.drawCircle(10,10,5)
         one.name = "one";
         var two:Sprite = new Sprite();
         two.graphics.beginFill(0xaaaaaa);
         two.graphics.drawCircle(30,10,5)
         two.name = "two"
         var three:Sprite = new Sprite();
         three.graphics.beginFill(0xaaaaaa);
         three.graphics.drawCircle(30,30,5)
         three.name = "three";
         var four:Sprite = new Sprite();
         four.graphics.beginFill(0xaaaaaa);
         four.graphics.drawCircle(10,30,5)
         four.name = "four";
         one.addChild(two);
         two.addChild(three);
         three.addChild(four);
         container.addChild(one);
         container.graphics.beginFill(0xaa00aa);
         container.graphics.drawRect(0, 0, 50, 50);

         //Probar lo que ocurre si ponemos a "true" el 3º argumento -Si usamos la CapturePhase"
         container.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true);
         addChild(container);
         texto.x = 100;
         texto.height = 400;
         addChild(texto);
      }

      private function onMouseDown(evt:Event):void {
         texto.text = texto.text+evt.currentTarget.name + " " + evt.target.name+"\r";
      }
   }
}


NOTA: Siempre me he hecho un lío con target y currentTarget ¿Hay algún "tip" por ahí?

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 04 Jun 2009 08:32 pm
Gracias Eliseo. enserio no me esperaba una respuesta tan detallada, es mas pense que nadie me responderia pero vaya que me echaste mas de una mano, buena info enserio ke si.

Por marrkitos

51 de clabLevel



 

Arequipa - Peru

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.