Actionscript 3 AS3停止外部swf
嗨,我正在将一个外部swf加载到MovieClip中,我希望它停止,直到我选择播放。目前它在加载后立即播放Actionscript 3 AS3停止外部swf,actionscript-3,flash,external,loader,Actionscript 3,Flash,External,Loader,嗨,我正在将一个外部swf加载到MovieClip中,我希望它停止,直到我选择播放。目前它在加载后立即播放 var mc:MovieClip; var swfLoader:Loader = new Loader(); swfLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, eventLoaded); var request:URLRequest; request = new URLRequest("external.swf"
var mc:MovieClip;
var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, eventLoaded);
var request:URLRequest;
request = new URLRequest("external.swf");
swfLoader.load (request);
function eventLoaded(e:Event): void
{
mc = e.target.content as MovieClip;
// does not stop the clip
mc.Stop ();
}
所以我尝试添加一个Event.ENTER_FRAME到movieclip并在那里停止,这将停止,但它将播放第一帧。有没有办法让它在加载时保持停止,直到我选择播放?我编写了这个简单的测试用例,它工作得很好。。。加载的swf非常简单,只是主时间轴上的一个二分之一
package {
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
public class Test extends Sprite
{
private var loader:Loader = new Loader;
public function Test()
{
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoaded );
loader.load( new URLRequest( 'testFile.swf' ) );
}
public function handleLoaded( event:Event ):void
{
addChild( loader.content );
var mc:MovieClip = loader.content as MovieClip ;
mc.stop();
}
}
}
事实上,这与Jochen Hilgers的建议非常接近。但是,在本例中,您想要的事件实际上是
INIT
,而不是COMPLETE
<代码>初始化在内容尚未完全加载但已准备好使用时触发(并将开始独立播放)
将事件附加到
loader.contentLoaderInfo.addEventListener(Event.INIT, handleReady );
然后用它来处理
public function handleReady( initEvent:Event ):void{
MovieClip(initEvent.currentTarget.content).stop();
}
您会注意到,您可以将currentTarget
的content
属性强制转换为MovieClip,甚至在它连接到舞台之前就停止它
请务必注意,在
进度
事件(或初始化
或完成
事件之前的任何时间)中使用内容
属性是不安全的。您将得到一个错误,大意是对象尚未准备就绪。我正在寻找类似的问题/解决方案,但我的问题几乎没有什么不同。我知道这不是你的问题,但公平地分享我的解决方案。当我试着去做
event.currentTarget.stop(); // AS1&AS2 -> BAD swf to import
使用加载程序的内容,我的Flash IDE向我显示了以下错误:
“在flash.display.AVM1Movie上找不到属性停止,并且没有默认值。”
这发生在我身上,因为我导入的swf是使用AS1创建的,而不是使用AS3作为主电影(因此我将swf反编译为fla并使用AS3重新编译,这是After Effects的输出)。现在我知道AVM1和AVM2是表示actionscript 1和2文件的类。您找到过解决方案吗?Adobe关于这个问题的文档似乎不存在:-(如果您正在加载舞台上有动画电影嘴唇/精灵的SWF,那么您需要停止()儿童动画