2017-03-14 18 views
0

이전에이 질문을 받았지만 찾을 수 없다고 확신합니다. Flex 프리 로더에 SWF 무비 클립을 보여주고 싶습니다.SWF를 Flex 4 프리 로더로 사용하는 방법은 무엇입니까?

SparkDownloadProgressBar를 확장했으며 흰색 화면이 표시되고 결국 앱이로드됩니다.

package 
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.events.ProgressEvent; 

    import mx.preloaders.SparkDownloadProgressBar; 

    public class MyPreloader extends SparkDownloadProgressBar 
    { 
     public function MyPreloader() 
     { 
      //backgroundImage = PreloaderGfx; 
      //backgroundImage = "butterfly.swf"; 
      //backgroundColor = 0xFF0000; 
      //visible = true; 
     } 

     //[Embed(source="/runninghorses.swf", symbol="PreloaderGfx")] 
     [Embed(source="/butterfly.swf")] 
     private var PreloaderGfx:Class; 


     override public function initialize():void { 
      super.initialize(); 
      createChildren(); 
     } 

     override protected function createChildren():void { 
      //throw new Error(); 
      super.createChildren(); 
      var displayObject:DisplayObject = getChildAt(0); 

      trace("d width:" + displayObject.width); 
      trace("d height:" + displayObject.height); 

      if (displayObject is PreloaderGfx) { 
       MovieClip(displayObject).play(); 
      } 

     } 

     override protected function showDisplayForDownloading(elapsedTime:int, event:ProgressEvent):Boolean { 
        trace("showDisplayForDownloading: elapsedTime = " + elapsedTime); 
        trace("showDisplayForDownloading:" + event.bytesLoaded + " " + event.bytesTotal + " " + (event.bytesLoaded < event.bytesTotal/2)); 
      return elapsedTime > 100 && 
       event.bytesLoaded < event.bytesTotal/2; 
     } 

    } 
} 

답변

0

첫째, 초기화() 메서드에 createChildren()를 호출하지 않습니다 여기에

는 내가 지금까지 가지고있는 것입니다. createChildren()은 Flex 프레임 워크에서 자동으로 호출되므로 두 번 호출 할 필요가 없으며 어쨌든 작동하도록되어 있지 않습니다. 귀하의 경우에는 재정의 된 initialize 메서드를 완전히 제거하십시오.

주요 문제는 swf 만 포함 시켰지만 아직 스테이지에 있지 않다는 것입니다. Embed는 자산을 swf에 컴파일 만 표시하지만 표시하지는 않습니다. createChildren()에서 직접 추가해야합니다. 그리고 swf를 일종의 UIComponent로 래핑하여 무대에 추가 할 수 있어야합니다. 이미지가 가장 쉬운 솔루션 일 수 있습니다 (테스트되지 않은 채 아이디어 만 제공).

override protected function createChildren():void 
{ 
    super.createChildren(); 

    var img:Image = new Image(); 
    img.source = PreloaderGfx; 
    addChild(img); 
}