2011-01-10 5 views
0

작동하지 않습니다, 그러나 그것은 작동하지 않습니다 :플렉스 4 사용자 정의 프리 로더 (애니메이션 SWF가 표시되지 않음) 내가 애니메이션 SWF를로드 스프라이트를 확장하는 사용자 정의 프리 로더를 만들려면이 도움말 페이지를 다음입니다

http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf 69084-7e3c을 .html # WS2db454920e96a9e51e63e3d11c0bf62d75-7feb

주 앱에로드하여 표시하고 실행하기 때문에 Animation.swf 파일이 괜찮음을 알고 있습니다.

프리 로더는 애니메이션 SWF 대신 프리 로더가 이미지를로드하는 경우 작동합니다.

--------------------- test.mxml (기본 앱) -----------------

나는 일반적으로 프리 로더가 표시되도록 강제하는 많은 ComboBox 라인이 있지만 여기에는 수의 라인을 제한합니다.

--------- customPreloaders.SparkAnimationProgressBar.as -------- --------

패키지 customPreloaders { import flash.display. ; import flash.events.; import flash.net. ; import flash.utils.;

import mx.events.*; 
import mx.preloaders.*; 

public class SparkAnimationProgressBar extends Sprite 
    implements IPreloaderDisplay{ 

    // Loader instance to load the animation SWF file. 
    private var animationLdr:flash.display.Loader; 
    public function SparkAnimationProgressBar() { 
    super(); 
    } 

    // Add event listeners. 
    public function set preloader(preloader:Sprite):void { 
    preloader.addEventListener(
     ProgressEvent.PROGRESS, handleProgress); 
    preloader.addEventListener(
     Event.COMPLETE, handleComplete); 
    preloader.addEventListener(
     FlexEvent.INIT_PROGRESS, handleInitProgress); 
    preloader.addEventListener(
     FlexEvent.INIT_COMPLETE, handleInitComplete); 
    } 

    // Initialize the Loader control in the override 
    // of IPreloaderDisplay.initialize(). 
    public function initialize():void { 
    animationLdr = new flash.display.Loader(); 
    animationLdr.contentLoaderInfo.addEventListener(
     Event.COMPLETE, loader_completeHandler); 
    animationLdr.load(new URLRequest("assets/Animation.swf")); 
    } 

    // After the SWF file loads, set the size of the Loader control. 
    private function loader_completeHandler(event:Event):void 
    { 
    addChild(animationLdr); 
    animationLdr.width = 200; 
    animationLdr.height= 200; 
    animationLdr.x = 100; 
    animationLdr.y = 100; 
    } 

    // Define empty event listeners. 
    private function handleProgress(event:ProgressEvent):void {}  
    private function handleComplete(event:Event):void {}  
    private function handleInitProgress(event:Event):void {} 

    private function handleInitComplete(event:Event):void { 
    var timer:Timer = new Timer(2000,1); 
    timer.addEventListener(TimerEvent.TIMER, dispatchComplete); 
    timer.start(); 
    } 

    private function dispatchComplete(event:TimerEvent):void { 
    dispatchEvent(new Event(Event.COMPLETE)); 
    } 
    // IPreloaderDisplay interface methods. 
    public function get backgroundColor():uint { 
    return 0; 
    } 
    public function set backgroundColor(value:uint):void {} 
    public function get backgroundAlpha():Number { 
    return 0; 
    } 
    public function set backgroundAlpha(value:Number):void {} 
    public function get backgroundImage():Object { 
    return undefined; 
    } 
    public function set backgroundImage(value:Object):void {} 
    public function get backgroundSize():String { 
    return ""; 
    } 
    public function set backgroundSize(value:String):void {} 
    public function get stageWidth():Number { 
    return 200; 
    } 
    public function set stageWidth(value:Number):void {} 
    public function get stageHeight():Number { 
    return 200; 
    } 
    public function set stageHeight(value:Number):void {} 

} }

+0

로더에서 Event.COMPLETE 대신 Event.INIT를 수신 대기 중입니다 (애니메이션에 actionscript가있는 경우). 프리 로더 런타임에 애니메이션을로드하지 않고 Embed 태그에 애니메이션을 포함시키고 라이브러리의 애니메이션 심볼을 지정합니다. 주된 swf가 스스로로드하는 것에 집중하도록하십시오. –

답변

0

나는 사용자 정의 프리 로더에 하드 제한이 기억한다. 그것은 (assets/Animation.swf) 정확히 100 슬라이드의 플래시 애니메이션이어야합니다. 그럴 수 있습니다.

관련 문제