2011-02-08 3 views
0

누군가가 왜 이것이 작동하지 않는지 설명해 주시겠습니까? 로고 뒤를 장식하는 약간의 장식입니다. dMove var에가 나는 X = 78 개 축으로 따라 임의의 지점에와 페이드 아웃 사각형의 적절한 라인을 얻을 주석,하지만 도입 할 때 아무것도 전혀 표시되지페이드 효과가 적용될 때 왜 내 이동 효과가 내 스프라이트에서 작동하지 않습니까?

... 또한

private var floatBG:UIComponent = new UIComponent(); 

private function addDP(event:TimerEvent):void{ 

      var dY:Number = 5+Math.ceil(Math.random()*60); 
      var dSize:Number = Math.ceil(Math.random()*12); 
      var dAlpha:Number = Math.random()*0.5 + 0.2 
      var dDuration:Number = Math.ceil(Math.random()*5000) + 1000; 

      var d:Sprite = new Sprite(); 
      d.graphics.beginFill(0x1C75BC,dAlpha); 
      d.graphics.drawRect(78, dY, dSize,dSize); 
      d.graphics.endFill(); 

      floatBG.addChild(d); 

      var dMove:Move = new Move(d); 
      dMove.xBy = 300; 
      dMove.duration = dDuration; 

      dMove.play(); 

      var dFade:Fade = new Fade(d); 
      dFade.alphaFrom = 1; 
      dFade.alphaTo = 0; 
      dFade.duration = dDuration; 

      dFade.play(); 

      this.addElement(floatBG); 

     } 

, 각 사이클의 끝에서 스프라이트를 파괴하는 가장 좋은/올바른 방법은 무엇입니까? 사전에

덕분에 많이, 대규모을 주셔서 감사합니다!

조쉬

+0

문제는 Move 클래스에 있다고 가정합니다. 너도 그걸 게시 할 수 있니? – longstaff

+0

@shortstick : 이동은 Flex 프레임 워크 클래스이며 사용자 정의 프레임 워크 클래스는 아닙니다. – Ryan

답변

2

은 정말 매우 올바른 방향으로 날 가리 키도록 관리 브라이언 비숍의 도움을, 감사합니다.

는 브라이언 오히려 spritedMove (이가 왜 dFade 효과는 여전히 스프라이트 때 일로서 나는 아직 확실하지 않다)에 영향을 할 수 단순히 UIComponent 구성으로 d를 입력, 제안한다. 그러나 floatBG 추가 (BG가되는 배경을 모든 차원의 UIComponent가 추가되는 UIComponent) 응용 프로그램을 작성하기 시작했다 때마다 불필요한, 그래서 내가 그 문제로 실행

creationComplete 기능의 this.addElement(floatBG) 일부가 는 D 인스턴스와 (D 원래 종류 내가 그들의 깃털을 만들려고 한 효과의 주제였다 그런데 "데이터 포인트"를 상징), 그리고 점진적으로 기어에 응용 프로그램을 둔화. 지속적으로 d 개의 요소를 추가하려면 화면의 모서리에있는 로고 모서리 부분에 내가 볼 수있는 정도로 아름답게 보이도록해야합니다 ...

결국 나는 아래의 해결책에 도달했습니다. UIComponents의 더미 (600)와 부하 floatBG는 다음 addDP 함수의 각 사이클 floatBG로 이동 d UIComponent를 추가 모두 포함하고 어린이의 전체 어레이의 오프 다른 UIComponent를 제거한다.

따라서, 결국은 같은 것을 보았다 : 그 꽤 장황한 인 경우

<?xml version="1.0" encoding="utf-8"?><s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="init(event)"> 

