2012-04-29 13 views
6

मैंने अभी फ़्लैश प्लेयर 11.2 को अपडेट किया है जो MouseEvent.RIGHT_MOUSE_UP और MouseEvent.RIGHT_MOUSE_DOWN को सुनने की अनुमति देता है।फ्लैश दाएं क्लिक से अलग अभिनय पर क्लिक करें

मुझे कोई समस्या है जहां ये घटनाएं उनके MOUSE_UP/MOUSE_DOWN समकक्षों के समान कार्य नहीं करती हैं। विशेष रूप से, MOUSE_UP ईवेंट लॉन्च किया जाता है इससे कोई फर्क नहीं पड़ता कि माउस कहां है। यह फ्लैश विंडो के बाहर खींचने की अनुमति देता है और जब भी उपयोगकर्ता फ़्लैश प्लेयर में क्लिक करता है तब भी एक पूर्ण डाउन -> अप इवेंट लूप होता है।

हालांकि, यह RIGHT_MOUSE_UP/डाउन के मामले में प्रतीत नहीं होता है। जब मैं प्लेयर के अंदर दायाँ क्लिक करता हूं और प्लेयर के बाहर रिलीज़ करता हूं, तो मुझे RIGHT_MOUSE_UP ईवेंट नहीं मिलता है जिसका अर्थ है कि यूपी ईवेंट प्राप्त किए बिना एकाधिक RIGHT_MOUSE_DOWN ईवेंट प्राप्त करना संभव है।

क्या इस के लिए कोई ज्ञात कामकाज है या क्या मुझे कोई विकल्प सेट करना होगा?

संपादित करें:

यहाँ एक कोड उदाहरण है:

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' श्रोता को 'चरण' में संलग्न कर चुके हैं क्योंकि यह बहुत महत्वपूर्ण है। – xLite

+0

क्या आप एक स्निपेट पोस्ट कर सकते हैं? – Chris

+0

एक संपादन जोड़ा गया यह दर्शाता है कि मेरा कोड कैसे काम करता है। घटना श्रोताओं को वास्तव में मंच में जोड़ा जाता है। – Godfather

उत्तर

2

आप जब माउस मंच है, जो एक 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"); 
     } 
    } 
} 

हालांकि, अगर आप एक से अधिक राइट क्लिक करें संदर्भ मेनू (या कुछ इसी तरह) प्रदर्शित करने के लिए उपयोगकर्ता की अनुमति के बचने की कोशिश कर रहे हैं, आप एक सरल जांच अपने कोड में पहले एक दृश्य पर राइट क्लिक करें संदर्भ को छिपाने के लिए लागू कर सकता है नया प्रदर्शन करने से पहले मेनू।

+0

हां, यह वह समाधान है जो मैंने पाया। यह सही नहीं है क्योंकि आप फ़्लैश प्लेयर के बाहर "ड्रैग" नहीं करते हैं, लेकिन जब तक Adobe समस्या को हल नहीं करता तब तक करना होगा। हालांकि मैं यह सुनिश्चित करने के लिए और अधिक तर्क की आवश्यकता है कि प्रत्येक RIGHT_MOUSE_DOWN ईवेंट के बाद केवल 1 RIGHT_MOUSE_UP ईवेंट ट्रिगर किया गया है क्योंकि उपयोगकर्ता माउस बटन को छोड़कर प्लेयर को फिर से दर्ज कर सकता है और प्लेयर के अंदर दायां बटन छोड़ सकता है, दोनों प्रॉक्सी को ट्रिगर कर सकता है (छोड़ते समय) और एक वास्तविक RIGHT_MOUSE_UP ईवेंट। – Godfather

संबंधित मुद्दे