2012-04-29 24 views
6

Sadece MouseEvent.RIGHT_MOUSE_UP ve MouseEvent.RIGHT_MOUSE_DOWN öğelerini dinlemeyi sağlayan flash player 11.2 ile güncelledim.Sol sağdan farklı hareket etme sağ tıklama

Bu olayların MOUSE_UP/MOUSE_DOWN muadilleriyle aynı davranmadığı bir sorun yaşıyorum. Özellikle, fare nerede olursa olsun, MOUSE_UP olayı başlatılır. Bu, flaş pencerenin dışına sürüklenmeye izin verir ve bir kullanıcı flash player'a her tıkladığında hala tam bir aşağı - yukarı olay döngüsüne sahiptir. Bununla birlikte, RIGHT_MOUSE_UP/DOWN için durum böyle görünmemektedir. Oynatıcının içine sağ tıkladığım ve müzikçaların dışına çıktığımda, bir UP olayını almadan birden fazla RIGHT_MOUSE_DOWN olayı almanın mümkün olduğu anlamına gelen bir RIGHT_MOUSE_UP olayı almıyorum.

Bilinen bir geçici çözüm var mı yoksa ayarlamam gereken bir seçenek var mı?

Düzenleme: İşte

bir kod örnektir:

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

'RIGHT_MOUSE_UP' dinleyicisini' Sahne Alanı'na eklediğinizden çok emin misiniz? – xLite

+0

Snippet'i gönderir misiniz lütfen? – Chris

+0

Kodumun nasıl çalıştığını gösteren bir düzenleme eklendi. Olay dinleyicileri gerçekten sahneye eklenir. – Godfather

cevap

2

Fareyi bir RIGHT_CLICK_UP olayına vekil olarak görev alabilecek aşamaya, ayrılması durumunda bu dinleyebiliriz. Birden sağ tıklama bağlam menüleri (veya benzer bir şey) görüntülemek için kullanıcı izin önlemek çalışıyorsanız

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

Ancak, önce görünür bir sağ tıklama bağlam gizlemek için kodunuzda basit bir onay uygulamak olabilir yenisini görüntülemeden önce menü.

+0

Evet, bu da bulduğum çözüm. Flash oynatıcının dışında "sürükle" yapamadığınızdan, ancak Adobe sorunu çözene kadar yapmanız gerekmediğinden mükemmel değildir. Ancak, her RIGHT_MOUSE_DOWN olayından sonra sadece 1 RIGHT_MOUSE_UP olayının tetiklenmesini sağlamak için daha fazla mantık gerektiğini ekleyebilirim, çünkü kullanıcı dışarıdaki fare düğmesini serbest bırakmadan oyuncuya yeniden girebilir ve hem proxy'yi tetikleyerek hem de oynatıcının içinde sağ tuşa basabilir. (ayrılırken) ve gerçek bir RIGHT_MOUSE_UP olayı. – Godfather

İlgili konular