如何控制动态加载的SWF

时间:2009-02-02 19:19:28

标签: flash actionscript-3

我有一个加载外部SWF文件的flash片段。我需要能够将加载的swf文件移动到主时间轴中的下一帧。

以下是代码段:

var request:URLRequest = new URLRequest(file);
loader.load(request);
var swfTimeline:MovieClip = loader.content as MovieClip;
swfTimeline.nextFrame();

如果我在swfTimeline上运行跟踪,我会得到一个空对象引用。我想我找到了解决方法,但现在我遇到的问题是加载的SWF是ActionScript 2,而AS3似乎不想将AS2 SWF作为普通的影片剪辑来处理。

6 个答案:

答案 0 :(得分:6)

首先需要在加载器中添加事件侦听器,以便了解加载何时完成。所以从你的代码片段我建议像

var request:URLRequest = new URLRequest(file);
loader.addEventListener(Event.COMPLETE, function(event : Event) : void
{
var swfTimeline:MovieClip = loader.content as MovieClip;
swfTimeline.nextFrame();
});
loader.load(request);

许多不同的方法来组织这些代码,但应该这样做

答案 1 :(得分:2)

使用要加载SWF的Loader对象的content属性。例如......

var swfTimeline:MovieClip = loader.content as MovieClip;
swfTimeline.nextFrame();

答案 2 :(得分:2)

如果您想将符号从Flash加载到Flex,那么这应该会有所帮助。

loader.contentLoaderInfo.applicationDomain.getDefinition("here linkage name") as Class

此代码可以将Movieclip放置在舞台上,其基于时间轴的动作脚本(动画结束时停止命令等)保持不变。使用它的一种方法如下:

var c:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("BA_doors") as Class
_animation = new c() as MovieClip
addChild(_doors)

答案 3 :(得分:1)

如果您尝试访问内容时出现空值,则可能需要等待加载完成事件:

   swfLoader.addEventListener(Event.COMPLETE, onSwfLoaded);

一旦swf完全加载,你就不会再得到null了。

要注意的一点是,即使在获得COMPLETE事件之前,swf上的主时间轴也将开始运行。你需要在flash电影的第一帧上设置一个stop()来做你想要做的事情......即使这样,它也会有问题。有时主时间轴有自己的想法。

在我的项目中,我们最近决定完全清除主时间轴,并从符号库中加载电影......将动画片段加载为符号可以让您完全控制,但是您必须使用变换来正确放置它们(因为你不再有主舞台了。)

只要您使用AS3 flash9影片剪辑,您就可以完全控制Flex。

享受!

答案 4 :(得分:1)

应该是......

loader.currentTarget.content as MovieClip;

答案 5 :(得分:0)

据我所知 - AVM2电影(您的AS3电影)与AVM1电影(您的as2 swf)对话的唯一方法是使用LocalConnection对象。

关于你的第一个问题 - 我正在反击......我需要在完成事件触发之前访问loader.content属性。

祝你好运!

此致

克里斯