Actionscript 3 我有两个外部加载的SWF文件,我想让每一个都认识到另一个加载了或!加载?

Actionscript 3 我有两个外部加载的SWF文件,我想让每一个都认识到另一个加载了或!加载?,actionscript-3,flash,swfloader,Actionscript 3,Flash,Swfloader,在通过两个单独的按钮加载2个SWF文件后,我试图让其中一个识别另一个正在查看和卸载。在这里给出代码的最佳方式是什么 function matrixLoad(event:MouseEvent): void { if (fl_ToLoad3) { fl_Proloader3 = new fl_Proloader3(); fl_Proloader3.load(new URLRequest("assets/matrix1.swf")); addChild(fl_Proloader

在通过两个单独的按钮加载2个SWF文件后,我试图让其中一个识别另一个正在查看和卸载。在这里给出代码的最佳方式是什么

function matrixLoad(event:MouseEvent): void
{
if (fl_ToLoad3)
{
    fl_Proloader3 = new fl_Proloader3();
    fl_Proloader3.load(new URLRequest("assets/matrix1.swf"));
    addChild(fl_Proloader3);
    fl_Proloader3.x = 0;
    fl_Proloader3.y = 300;
    trace("Matrix1 Load");
}
else
{
    fl_Proloader3.unload();
    removeChild(fl_Proloader3);
    fl_Proloader3 = null;
    trace("Matrix1 UnLoad");
}
fl_ToLoad3 = !fl_ToLoad3;
}

function matrixLoad2(event:MouseEvent): void
{
if (fl_ToLoad4)
{
    fl_Proloader4 = new fl_Proloader4();
    fl_Proloader4.load(new URLRequest("assets/matrix2.swf"));
    addChild(fl_Proloader4);
    fl_Proloader4.x = 0;
    fl_Proloader4.y = 300;
    trace("Matrix2 Load");
}
else
{
    fl_Proloader4.unload();
    removeChild(fl_Proloader4);
    fl_Proloader4 = null;
    trace("Matrix2 UnLoad");
}
fl_ToLoad4 = !fl_ToLoad4;
}


matrix1.addEventListener(MouseEvent.CLICK, matrixLoad);
matrix2.addEventListener(MouseEvent.CLICK, matrixLoad2);

要使代码正常工作,应避免一些错误,例如使用具有相同名称的变量和类:

fl_Proloader3 = new fl_Proloader3();
在这里,如果您有一个名为
fl\u Proloader3
的类,那么您的实例应该有一个不同的名称(对于
fl\u Proloader4=new fl\u Proloader4();

另外,我不知道您是如何初始化
fl\u-ToLoad4
fl\u-ToLoad3
,但通常它们在开始时应该具有
false
值,因为您的主权财富基金尚未加载,在这种情况下,您的
if
语句应该如下所示:

if (! fl_ToLoad3)
{
    // load the swf
} 
else 
{
    // unload the swf
}
if (! fl_Proloader3)
{
    // load the swf
} 
else 
{
    // unload the swf
}
var fl_Proloader3:Loader,
    fl_Proloader4:Loader;

function matrixLoad(event:MouseEvent):void 
{
    // here we can know that the other swf is loaded or not
    if (fl_Proloader4) {
        trace("Matrix2 is Loaded");
    } else {
        trace("Matrix2 is Unloaded");
    }

    if (! fl_Proloader3) {
        fl_Proloader3 = new Loader();
        fl_Proloader3.load(new URLRequest("assets/matrix1.swf"));
        addChild(fl_Proloader3);
        fl_Proloader3.x = 0;
        fl_Proloader3.y = 300;
    } else {
        fl_Proloader3.unload();
        removeChild(fl_Proloader3);
        fl_Proloader3 = null;
    }
}

function matrixLoad2(event:MouseEvent):void 
{
    // here we can know that the other swf is loaded or not
    if (fl_Proloader3) {
        trace("Matrix1 is Loaded");
    } else {
        trace("Matrix1 is Unloaded");
    }

    if (! fl_Proloader4) {
        fl_Proloader4 = new Loader();
        fl_Proloader4.load(new URLRequest("assets/matrix2.swf"));
        addChild(fl_Proloader4);
        fl_Proloader4.x = 0;
        fl_Proloader4.y = 300;
    } else {
        fl_Proloader4.unload();
        removeChild(fl_Proloader4);
        fl_Proloader4 = null;
    }
}

matrix1.addEventListener(MouseEvent.CLICK, matrixLoad);
matrix2.addEventListener(MouseEvent.CLICK, matrixLoad2);
但您甚至可以不使用
Boolean
s,通过使用
Loader
对象来完成所有这些操作,如下所示:

if (! fl_ToLoad3)
{
    // load the swf
} 
else 
{
    // unload the swf
}
if (! fl_Proloader3)
{
    // load the swf
} 
else 
{
    // unload the swf
}
var fl_Proloader3:Loader,
    fl_Proloader4:Loader;

function matrixLoad(event:MouseEvent):void 
{
    // here we can know that the other swf is loaded or not
    if (fl_Proloader4) {
        trace("Matrix2 is Loaded");
    } else {
        trace("Matrix2 is Unloaded");
    }

    if (! fl_Proloader3) {
        fl_Proloader3 = new Loader();
        fl_Proloader3.load(new URLRequest("assets/matrix1.swf"));
        addChild(fl_Proloader3);
        fl_Proloader3.x = 0;
        fl_Proloader3.y = 300;
    } else {
        fl_Proloader3.unload();
        removeChild(fl_Proloader3);
        fl_Proloader3 = null;
    }
}

function matrixLoad2(event:MouseEvent):void 
{
    // here we can know that the other swf is loaded or not
    if (fl_Proloader3) {
        trace("Matrix1 is Loaded");
    } else {
        trace("Matrix1 is Unloaded");
    }

    if (! fl_Proloader4) {
        fl_Proloader4 = new Loader();
        fl_Proloader4.load(new URLRequest("assets/matrix2.swf"));
        addChild(fl_Proloader4);
        fl_Proloader4.x = 0;
        fl_Proloader4.y = 300;
    } else {
        fl_Proloader4.unload();
        removeChild(fl_Proloader4);
        fl_Proloader4 = null;
    }
}

matrix1.addEventListener(MouseEvent.CLICK, matrixLoad);
matrix2.addEventListener(MouseEvent.CLICK, matrixLoad2);
它可以给你这样的东西:

if (! fl_ToLoad3)
{
    // load the swf
} 
else 
{
    // unload the swf
}
if (! fl_Proloader3)
{
    // load the swf
} 
else 
{
    // unload the swf
}
var fl_Proloader3:Loader,
    fl_Proloader4:Loader;

function matrixLoad(event:MouseEvent):void 
{
    // here we can know that the other swf is loaded or not
    if (fl_Proloader4) {
        trace("Matrix2 is Loaded");
    } else {
        trace("Matrix2 is Unloaded");
    }

    if (! fl_Proloader3) {
        fl_Proloader3 = new Loader();
        fl_Proloader3.load(new URLRequest("assets/matrix1.swf"));
        addChild(fl_Proloader3);
        fl_Proloader3.x = 0;
        fl_Proloader3.y = 300;
    } else {
        fl_Proloader3.unload();
        removeChild(fl_Proloader3);
        fl_Proloader3 = null;
    }
}

function matrixLoad2(event:MouseEvent):void 
{
    // here we can know that the other swf is loaded or not
    if (fl_Proloader3) {
        trace("Matrix1 is Loaded");
    } else {
        trace("Matrix1 is Unloaded");
    }

    if (! fl_Proloader4) {
        fl_Proloader4 = new Loader();
        fl_Proloader4.load(new URLRequest("assets/matrix2.swf"));
        addChild(fl_Proloader4);
        fl_Proloader4.x = 0;
        fl_Proloader4.y = 300;
    } else {
        fl_Proloader4.unload();
        removeChild(fl_Proloader4);
        fl_Proloader4 = null;
    }
}

matrix1.addEventListener(MouseEvent.CLICK, matrixLoad);
matrix2.addEventListener(MouseEvent.CLICK, matrixLoad2);
编辑:

例如:


希望能有所帮助。

您可以在卸载swf时发送自定义事件。然后您可以监听此事件,另一个将知道查看和卸载结构

function matrixLoad(event:MouseEvent): void
{
    var customEvent:Event = new Event("SomeEventName", true);
    if (fl_ToLoad3)
    {
        fl_Proloader3 = new fl_Proloader3();
        fl_Proloader3.load(new URLRequest("assets/matrix1.swf"));
        addChild(fl_Proloader3);
        fl_Proloader3.x = 0;
        fl_Proloader3.y = 300;
        trace("Matrix1 Load");
    }
    else
    {
        fl_Proloader3.unload();
        dispatchEvent(customEvent);//just after unload
        removeChild(fl_Proloader3);
        fl_Proloader3 = null;
        trace("Matrix1 UnLoad");
    }
    fl_ToLoad3 = !fl_ToLoad3;
}

function SomeTriggerEvent(ref:Event):void
{
    trace("swf unloaded");
}

addEventListener("SomeEventName", SomeTriggerEvent);
我建议使用。LocalConnection允许两个或多个SWF之间进行通信。在这种情况下,您可以让您的活动swf向其他swf发送一条消息,并告诉它当前正在使用


关于如何使用LocalConnection的一个很好的例子。在您的情况下,您可以用处理休眠swf所需的任何操作替换received message函数中的trace语句。此外,在您的情况下,在卸载swf之前,您可以向其他(或主)swf发送一条消息,告诉它即将卸载。

这些消息由以下内容初始化:
matrix1.addEventListener(MouseEvent.CLICK,matrixLoad)
matrix2.addEventListener(MouseEvent.CLICK,matrixLoad2)我将按照上面所述进行重组,并让您知道它是如何进行的。非常感谢。将发回…以下是初始化:
var容器:MovieClip=new MovieClip()
addChild(容器)
container.x=1050
container.y=702
var-dMatrix:dMatrix\u-mc=new-dMatrix\u-mc()
container.addChild(dMatrix)
var nMatrix:nMatrix\u mc=new nMatrix\u mc()
container.addChild(nMatrix)
nMatrix.x=110
container.addChild(nMatrix)
var fl_前置器3:前置器
var fl_预装器4:预装器
var fl\u ToLoad3:Boolean=true
var fl\u ToLoad4:Boolean=true最初出现错误,我想可能是因为我最初没有发布我的初始化行(现在已发布)。有什么想法吗?我确实看到了你是如何构建它的,并且理解这是如何有意义的。提前感谢。将.display:Loader类型的值隐式强制为不相关的类型fl.display:ProLoader------------------有2个,它们指向
fl\u Proloader3=new Loader()
fl_-Proloader4=新加载器()lines@P.T.Fenn您应该将
fl\u-Proloader3
fl\u-Proloader4
声明为
Loader
对象,而不是
ProLoader
对象。。。