Actionscript 3 AS3外部加载swf以控制舞台和电影嘴唇及其孩子?

Actionscript 3 AS3外部加载swf以控制舞台和电影嘴唇及其孩子?,actionscript-3,flash,external,root,stage,Actionscript 3,Flash,External,Root,Stage,我有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)

我有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加载剪辑时,我现在遇到了重大的沙盒问题。我还使用FLASH CS5.5为ANDROID编写代码。它不允许我使用安全性


底线是新加载的SWF未经允许无法访问父级,但我不知道如何授予它权限。。。。使用AIR/ANDROID播放器。

使用属性
父项

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中的全局和公共变量

编辑:

logo:Loader
被添加到SWF#1。加载图像,使内容为位图

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

所以现在

根是SWF#1

beau
的父项是SWF#1

SWF#2的父项是
beau
,而
beau
的父项是SWF#1

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

如果您没有创建公共变量,可以使用属性
name
来管理它

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

var beau:Loader = new Loader();
beau.name = "beau";
...
...
然后在swf#2的任何地方

为了访问内容,建议使用类型转换,如我所示

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;
}

你想在
fl\u MouseClickHandler()中做什么?
logo
来自哪里?
fl\u MouseClickHandler()
是否被调用(请尝试
trace()
)。您是否在两个SWF中都使用allowDomain?如果有帮助,建议阅读:我两种方法都试过了。它不起作用。在Android上通过AIR加载时,不允许allowDomain。我不知道该怎么解决这个问题。我可能需要开始第二篇文章,更加具体。太棒了!成功了。我很感激像你这样慷慨的人。如果你有时间,你能解释一下“家长.家长”是做什么的吗?与var位图相同。因为如果我想加载一个外部SWF,那么我会使用“MovieClip”。如果我这样做了,并且想要控制电影中动态添加的孩子或者swf中硬编码的孩子。。。那么我会使用什么代码呢?但这并不重要,但我很想知道,因为我正朝着这个方向前进。再次非常感谢!此外,我不能将其作为公共VAR,因为我没有使用类。我还不知道如何有效地使用它们。还是从AS2过来谢谢。。。我已经解释过了
var ControlLogo:Bitmap = Bitmap(logo.content); 
if(ControlLogo){

}
var ControlLogo:Object = logo.content; 
if(ControlLogo && ControlLogo.hasOwnProperty("alpha")){
   ControlLogo.alpha = 0.4;
}