2012-06-13 2 views
0

При создании простого Flex 4.6 приложения, где creationComplete-обработчик выглядит следующим образом:глинобитная графика прогибаются искры группы исчезает addEventListener

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) втягиваются. Вторая группаInvisible.graphics content (синий круг в 200, 100) НЕ нарисован.

Это зависит от этого добавленного EventListener.

Любые идеи?

+0

я забыл сказать, что любой другой дополнительный элемент (как ярлык) визуализируется, хотя в groupInvisible. –

+1

Это очень странно и, возможно, ошибка. Тем не менее, вся точка класса Group не должна содержать графику и быть небольшим контейнером макета. Этот код определенно идет вразрез с этой идеей. Почему бы вам просто не использовать [Ellipse] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/primitives/Ellipse.html), чтобы нарисовать свою графику? – RIAstar

+0

Вы считали создание детей в createChildren() вместо обработчика creationComplete? Я определенно рекомендую ознакомиться с жизненным циклом компонентов Flex. Тем не менее, ни одна из ваших групп не имеет размера (AKA Width и Height не установлены); мог ли синий круг быть заштрихован? Кроме того, что представляет собой родительский контейнер этих двух групп? Что такое макет? – JeffryHouser

ответ

3

Если вы переключитесь на SpriteVisualElement вместо группы, отобразятся оба элемента. С положительной стороны событие щелчка мыши будет фактически отправлено из Sprite/SpriteVisualElement, тогда как они не будут отправляться из контейнера. Начиная с пузырьков событий Click, их можно отправить из элементов внутри группы и прослушать на групповом уровне. Но графика не будет отправлять событие 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> 
+3

Хороший ответ. Я как раз собирался представить подобный. Просто подумал, что я бы сказал, что эта «проблема» происходит по дизайну. Когда в «Группе» есть мышиные слушатели, он добавляет «фон» в группу, чтобы события мыши могли регистрироваться на «прозрачных» участках conatiner. Это скрывает или стирает то, что вы рисуете. –

+0

@SunilD. Хороший комментарий;) Не знал об этом. – RIAstar

+0

@SunilD. То, что вы говорите, имеет смысл, но я запускаю исходный код (используя группы), событие клика не отправляется. Итак, что-то происходит, я не понимаю. – JeffryHouser