Flex 4图像对象作为MovieClip对象返回

时间:2012-04-25 13:23:50

标签: actionscript-3 flex4

我正在使用Flex4中的自定义上下文菜单。上下文菜单本身工作正常,但我正在寻找一种方法来判断ContextMenuEvent mouseTarget是否是一个图像。就目前而言,mouseTarget显示它是一个" [object MovieClip]"。这很奇怪,因为我的应用程序中没有影片剪辑,只有图像容器。知道发生了什么事吗?

private function openContextMenu(e:ContextMenuEvent):void {
    Alert.show(e.mouseTarget.toString());// shows [object MovieClip] when it should show [Object Image]
}

由于

3 个答案:

答案 0 :(得分:0)

所以经过几个小时的研究后,我想出了下面附带的contextMenu的项目选择事件监听器。我相信必须有更好的方法来做到这一点,但在那之前......

for(var i:int = 0; i < getObjectsUnderPoint(new Point(this.mouseX, this.mouseY)).length; i++)
{
    if(getObjectsUnderPoint(new Point(this.mouseX, this.mouseY))[i].parent.parent is Image)
    {
        //do what I need to do
    }
}

感谢NHubben的输入。这让我走上了正确看待孩子的道路。

答案 1 :(得分:0)

组件名称Image与构成名称无关。 flex继承是:Image - SWFLoader - UIComponent - FlexSprite - [...](来自mx.controls.Image docs)。

因此,您需要做的是了解将其带入AS3环境时的实际情况。看起来它被包裹在MovieClip中以允许它在Flash的显示列表中。它看起来你必须通过装载机,但我不确定。

运行一两个测试以找出实际构成的对象:

// not foolproof, and will break on some stuff, 
// so you will have to fix this as needed:
private function loopDisplay(obj:Sprite):void
{
    trace(obj.name + ": " + obj);
    if (obj.numChildren > 0)
    {
        for (var i:int = 0; i < this.numChildren; i++)
        {
            loopDisplay(obj.getChildAt(i));
        }
    }
}

如果你把它放在鼠标按下处理程序中,那么你可以看到它实际上是什么。

但是,event.targetevent.currentTarget也应该包含菜单项对象,因此您也可以循环访问这些对象并查看其中的内容。

答案 2 :(得分:0)

您需要将Image上的mouseChildren设置为false,然后MouseEvent将引用Image:

if (event.target is Image) {
   //do stuff
}