如何将SWF用作Flex 4预加载器?

时间:2017-03-14 04:52:48

标签: flex flex4 flex4.6

我确信以前曾经问过这个问题,但我找不到它。我想在Flex预加载器中显示SWF动画片段。

我已经扩展了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;
        }

    }
}

1 个答案:

答案 0 :(得分:0)

首先,不要在initialize()方法中调用createChildren()。 createChildren()将由Flex框架自动调用,无需调用它两次,也不是它应该如何工作。在您的情况下,只需完全删除重写的初始化方法。

你的主要问题是你只是嵌入了瑞士法郎,但它尚未登台。嵌入只会将您的资产编译到您的swf,但不会显示它。您需要在createChildren()中自己添加它。你需要将你的swf包装成某种UIComponent,这样你就可以将它添加到舞台上了。图像可能是最简单的解决方案(未经测试,只是为了给你一个想法):

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

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