<fx:Script> 
    <![CDATA[ 

     import mx.core.DesignLayer; 
     import mx.core.UIComponent; 
     import mx.effects.effectClasses.MoveInstance; 
     import mx.events.EffectEvent; 
     import mx.events.FlexEvent; 
     import mx.states.RemoveChild; 

     import spark.effects.AnimateColor; 
     import spark.effects.AnimateFilter; 
     import spark.effects.Fade; 
     import spark.effects.Move; 
     import spark.effects.Rotate; 
     import spark.effects.easing.Sine; 

     private var floatBG:UIComponent = new UIComponent; 

     private var floatColour:uint = 0x1C75BC 

     protected function init(event:FlexEvent):void 
     { 

      //Float BackGround set up 
      floatBG.mask = floatMaskBlock; 
      floatBG.depth = -1; 

      this.addElement(floatBG); 


      //Fill FloatBG with 600 filler elements 
       for(var i:int=0; i<600; i++) 
       { 
        var filler:UIComponent = new UIComponent; 
        floatBG.addChild(filler); 
       } 
      //Float Animation Timer 

      var floatTimer:Timer = new Timer(1,0); 
      floatTimer.addEventListener(TimerEvent.TIMER,DPstartup) 
      floatTimer.start(); 

     private function DPstartup(event:TimerEvent):void 
     { 
      this.addDP(5,60) 
      this.addDP(22,14); 
      this.addDP(18,18); 
     } 

     private function addDP(yf:Number,yt:Number):void 
     { 
      this.title.text = floatBG.numChildren.toString(); 

      var dY:Number = yf+Math.ceil(Math.random()*yt); 
      var dXby:Number = Math.ceil(Math.random()*1000 + 50); 
      var dSize:Number = Math.ceil(Math.random()*12); 
      var dAlpha:Number = Math.random()*0.5 + 0.2 
      var dMotionDuration:Number = Math.ceil(Math.random()*15000) + 1000; 
      var dFadeDuration:Number = Math.random()*dMotionDuration; 

      var d:UIComponent = new UIComponent; 

      d.graphics.beginFill(floatColour,dAlpha); 
      d.graphics.drawRect(78, dY, dSize,dSize); 
      d.graphics.endFill(); 

      var dMove:Move = new Move(d); 
      dMove.xBy = dXby; 
      dMove.duration = dMotionDuration; 
      dMove.easer = Linear; 

      dMove.play(); 

      var dFade:Fade = new Fade(d); 
      dFade.alphaFrom = dAlpha; 
      dFade.alphaTo = 0; 
      dFade.duration = dFadeDuration; 

      dFade.play(); 

      floatBG.addChild(d); 
      floatBG.removeChildAt(0); 
     }; 
    ]]> 
</fx:Script> 

<fx:Declarations>  
    <s:Sine id="Sine"/> 
    <s:Bounce id="Bounce"/> 
    <s:Linear id="Linear"/>  
</fx:Declarations> 

<s:Group x="88" width="1000" height="80" id="floatMaskBlock"> 
    <s:Rect width="100%" height="100%"> 
     <s:fill> 
      <s:SolidColor color="0xffffff"/> 
     </s:fill> 
    </s:Rect> 
</s:Group></s:Group> 

좋아, 사과,하지만 누군가는 유용하게 사용할 수있는 ... 내가 그렇게 생각 (멋진 효과입니다 어쨌든)

I가 D 원소가 나타나는 시점에 날카로운 모서리를 제공하기 위해 마스크를 사용한다. 또한 하나의 또 다른 개체 뒤에 배치 할 수 있지만, 내 경우처럼, 객체가 D의 요소 중 일부의 크기보다 작은 폭의 라인 인 경우, 같은 마스크가 필요합니다. 나는 가능성이 클릭, 또는 유사한 무언가를 변경하는 기능을 추가 할 것 같은

색상은 시작 부분에 변수로 선언된다.

감사합니다!

Josh

+0

이 코드의 예제를 사용하여 메모리 누수를 찾는 방법을 찾고있었습니다. 자세한 내용은 여기에 게시 (메모리 문제에 대한 매우 효율적인 수정 포함) : http://stackoverflow.com/questions/4958795/flash-builder-4-profiler-how-to-spot-what-objects-are- cause-a-known-memory-inc – Ryan

1

나는 단지 내가 잘 작동하는 spirte, 대신 UIComponent를 사용하는 것이었다 만든 변경, 플렉스 넷이 달렸다. 어쩌면 순수한 AS3 프로젝트를 사용하고 있을까요? 그들이 플레이 한 후 파기에 대한 확신이 없습니다. 그것으로 장난을 조금 후 나는 해결책을 찾기 위해 관리 있도록 확인

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.core.UIComponent; 
      import mx.effects.Fade; 
      import mx.effects.Move; 

      private var floatBG:UIComponent = new UIComponent(); 

      private function addDP(event:TimerEvent):void{ 

       var dY:Number = 5+Math.ceil(Math.random()*60); 
       var dSize:Number = Math.ceil(Math.random()*12); 
       var dAlpha:Number = Math.random()*0.5 + 0.2 
       var dDuration:Number = Math.ceil(Math.random()*5000) + 1000; 

       var d:UIComponent = new UIComponent(); 
       d.graphics.beginFill(0x1C75BC,dAlpha); 
       d.graphics.drawRect(78, dY, dSize,dSize); 
       d.graphics.endFill(); 


       floatBG.addChild(d); 

       var dMove:Move = new Move(d); 
       dMove.xBy = 300; 
       dMove.duration = dDuration; 

       dMove.play(); 

       var dFade:Fade = new Fade(d); 
       dFade.alphaFrom = 1; 
       dFade.alphaTo = 0; 
       dFade.duration = dDuration; 

       dFade.play(); 

       this.addElement(floatBG); 

      } 

      private function onClick():void{ 
       var t:Timer = new Timer(100, 10); 
       t.start(); 
       t.addEventListener(TimerEvent.TIMER, addDP); 
      } 

     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 
    <s:Button click="onClick()" /> 
</s:Application> 
+0

놀라운, 고마워. alpha = 0 상태를 되찾은 후에 요소를 어떻게 제거해야합니까? – Joshua

+0

floatBG는 private var이므로 스테이지의 사본 만 복사됩니다 (자신을 제거함). '추적 (this.numElements.toString());' 내 예제에서 this.addElement 다음에 디버그하면 결과는 단지 2 (버튼과 floatBG)가됩니다. 매우 작은 설치 공간. 그것을 제거하는 방법에 대해 생각할 것입니다. 그건 그렇고 좋은 효과, 나는 그것으로부터, 감사합니다 배웠습니다. – Ryan

+0

나는 축적 문제에 대한 합리적인 해결책을 찾았다. (관심이 있다면 아래). 네, 저는 실제로 그 효과가 맘에 들어요. 흥미로운 의사 차원의 느낌을줍니다. – Joshua

관련 문제