Comunidad de diseño web y desarrollo en internet online

MouseEvent.DOUBLE_CLICK no se dispara!

Citar            
MensajeEscrito el 01 Oct 2008 02:24 pm
Hola, estoy tratando de cachear el double click pero no pasa nada. Uso este código:

Código :

doubleClickEnabled = true;
addEventListener( MouseEvent.DOUBLE_CLICK, function():void{trace('doble clic')} );


Esto lo hago directamente en el Stage, o sea en la clase principal de la aplicación, que extiende a Sprite.

Si quiero detectar otros eventos del mouse, funcionan perfecto, pero el doble click no.

Alguien sabe por qué?

Gracias! y saludos

PD: que buenos emoticones! :D :? :roll: :lol: :evil: :twisted: ^^ :wink: :cool: :)

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 02:43 pm
Para acceder al Stage, lo tienes que hacer desde la propiedad stage de un un objeto que esté en el DisplayList

elemento.stage.addEventListener()

Stage ya no es top level. Y una clase que extiende a Sprite no necesariamente está en el displaylist

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:24 pm
Gracias Jorge, pero ese no es el problema, si trato de detectar en el mismo objeto, sea el stage o sea un Sprite cualquiera que está en la displaylist, me funcionan todos los eventos, salvo el doble click.

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:39 pm
Falta el argumento de la función, algo así:

Código ActionScript :

addEventListener( MouseEvent.DOUBLE_CLICK, function(evt:MouseEvent):void{trace('doble clic')});


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:49 pm
Hay algo que nos deberíamos preguntar
¿la propiedad "doubleClickEnabled" de qué Clase es? ¿qué clases heredan de ésta?
Una vez sabido esto sabremos a qué objetos podremos y a cuales no podremos hacer el "doble click".

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:49 pm
:lol: Gracias Jorge pero ese tampoco es el problema.
el evento click anda sin el argumento de tipo MouseEvent y el doble click no anda, con o sin argumento.

o sea, al mismo código, si le cambio sólo MouseEvent.DOUBLE_CLICK por MouseEvent.CLICK, anda, pero con click simple, claro está.

Es muy raro!

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:52 pm

Eliseo2 escribió:

Hay algo que nos deberíamos preguntar
¿la propiedad "doubleClickEnabled" de qué Clase es? ¿qué clases heredan de ésta?
Una vez sabido esto sabremos a qué objetos podremos y a cuales no podremos hacer el "doble click".


En mi caso se trata de un Sprite que está incluído en la dislay list.
De todos modos, el objeto tiene la propiedad doubleClickEnabled y está seteada en true, me fijé esto en Debug y es así.
Supongo que la hereda de InteractiveObject.

Si no la tuviera me tiraría un error de compilación supongo, pero no es así.
Simplemente el evento double_click no se dispara, todos los demás eventos si.

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 03:54 pm
Siempre es bueno empezar en el pizarrón. El principio funciona (copia y pega en una nueva peli de Flash):

Código ActionScript :

var clickTest = new Sprite()
clickTest.graphics.lineStyle(1, 0x000000)
clickTest.graphics.beginFill(0x000000)
clickTest.graphics.drawRect(0,0,100, 100)
clickTest.graphics.endFill()
clickTest.doubleClickEnabled = true;
addChild(clickTest)
clickTest.addEventListener( MouseEvent.DOUBLE_CLICK, function(evt:MouseEvent):void{trace('doble clic')});


Luego ya tienes que mirar alrededor, quizás alguien intercepte el evento, etc

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Oct 2008 04:27 pm
Maldición! tu ejemplo sí me funciona! y no solo en una peli de flash, en el stage de mi aplicación tambien!!! GRrr.
Gracias! voy a ver cómo extrapolo tu ejemplo a mi código...

