0

创建一个简单的 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");});
}

绘制了第一个 groupVisible.graphics 内容(100,100 处的红色圆圈)。 第二个 groupInvisible.graphics 内容(200、100 处的蓝色圆圈)未绘制

它肯定取决于添加的 EventListener。

有任何想法吗?

4

1 回答 1

3

如果您切换到 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>
于 2012-06-13T16:11:49.410 回答