2012-06-13 4 views
0

의 creationComplete 핸들러는 다음과 같습니다 간단한 플렉스 4.6 응용 프로그램을 만드는 방법에 사라 :어도비 플렉스 스파크 그룹 그래픽 또는 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");}); 
} 

(100100에서 빨간색 원) 첫 번째 groupVisible.graphics 내용이 그려집니다. 두 번째 groupInvisible.graphics 콘텐츠 (파란색 원, 200, 100)는으로 그려지지 않습니다.

추가 된 EventListener에 따라 달라집니다.

아이디어가 있으십니까?

+0

나 다른 첨가 원소가 (a 라벨 등) groupInvisible에서 비록 렌더링되는 것은 말할 분실 한

어쨌든, 몇 가지 코드이다. –

+1

그것은 매우 이상하고 아마도 버그입니다. 그럼에도 불구하고 Group 클래스의 핵심은 그래픽을 포함하지 않으며 가벼운 레이아웃 컨테이너입니다. 이 코드는 분명히 그 아이디어에 어긋납니다. [Ellipse] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/spark/primitives/Ellipse.html)를 사용하여 그래픽을 그려 보는 것은 어떻습니까? – RIAstar

+0

creationComplete 처리기 대신 createChildren()에 하위 항목을 만드는 것을 고려 했습니까? Flex 구성 요소 라이프 사이클에 대해 읽어 보는 것이 좋습니다. 즉, 어느 그룹도 크기가 지정되지 않았습니다 (AKA 너비 및 높이가 설정되지 않음). 파란색 동그라미를 화면 밖으로 그릴 수 있습니까? 또한 두 그룹의 상위 컨테이너는 무엇입니까? 레이아웃이란 무엇입니까? – 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

좋은 답변입니다. 나는 비슷한 것을 제출하려하고 있었다. 이 "문제"가 디자인에 의해 발생한다고 언급하고 싶습니다. 'Group'이 마우스 청취자를 가지고있을 때, 그것은 마우스 이벤트가 conatiner의 "transparent"영역에 등록 될 수 있도록 그룹에 "배경"을 추가합니다. 그것은 당신이 그린 그림을 은폐하거나 지우고 있습니다. –

+0

@SunilD. 좋은 코멘트;) 그것에 대해 몰랐다. – RIAstar

+0

@SunilD. 당신이 말하는 것은 의미가 있지만, 원래 제공되는 코드 (그룹을 사용하여)를 실행하면 click 이벤트가 전달되지 않습니다. 그래서, 내가 이해하지 못하는 일이 있습니다. – JeffryHouser