2012-04-29 12 views
6

Acabo de actualizar a flash player 11.2 que permite escuchar MouseEvent.RIGHT_MOUSE_UP y MouseEvent.RIGHT_MOUSE_DOWN.Flash clic derecho actuando de forma diferente que el clic izquierdo

Tengo un problema donde estos eventos no actúan igual que sus contrapartes MOUSE_UP/MOUSE_DOWN. Específicamente, el evento MOUSE_UP se inicia sin importar dónde esté el mouse. Esto permite arrastrar fuera de la ventana del flash y tener un bucle completo de eventos hacia abajo y arriba siempre que un usuario haga clic en el reproductor flash.

Sin embargo, este no parece ser el caso para RIGHT_MOUSE_UP/DOWN. Cuando hago clic derecho dentro del reproductor y lo dejo fuera del reproductor, no obtengo un evento RIGHT_MOUSE_UP, lo que significa que es posible recibir varios eventos de RIGHT_MOUSE_DOWN sin recibir un evento UP.

¿Existe una solución conocida a esto o hay una opción que deba establecer?

Editar:

Aquí está un ejemplo de código:

stage.addEventListener(MouseEvent.MOUSE_UP,   onMouseUp); 
stage.addEventListener(MouseEvent.MOUSE_DOWN,  onMouseDown); 
stage.addeventListener(MouseEvent.RIGHT_MOUSE_UP, onRightMouseUp); 
stage.addeventListener(MouseEvent.RIGHT_MOUSE_DOWN, onRightMouseDown); 

//... 
//all callback function follow a similar format as : 
private function onMouseUp(e : MouseEvent) : void 
{ 
    leftClick_ = false;//signaling that leftClick is not pressed 
} 
+1

¿Estás seguro de que has adjuntado el oyente 'RIGHT_MOUSE_UP' al' Stage' ya que es muy importante. – xLite

+0

¿Puedes publicar un fragmento por favor? – Chris

+0

Agregué una edición que muestra cómo funciona mi código. Los oyentes del evento de hecho se agregan al escenario. – Godfather

Respuesta

2

se podía escuchar para cuando el ratón sale de la etapa, que podría actuar como un proxy para un evento RIGHT_CLICK_UP. Sin embargo

package 
{ 
    //Imports 
    import flash.display.Sprite; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    //Class 
    [SWF(width="640", height="480", frameRate="60", backgroundColor="0x555555")] 
    public class RightClickTest extends Sprite 
    { 
     //Constructor 
     public function RightClickTest() 
     { 
      stage.scaleMode = StageScaleMode.NO_SCALE; 
      stage.align = StageAlign.TOP_LEFT; 

      addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     //Initialize 
     private function init(event:Event):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      stage.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, mouseRightClickEventHandler); 
      stage.addEventListener(MouseEvent.RIGHT_MOUSE_UP, mouseRightClickEventHandler); 
      stage.addEventListener(Event.MOUSE_LEAVE, mouseLeaveEventHandler); 
     } 

     //Mouse Right Click Event Handler 
     private function mouseRightClickEventHandler(event:MouseEvent):void 
     { 
      switch (event.type) 
      { 
       case MouseEvent.RIGHT_MOUSE_DOWN: trace("Right Mouse Down"); 
                break; 

       case MouseEvent.RIGHT_MOUSE_UP:  trace("Right Mouse Up"); 
      } 
     } 

     //Mouse Leave Event Handler 
     private function mouseLeaveEventHandler(event:Event):void 
     { 
      trace("Mouse Leave"); 
     } 
    } 
} 

, si usted está tratando de evitar que permite al usuario visualizar varios menús de contexto haga clic derecho (o algo similar), se puede aplicar una sencilla comprobación en el código para ocultar primero de manera visible contextual del botón derecho menú antes de mostrar el nuevo.

+0

Sí, esta es la solución que encontré también. No es perfecto, ya que no puedes "arrastrar" fuera del reproductor flash, sino que tendrás que hacerlo hasta que Adobe solucione el problema. Sin embargo, agregaría que se requiere más lógica para asegurar que solo se active 1 evento RIGHT_MOUSE_UP después de cada evento RIGHT_MOUSE_DOWN ya que el usuario puede volver a ingresar al reproductor sin soltar el botón del mouse y liberar el botón derecho dentro del reproductor, lo que activa el proxy (al salir) y un evento RIGHT_MOUSE_UP real. – Godfather

Cuestiones relacionadas