2012-04-29 9 views
6

Ho appena aggiornato il flash player 11.2 che consente di ascoltare MouseEvent.RIGHT_MOUSE_UP e MouseEvent.RIGHT_MOUSE_DOWN.Il clic destro del flash si comporta in modo diverso rispetto al clic sinistro

Ho un problema in cui questi eventi non funzionano come le controparti MOUSE_UP/MOUSE_DOWN. In particolare, l'evento MOUSE_UP viene avviato indipendentemente dal punto in cui si trova il mouse. Ciò consente di trascinare all'esterno della finestra del flash e di avere ancora un ciclo di eventi down -> up completo ogni volta che un utente fa clic sul flash player.

Tuttavia, questo non sembra essere il caso di RIGHT_MOUSE_UP/DOWN. Quando faccio clic con il pulsante destro del mouse all'interno del player e rilascio al di fuori del player, non ricevo un evento RIGHT_MOUSE_UP che significa che è possibile ricevere più eventi RIGHT_MOUSE_DOWN senza ricevere un evento UP.

Esiste una soluzione nota a questo oppure esiste un'opzione che devo impostare?

Edit:

Ecco un esempio di codice:

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

Sei sicuro di aver collegato il listener di 'RIGHT_MOUSE_UP' allo' Stage' in quanto è molto importante. – xLite

+0

Puoi postare uno snippet per favore? – Chris

+0

Aggiunta una modifica che mostra come funziona il mio codice. Gli ascoltatori dell'evento sono infatti aggiunti al palco. – Godfather

risposta

2

si poteva ascoltare per quando il mouse esce di scena, che potrebbe agire come un proxy per un evento RIGHT_CLICK_UP.

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"); 
     } 
    } 
} 

tuttavia, se si sta cercando di evitare che consente all'utente di visualizzare più i menu contestuale del tasto destro (o qualcosa di simile), si potrebbe implementare un semplice controllo nel codice per nascondere prima un visibile tasto destro del mouse contesto menu prima di visualizzare quello nuovo.

+0

Sì, questa è la soluzione che ho trovato pure. Non è perfetto in quanto non puoi "trascinare" fuori dal flash player, ma dovrai farlo finché Adobe non risolve il problema. Aggiungerei tuttavia che è necessaria più logica per garantire che venga attivato solo un evento RIGHT_MOUSE_UP dopo ogni evento RIGHT_MOUSE_DOWN poiché l'utente può reinserire il lettore senza rilasciare il pulsante del mouse all'esterno e rilasciare il pulsante destro all'interno del lettore, attivando entrambi i proxy (quando si esce) e un evento RIGHT_MOUSE_UP effettivo. – Godfather