Adobe Flex Spark Group 图形在 addEventListener 上消失



创建一个简单的 Flex 4.6 应用程序时,其中 creationComplete-handler 如下所示:

protected function creationCompleteHandler(event:FlexEvent):void {
    var groupVisible : Group = new Group();
    groupVisible.graphics.beginFill(0xff0000);
    groupVisible.graphics.drawCircle(100, 100, 50);
    groupVisible.graphics.endFill();
    addElement(groupVisible);
    var groupInvisible : Group = new Group();
    groupInvisible.graphics.beginFill(0x0000ff);
    groupInvisible.graphics.drawCircle(200, 100, 50);
    groupInvisible.graphics.endFill();
    addElement(groupInvisible);
    groupInvisible.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {trace("click");});
}

绘制第一个组 Visible.图形内容(100,100 处的红色圆圈)。第二组Invisible.图形内容(蓝色圆圈在200,100)没有绘制

这绝对取决于添加的事件侦听器。

有什么想法吗?

如果切换到 SpriteVisualElement 而不是 Group,则会同时显示这两个项目。 从好的方面来说,鼠标点击事件实际上是从Sprite/SpriteVisualElement调度的,而不是从容器调度的。 由于 Click 事件冒泡,因此可以从组内的元素调度它,并在组级别侦听。 但是,图形不会调度单击事件。

无论如何,这里有一些代码:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import spark.core.SpriteVisualElement;

            protected function onMouseClick(event:MouseEvent):void{
                trace('click');
            }
            override protected function createChildren():void{
                super.createChildren();
                var groupVisible :SpriteVisualElement = new SpriteVisualElement();
//              var groupVisible : Group = new Group();
                groupVisible.graphics.beginFill(0xff0000);
                groupVisible.graphics.drawCircle(100, 100, 50);
                groupVisible.graphics.endFill();
                groupVisible.addEventListener(MouseEvent.CLICK, onMouseClick);
                addElement(groupVisible);
//              var groupInvisible : Group = new Group();
                var groupInvisible : SpriteVisualElement = new SpriteVisualElement();
                groupInvisible.graphics.beginFill(0x0000ff);
                groupInvisible.graphics.drawCircle(200, 100, 50);
                groupInvisible.graphics.endFill();
//              groupInvisible.addEventListener(MouseEvent.CLICK, onMouseClick);
                groupInvisible.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void {trace("click");});
                addElement(groupInvisible);
            }
        ]]>
    </fx:Script>
</s:WindowedApplication>

相关内容

  • 没有找到相关文章

最新更新