gpt4 book ai didi

actionscript-3 - 自定义ContextMenu未显示,因为显示对象位于“顶部”

转载 作者:行者123 更新时间:2023-12-03 22:41:41 26 4
gpt4 key购买 nike

作为这里另一个问题的跟进:
我已经在Flash应用程序中构建了一个自定义contextmenu项,但有时却没有显示出问题。
我发现问题出在另一个带有自定义contextmenu的项目“顶部”。

但是,即使将“顶部”项的“ mouseEnabled”和“ mouseChildren”属性设置为false,我仍然无法获得自定义contextmenu来显示...
有任何想法吗?谢谢!

ps:这是一些代码来查看问题:

var spr:Sprite=new Sprite();
spr.graphics.beginFill(0xff0000,1);
spr.graphics.drawRect(0,0,100,100);
addChild(spr);

var blocker:Sprite=new Sprite();
blocker.x=50
blocker.y=50
blocker.graphics.beginFill(0x00ff00,1);
blocker.graphics.drawRect(0,0,100,100);
addChild(blocker);
blocker.mouseEnabled=false
blocker.mouseChildren=false

var customContextMenu:ContextMenu = new ContextMenu();
var item:ContextMenuItem = new ContextMenuItem("custom item");
customContextMenu.customItems.push(item);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler,false,0,true);
spr.contextMenu = customContextMenu;

function menuItemSelectHandler(cem:ContextMenuEvent) {
trace("hello context");
};


当鼠标悬停在绿色矩形上方时,不会显示自定义上下文菜单

最佳答案

据我所知,仅当用户直接在该对象本身上单击鼠标右键时,才会显示该对象的上下文菜单。

我用以下代码简化了您的问题:

public class Test extends Sprite
{
public function Test()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

var sprite:Sprite = new Sprite();
addChild(sprite);

sprite.graphics.beginFill(0xFF0000);
sprite.graphics.drawRect(0, 0, 200, 200);
sprite.graphics.endFill();

var shape:Shape = new Shape();
addChild(shape);

shape.graphics.beginFill(0x0000FF, .6);
shape.graphics.drawRect(100, 100, 200, 200);
shape.graphics.endFill();

setUpContextMenu(sprite);
}

private function setUpContextMenu(target:InteractiveObject):void
{
var menu:ContextMenu = new ContextMenu();
target.contextMenu = menu;

var item:ContextMenuItem = new ContextMenuItem("About Us");
menu.customItems.push(item);
}
}


右键单击红色和蓝色正方形重叠的区域时,没有自定义上下文菜单。

这是一个可能的解决方案,其中我仅修改了 setUpContextMenu()函数:

    private function setUpContextMenu(target:InteractiveObject):void
{
var menu:ContextMenu = new ContextMenu();
this.contextMenu = menu;

var item:ContextMenuItem = new ContextMenuItem("About Us");

var handler:Function = function (event:ContextMenuEvent):void {
// Start with empty menu.
var items:Array = [];

if (event.mouseTarget == target) {
// Directly right-clicked on target. Add custom item.
items = [item];

} else if (event.mouseTarget is DisplayObjectContainer) {
var o:DisplayObjectContainer
= DisplayObjectContainer(event.mouseTarget);
var pt:Point = o.localToGlobal(new Point(o.mouseX, o.mouseY));
var arr:Array = o.getObjectsUnderPoint(pt);

// One of the mouse target's descendants is our target,
// directly under the pointer. Add custom item.
if (arr.indexOf(target) != -1)
items = [item];
}

menu.customItems = items;
};

menu.addEventListener(ContextMenuEvent.MENU_SELECT, handler);
}


在这里,我将上下文菜单分配给应用程序本身。在 "menuSelect"事件上,我根据鼠标指针是否在红场上方某处进行自定义。

关于actionscript-3 - 自定义ContextMenu未显示,因为显示对象位于“顶部”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com