我有一个加载一些XML的应用程序,并设置一种幻灯片,每张幻灯片可以包含多个资源,例如图像和SWF。当我直接从localhost
加载所有内容(通过Apache提供)时,SWF不会自动播放,但如果我使用Charles将速度限制为localhost,它会在SWF完成加载之前开始播放,并且在包含SWF可见。
我正在使用
创建我的加载器var loader:MovieClipSWFLoader = new MovieClipSWFLoader();
loader.smoothBitmapContent = true;
loader.autoLoad = true;
loader.scaleContent = false;
loader.trustContent = true;
loader.autoStop = true;
loader.maintainAspectRatio = true;
loader.showBusyCursor = false;
loader.x = data.@posX;
loader.y = data.@posY;
loader.width = data.@width;
loader.height = data.@height;
loader.source = (new URLRequest(data.@url)).url; // Using URLRequest because data contains relative URLs, and the loader doesn't like that (thinks it's a path maybe?)
其中data
是一个简短的XML片段,包含应用程序需要知道的内容。一个例子是<swf posX="10" posY="50" width="100" height="100" url="swfs/1.swf"/>
这个特定的SWF有一个在第9帧播放的声音,最终在SWF应该在舞台上可见之前在后台播放。无论SWF加载速度多快,它都可以在应用程序显示SWF时运行。
我还尝试将autoLoad
设置为false并手动调用load()
,但它仍然会发生。与调用gotoAndStop(1)
或gotoFirstFrameAndStop()
一样无效。
添加一些trace
- 调用触发的事件时,我会Event.OPEN
,ProgressEvent.PROGRESS
,Event.INIT
,然后在{{1}的其余部分之间在完成ProgressEvent.PROGRESS
和HTTPStatusEvent.HTTP_STATUS
之前播放的事件。
该应用程序使用Flex 4.6编译并使用Flash Player 11.7.700.169进行测试
答案 0 :(得分:1)
在加载的SWF中,在第一帧上设置一个停靠点。在onLoadComplete函数中,在加载的swf上调用init()函数。在该函数中,您将告诉加载的swf播放,或gotoAndPlay('label'或帧号)。
或者,在加载的SWF中,添加一个AddedToStage事件监听器并在该事件执行时调用init()函数:
if( stage )
{
init();
}
else
{
addEventListener( Event.ADDED_TO_STAGE, onAdded );
}
function onAdded( evt:Event ):void
{
removeEventListener( Event.ADDED_TO_STAGE, onAdded );
init();
}
function init():void
{
// start your loaded swf playing or doing something
}
答案 1 :(得分:0)
由于我并不总是控制SWF,因此Ribs的回答并不总是有效,但对于我自己创建的那些,我打算添加类似的代码,只是为了格外小心。
我设法通过向每个单独的事件监听器添加gotoFirstFrameAndStop()
来使其工作,当它工作时,逐个删除,直到我只有真正需要的那些。
对于其他遇到同样问题的人,我添加了
loader.addEventListener(Event.INIT, stopAutoplayingSWF);
loader.addEventListener(Event.COMPLETE, stopAutoplayingSWF);
private function stopAutoplayingSWF(e:Event):void
{
(e.currentTarget as MovieClipSWFLoader).gotoFirstFrameAndStop();
}
可能不需要Event.COMPLETE
上的最后一个,因为SWF在它被解雇之前开始播放,但它似乎没有受到伤害。