繁体   English   中英

加载和使用SWF文件

[英]Loading and using SWF files

我是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”中的boxesPrompt()函数只跟踪它的父,祖父和伟大的祖父 - 跟踪(this.parent.parent.parent);. 当我使用“event.target.content.boxes.boxesPrompt()”在onLoaded事件处理程序中调用该函数时,它显示Boxes对象(位于External.SWF的主时间轴上)具有父动画片段,一个祖父精灵,一个伟大的祖父对象mainTimeline。

我认为将加载的内容重新绑定到精灵中将允许我像loadMovie()一样容易访问加载的内容 - 访问加载的内容,就像它直接存在于加载的剪辑中一样。但是这不是工作。

所以重新说一下,我的问题是:

  • 如何从主“加载器”SWF文件与加载的内容进行通信。我不想使用event.target.content。{etc}进行通信,因为那时我只能处理加载的内容在Loader的event.complete事件处理程序中。

  • 我如何“重新加载”加载的内容,因此我可以将它放在加载程序文件的主时间轴上的某个movieclip / sprite中,而不是使用一些非常冗长的方式。

  • 如何从加载的内容内部与main / loader文件进行通信。 以前,我们使用_root.functionName()来做一些事情,比如播放从当前外部加载的“部分”转换到另一部分的动画。 我怎么去做那件事。

AS2和AS3有很大的不同。 但是你必须承认AS3已经发展成为对AS2的改进。 因此,您所做的任何转变也都会变得更好。

例如:AS2中的_root允许在任何地方访问和更改全局对象和变量,这是一种不好的做法,导致项目中不可维护的代码。

话虽如此,让我来解答你的问题:

  • 如果您能够使用event.target.content访问加载的内容...您应该将其保存在一个类似的变量中,并可以在类的其他地方访问它。

    您必须明白,只有在加载后才能访问内容,因此必须等待它完成并且event.complete处理程序可能是您最好的选择。

  • 我怀疑你是否可以从加载的swf中选择随机内容并将其重新加入到当前的swf中。如上所述,你可能没有一个漫长的复杂方式。

  • 可以通过多种方式访问​​父级。 您可以使用.parent或实际调用父swf中的函数,将其引用传递给子项。


var 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 = event.target.content;

        //This should work
        sprite.boxes.boxesPrompt();
}

有关详细信息,请参阅此示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM