创建一个简单的 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>