2009-09-03 81 views

回答

2

好问题。 这将使一个很好的功能请求,一个ContextMenuEvent.MENU_CLOSED事件:)

我想我有你一半的答案。这是我的想法:

var myContextMenu:ContextMenu = new ContextMenu(); 
var menuLabel:String = "Custom Item"; 
var rightClicking:Boolean; 

addCustomMenuItems(); 
myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler); 
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseUpHandler); 
    var redRectangle = makeRedRectangle(); 
    redRectangle.contextMenu = myContextMenu; 


function makeRedRectangle():Sprite{ 
    redRectangle = new Sprite(); 
    redRectangle.graphics.beginFill(0x990000,.2); 
    redRectangle.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); 
    redRectangle.mouseChildren = false; 
    addChild(redRectangle); 
    return redRectangle; 
} 

function addCustomMenuItems():void { 
    myContextMenu.hideBuiltInItems(); 
    var item:ContextMenuItem = new ContextMenuItem(menuLabel); 
    myContextMenu.customItems.push(item); 
    item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler); 
} 

function menuSelectHandler(event:ContextMenuEvent):void { 
    trace("menuSelectHandler: " + event); 
    rightClicking = true; 
} 

function menuItemSelectHandler(event:ContextMenuEvent):void { 
    trace("menuItemSelectHandler: " + event); 
} 

function mouseUpHandler(event:MouseEvent):void{ 
    if(rightClicking){ 
     trace('ContextMenu Closed\nThank You! Come Again!'); 
     rightClicking = false; 
    } 
} 

基本上我创建的一切上面的一个精灵,但已mouseChildren设置为false,所以剪辑怒吼咆哮,可以得到的点击次数。你可能想要让这个透明。我使用这个,所以当你点击它时,你会得到一个事件。当发生这种情况时,我将rightClicking设置为true,意思是,我知道按下了右键,我只是在等待其他事情发生。有两种选择:

  1. 用户从菜单中选择一个项目。
  2. 用户单击以使菜单消失。

对于选项1,如果用户选择了您的任何自定义项目,那很酷,如果没有,至少您知道会发生什么。 对于选项2,我设置了MOUSE_DOWN事件的侦听器,因此如果rightClicking已打开,并且鼠标向下,那么菜单关闭。

希望这会有所帮助!

我知道,它看起来像哈克老同学AS2,代码从文档的例子,改装,但它有一个想法:)