我有两个外部加载的 SWF 文件,我希望每个文件都能识别另一个已加载或 !loaded?
I have two externally loaded SWF files and I would like for each to recognize that the other has loaded or !loaded?
通过两个单独的按钮加载 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);
为了让您的代码正常工作,您应该避免一些错误,例如使用同名变量和 Class:
fl_Proloader3 = new fl_Proloader3();
如果您有一个名为 fl_Proloader3
的 Class,那么您的实例应该有一个不同的名称(fl_Proloader4 = new fl_Proloader4();
也是如此)。
另外,我不知道你是怎么初始化fl_ToLoad4
和fl_ToLoad3
的,但通常它们的开头应该是false
值,因为你的SWF还没有被已加载,在这种情况下,您的 if
语句应该是这样的:
if (! fl_ToLoad3)
{
// load the swf
}
else
{
// unload the swf
}
但你甚至可以通过使用你的 Loader
对象而不使用 Boolean
来完成所有这些,就像这样:
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 卸载时调度自定义事件。然后你可以监听这个事件,另一个会知道view&unload结构。
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。 LocalConnection 允许两个或多个 SWF 之间的通信。在这种情况下,您可以让您的活动 swf 向您的其他 swf 发送消息并告诉它它当前正在使用中。
Here's 关于如何使用 LocalConnection 的一个很好的例子。在您的情况下,您可以将接收到的消息函数中的跟踪语句替换为处理休眠 swf 所需的任何操作。此外,在您的情况下,就在您卸载 swf 之前,您可以向您的其他(或主要)swf 发送消息并告诉它它即将被卸载。
通过两个单独的按钮加载 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);
为了让您的代码正常工作,您应该避免一些错误,例如使用同名变量和 Class:
fl_Proloader3 = new fl_Proloader3();
如果您有一个名为 fl_Proloader3
的 Class,那么您的实例应该有一个不同的名称(fl_Proloader4 = new fl_Proloader4();
也是如此)。
另外,我不知道你是怎么初始化fl_ToLoad4
和fl_ToLoad3
的,但通常它们的开头应该是false
值,因为你的SWF还没有被已加载,在这种情况下,您的 if
语句应该是这样的:
if (! fl_ToLoad3)
{
// load the swf
}
else
{
// unload the swf
}
但你甚至可以通过使用你的 Loader
对象而不使用 Boolean
来完成所有这些,就像这样:
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 卸载时调度自定义事件。然后你可以监听这个事件,另一个会知道view&unload结构。
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。 LocalConnection 允许两个或多个 SWF 之间的通信。在这种情况下,您可以让您的活动 swf 向您的其他 swf 发送消息并告诉它它当前正在使用中。
Here's 关于如何使用 LocalConnection 的一个很好的例子。在您的情况下,您可以将接收到的消息函数中的跟踪语句替换为处理休眠 swf 所需的任何操作。此外,在您的情况下,就在您卸载 swf 之前,您可以向您的其他(或主要)swf 发送消息并告诉它它即将被卸载。