我确信以前曾经问过这个问题,但我找不到它。我想在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;
}
}
}
答案 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);
}