【发布时间】:2012-04-09 04:05:18
【问题描述】:
我是 AS3 的新手,正在尝试了解外部加载的 SWF 在 AS3 中的工作原理。自 Flash 4/5 以来,通常在 Flash Web 项目中拥有一个主 SWF 文件,然后将其他 SWF 文件加载到其中,通常用于网站或 Web 项目的各个“部分”。在主文件中,我们将使用掩码为容器动画剪辑(其中加载了外部部分/SWF 文件)设置动画,并在部分完成加载并显示加载的内容时播放动画和过渡。
在 AS3 中,我使用 Loader 类来加载和显示外部文件,我的主要问题是与加载的内容通信、调用它的函数或从中调用根函数。
在 AS2 中,我们可以使用 someMovieClip.loadMovie("ExternalContent.swf") 并且 ExternalContent 文件将加载到 someMovieClip 中。您可以使用 someMovieClip.function(); 访问“External.swf”主时间线上的函数。在“ExternalContent.swf”中,我们可以使用 _root.function() 来访问正在加载的主文件 ExternalContent 中的函数。在 AS3 中这样做似乎很奇怪和神经质,我觉得我在这里缺少一些相当基本的东西。
//Loading in ExternalContent.swf into the sprite
//ExternalContent has a movieclip called "boxes" on it's main timeline
//boxes has a boxesPrompt() function in it's timeline.
var sprite:Sprite = new Sprite();
addChild(sprite);
var loader:Loader = new Loader();
loader.load(new URLRequest("ExternalContent.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);
function onLoaded(event:Event):void
{
sprite.addChild(event.target.content);
sprite.boxes.boxesPrompt();
//Flash gives the following compiler error at the above
//Scene 1, Layer 'Layer 1', Frame 1, Line 21 1119: Access of possibly undefined property boxes through a reference with static type flash.display:Sprite.
//But when I comment out sprite.boxes.boxesPrompt() and use this, it works:
event.target.content.boxes.boxesPrompt()
}
“ExternalContent.swf”中的 boxPrompt() 函数只是跟踪它的父、祖父和曾祖父 - trace(this.parent.parent.parent);。当我使用“event.target.content.boxes.boxesPrompt()”在 onLoaded 事件处理程序中调用该函数时,它显示 Boxes 对象(位于 External.SWF 的主时间轴上)有一个父动画剪辑、祖父精灵和曾祖父对象 mainTimeline。
我认为将加载的内容重新设置到 sprite 中可以让我像以前的 loadMovie() 一样轻松访问加载的内容 - 访问加载的内容就像它直接存在于加载它的剪辑中一样。但是根本不起作用。
换个说法,我的问题是:
如何从主“加载器”SWF 文件与加载的内容进行通信。我不想使用 event.target.content.{etc} 进行通信,因为那样我只会能够在加载器的 event.complete 事件处理程序中处理加载的内容。
-
我如何“重新加载”加载的内容,这样我就可以将其放置在加载器文件主时间轴上的一些影片剪辑/精灵中,而不是使用一些非常长的复杂方式。
如何从加载的内容内部与 main/loader 文件进行通信。以前,我们会使用 _root.functionName() 来做一些事情,比如播放一些从当前外部加载的“部分”到另一个部分的动画过渡。我是怎么做到的。
【问题讨论】:
标签: actionscript-3 flash