2013-08-02 26 views
3

我試圖解決一個問題,當我通過右鍵單擊並使用AS3和Flash打開ContextMenu時,需要獲取點擊的位置。(操作腳本3)在上下文菜單打開時獲取點擊位置

我使用MouseEvent.Context_Menu嘗試:

mapSprite.addEventListener(MouseEvent.CONTEXT_MENU, OnContextMenuOpening); 

這並點擊,但在上下文菜單中不再開火右邊+。

我也使用MosueEvent.Right_Click嘗試:

mapSprite.addEventListener(MouseEvent.RIGHT_CLICK, OnContextMenuOpening); 

這對右+單擊火災,但阻止上下文菜單打開。

任何人有任何洞察問題?

回答

1

Atriace的答案基本上是正確的,但它並沒有完全解決企業的實際問題,直接足以讓我立即意識到這一點。這裏是他的解決辦法一點點擴展:

private function setupSample():void 
{ 
    // NOTE: Sample assumes that I have a TextField named _myTextField defined elsewhere. 
    _myTextField.contextMenu = new ContextMenu(); 
    _myTextField.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, hContextMenuSelect); 
} 

private function hContextMenuSelect(pEvent:ContextMenuEvent):void 
{ 
     var x:Number = pEvent.mouseTarget.mouseX; 
     var y:Number = pEvent.mouseTarget.mouseY; 
} 

使用這種方法,實際上將顯示上下文菜單,但你也將獲得訪問鼠標點擊的座標。只需將ContextMenuEvent.MENU_SELECT監聽器直接添加到上下文菜單並從監聽器參數中提取該點即可。請注意,鼠標位置可通過ContextMenuEvent獲得。

2

不是我認爲的理想,但這會讓你完全理解。創建一個新的菜單對象(具有所有內置菜單選項),並向其添加一個事件偵聽器。

var my_menu:ContextMenu = new ContextMenu(); 
contextMenu = my_menu; 
my_menu.addEventListener(ContextMenuEvent.MENU_SELECT, rightClicker) 

function rightClicker(e:ContextMenuEvent):void { 
    trace(e); 
} 
0

以下代碼正在工作。我創建了一個300x300形狀併爲其分配了上下文菜單。鼠標位置將顯示在左上角的文本框中。

package { 
import flash.ui.ContextMenuItem; 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.text.TextFormat; 
import flash.display.Sprite; 
import flash.text.TextField; 
import flash.ui.ContextMenu; 
import flash.display.Shape; 

/** 
* ... 
* @author GR 
*/ 
public class Main extends Sprite { 
    private var cm_item1:ContextMenuItem = new ContextMenuItem("Menu Item 1"); 
    private var cm_item2:ContextMenuItem = new ContextMenuItem("Menu Item 2"); 
    private var cm_item3:ContextMenuItem = new ContextMenuItem("Menu Item 3"); 
    private var cm_item4:ContextMenuItem = new ContextMenuItem("Menu Item 4"); 
    private var txtFormat:TextFormat = new TextFormat("Arial", 20, 0x000000); 
    private var c_menu:ContextMenu = new ContextMenu(); 
    private var map_mc:MovieClip = new MovieClip(); 
    private var txt:TextField = new TextField(); 
    private var bg:Shape = new Shape(); 

    public function Main():void { 
     bg.graphics.beginFill(0x00ffff); 
     bg.graphics.drawRect(0, 0, 300, 300); 
     bg.graphics.endFill(); 
     map_mc.addChild(bg); 
     map_mc.x = map_mc.y = 100; 
     addChild(map_mc); 

     txt.background = 0xffffff; 
     txt.border = true; 
     txt.defaultTextFormat = txtFormat; 
     txt.width = 200; 
     addChild(txt); 

     c_menu.hideBuiltInItems(); 
     c_menu.customItems.push(cm_item1, cm_item2, cm_item3, cm_item4); 
     map_mc.contextMenu = c_menu; 

     map_mc.addEventListener(MouseEvent.CONTEXT_MENU, cmFx); 
    } 

    private function cmFx(e:MouseEvent):void { 
     txt.text = "x: " + mouseX + " y: " + mouseY; 
    } 

} 

}

相關問題