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

Actionscript 3 Flex 4图像对象作为MovieClip对象返回,actionscript-3,flex4,Actionscript 3,Flex4,我正在使用Flex4中的自定义上下文菜单。上下文菜单本身工作正常,但我正在寻找一种方法来判断ContextMenuEvent mouseTarget是否是图像。目前,mouseTarget显示它是一个[对象MovieClip]。这很奇怪,因为我的应用程序中没有电影剪辑,只有图像容器。知道发生了什么吗 private function openContextMenu(e:ContextMenuEvent):void { Alert.show(e.mouseTarget.toString()

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

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

谢谢

经过几个小时的研究,我找到了附在contextMenu的项目select event listener上的以下内容。我相信一定有更好的方法来做到这一点,但在那之前

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的支持。这让我走上了看孩子的正确道路。

组件名称图像与组成它的内容无关。flex继承是:Image-SWFLoader-UIComponent-FlexSprite-[…]from

因此,您需要做的是了解当您将其引入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.target或event.currentTarget也应该包含菜单项对象,因此您也可以循环到这些对象中,查看其中的内容。

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

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

您的图像容器是MovieClips还是Loader对象?图像容器是项目。稍后,我将根据从fileRef的.load操作加载的数据将source属性添加到。您可能需要深入研究MovieClip,以查看它的子对象是否是图像等。Image类扩展了许多对象,至少可能是显示的位图。您可能想在Flex中探索BitmapImage类,可能会提供一个更直接的路径来实现您的目标。我已经找到了答案。但由于我的代表级别,无法发布答案。将在几个小时内或明天早上发布答案。感谢这不是一个通用的解决方案,如果您碰巧更改了容器或子容器,它将崩溃。这非常完美。误解了我在文档中快速阅读到的关于老鼠孩子的内容,我试过了,但没用就放弃了。因此,图像标签上的mouseChildren=false就是解决方案。可能从我的解决方案中节省了毫秒,以及一点内存和几行代码。谢谢