0

我有 2 个 swf 文件。一个是加载并将外部加载的 swf 加载到其中。

这是第一个加载的 swf 中的代码:#1

var logo:Loader = new Loader();
logo.load(new URLRequest("images/Logo.png"));
logo.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadLogo);
function LoadLogo(e:Event):void
{
    addChild(logo);

}

/// The SWF I AM LOADING 

var Beau:Loader = new Loader();
Beau.load(new URLRequest("Beau.swf"));
Beau.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadBeau);

function LoadBeau(e:Event)
{
    addChild(Beau);

}

现在这里是加载的 BEAU SWF 的代码:#2

import flash.display.MovieClip;


bird.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

function fl_MouseClickHandler(event:MouseEvent):void
{
   ////   I WANT TO BE ABLE TO ADD CODE TO CONTROL MOVIECLIPS 
   ////   AND CHILDREN form this externally loaded swf. How do
   ////   I do that? Below code does not work.

var logo:MovieClip;
var ControlLogo:MovieClip = MovieClip(logo.content);
    ControlLogo.alpha = .3;

}


编辑

好的,您的代码和教程很棒。当我从外部 URL 加载剪辑时,我现在遇到了主要的 SANDBOX 问题。我还在使用 FLASH CS5.5 为 ANDROID 编码。它不允许我使用 Security.allowDomain("*");

底线是新加载的 SWF 在没有许可的情况下无法访问父级,但我不知道如何授予它许可.... 使用 AIR/ANDROID 播放器。

4

1 回答 1

1

使用属性parent

parent给装载机

parent.parent给 swf#1

所以你可以编写如下所示的函数

function fl_MouseClickHandler(event:MouseEvent):void
{

    var swf1:Object = parent.parent;

    var logo:Loader = swf1.logo;
    var ControlLogo:Bitmap = Bitmap(logo.content); // because logo loads an image
    ControlLogo.alpha = .3;


}

确保它logo不是局部变量,而是 swf#1 中的全局和公共变量

public var logo:Loader = new Loader();

编辑:

logo:Loader 被添加到 SWF#1。加载图像,所以内容是位图。

beau:Loader被添加到舞台。加载 swf (SWF#2),因此内容是 MovieClip。

所以现在

根是 SWF#1

父级beau是 SWF#1

SWF#2 的beau父级beau是 SWF#1

所以对于 SWF#2,SWF#1 是父级的父级,所以 parent.parent

如果您不创建公共变量,则可以使用 property 来管理它name

var logo:Loader = new Loader();
logo.name = "logo";
...
...

var beau:Loader = new Loader();
beau.name = "beau";
...
...

然后在 swf#2 中的任何地方

var swf1:Object = parent.parent;

var logo:Loader = Loader(swf1.getChildByName("logo"));
....
....

为了访问内容,建议使用我已经展示过的类型转换

var ControlLogo:Bitmap = Bitmap(logo.content); // because logo loads an image

以便您可以如下所示进行检查并避免运行时错误

var ControlLogo:Bitmap = Bitmap(logo.content); 
if(ControlLogo){

}

如果你想这样做,不管内容如何,​​如下所示

var ControlLogo:Object = logo.content; 
if(ControlLogo && ControlLogo.hasOwnProperty("alpha")){
   ControlLogo.alpha = 0.4;
}
于 2012-03-10T20:57:26.247 回答