Lo raro, es que el click, el mouse over, y demás andan perfectos.

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 04:29 pm
O sea, si hubiera algun objeto por encima que interceptara el evento o algo así, tampoco andaría el click ni el mouse over, etc...
Hay alguna manera de poner un breakpoint que se dispare ante el evento double click, sin importar qué objeto lo dispara?
Por ahí el evento sí se está disparando pero lo toma otro objeto...

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 05:16 pm
Los eventos de Mouse "flotan" (bubbles = true), y tiene la propiedad cancelable en false, es decir todos podrían consumirlos y no es cancelable. El tema sería que no se genere, pero dices que el resto de los eventos funcionan, extraña situación. Intenta usando una función que no sea anónima

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Oct 2008 05:19 pm
Bueno, haciendo pruebas me doy cuenta que:
Si creo un Sprite dinamicamente, y hago como en el ejemplo de Jorge, el doble click anda perfecto.

En donde no me funciona ( sólo el doble click, los demás eventos sí funcionan ) es en la siguiente situación:

Yo instancio una clase que hereda de MovieClip, y está asociada a un símbolo de la siguiente manera:

Código :

   [ Embed( source = "assets.swf", symbol = "simbolo" ) ]
   public class Simbolo extends MovieClip
   { ...


Este símbolo tiene cosas adentro, y recibe bien los eventos de click, etc.
Tiene doubleClickEnabled = true. Pero el evento de doble click ni siquiera se dispara, puse un breakpoint en la función 'handler' del evento, y no se ejecuta.
Traté de linkear el evento ( addEventListener ) en el constructor, fuera del constructor e incluso en el scope desde donde se crea el objeto, y sigue sin andar.

Evidentemente hay algo que esta clase o el símbolo al cual está asociado, que impiden recibir el doble click, porque cualquier otro Sprite creado a mano funciona perfecto.

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 05:21 pm

solisarg escribió:

...Intenta usando una función que no sea anónima...


ya intenté :(

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Oct 2008 05:50 pm
en donde estas colocando el dobleclickenabled = true?

Detro del codigo de la subclase de MovieClip? en el constructor de la misma? desde afuera de la clase, luego de la instanciacion??

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 01 Oct 2008 07:21 pm
Justo antes de la llamada a addEventListener, en cada uno de los scopes en los que intenté. ( contructor, metodo y desde donde se instanció el objeto )

Por Petruza

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Dic 2008 07:32 pm

Código :

addChild(NombreMC);
NombreMC.doubleClickEnabled = true;
NombreMC.addEventListener(MouseEvent.DOUBLE_CLICK, NombreFuncion);

Lo llamas antes de aderir al listener el evento que quieres....!!!

Por Fidelacho

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 10 Dic 2008 02:00 am
Bueno aquí funciona bien ...

Código :

package view 
{
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.events.Event;
   import flash.events.MouseEvent;


   public class Template3 extends Sprite
   {
      
      public function Template3() 
      {
         init();
         events();
      }
      
      private function init():void
      {
         var nmc:MC = new MC();//es un movieclip en al librería
         nmc.x = 10;
         nmc.y = 10;
         nmc.name = "mc";
         this.addChild(nmc);
      }
      
      private function events():void
      {
         MovieClip(this.getChildByName("mc")).doubleClickEnabled = true;
         MovieClip(this.getChildByName("mc")).addEventListener(MouseEvent.CLICK,mclick);
         MovieClip(this.getChildByName("mc")).addEventListener(MouseEvent.MOUSE_UP,mup);
         MovieClip(this.getChildByName("mc")).addEventListener(MouseEvent.MOUSE_DOWN,mdown);
         MovieClip(this.getChildByName("mc")).addEventListener(MouseEvent.DOUBLE_CLICK,mdclick);
      }
      
      private function mdclick(e:MouseEvent):void 
      {
         trace("doubleclick");
      }
      
      private function mdown(e:MouseEvent):void 
      {
         trace("down");
      }
      
      private function mup(e:Event):void 
      {
         trace("up");
      }
      
      private function mclick(e:MouseEvent):void
      {
         trace("click");
      }
      
   }
   
}

Si deseas te envio el proyecto, lo trabaje con el flashdevelop (Lo Máximo..)
Salu2

Por emedinaa

196 de clabLevel

2 tutoriales

Genero:Masculino  

Lima Perú

firefox

 

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