访问嵌入式swf中的变量? (AS2)

时间:2011-08-20 13:37:17

标签: flash actionscript-2 loaded player-stage

现在我正在研究需要的AS2代码:

  • 加载另一个AS2 SWF。
  • 在加载的SWF上方显示另一个MovieClip。
  • 访问加载的SWF的MovieClip中的变量。

以下是我的代码:

    loadMovieNum("player.swf",5);
    delay = function () {
    var first:MovieClip = _root.attachMovie("OnTop","nf",10);
    trace(_root.nf);
    trace(_layer5);
    clearInterval(delayi);
    }

delayi = setInterval(delay, 3000); //3 seconds to let the video load. 

我正在尝试在加载的swf上面显示一个图形(“OnTop”是我给它一个符号的名称,它的类型是一个MovieClip)但是会发生的是视频显示在其他所有内容之上,并且跟踪输出是:

_level0.nf
undefined

我做错了什么?为什么新的MovieClip不会显示在加载的上面? 然后,在我加载SWF之后,如何在其主要MovieClip中访问变量?

1 个答案:

答案 0 :(得分:0)

我个人会用MovieClipLoader做这件事。使用计时器来假设负载持续时间是非常危险的,因为它会产生竞争条件,连接速度很慢的用户将会失败。

这是一个使用MovieClipLoader和Delegate将事件函数的范围保持在其余代码本地的简单示例,就像addEventListener在AS3中一样。首先,要加载的SWF,我称之为'child.swf'。这包含一个动画,在第1帧它定义了一个名为'hello'的字符串变量:

var hello:String = "Hi";

在父SWF中,我们将拥有加载程序代码和标识符为“mc1”的库项目,该项目将附加到加载的SWF上方的阶段。

//grab Delegate to mimic AS3 event handler scope
import mx.utils.Delegate;
//create container for the loaded SWF
var loadedMC:MovieClip = createEmptyMovieClip("loadedMC",5);
//create the loader (don't cast it though, or you can't directly access the events)
var loader = new MovieClipLoader();
//set up a listener for the load init (called when the first frame of the loaded MC is executed)
loader.onLoadInit = Delegate.create(this, onMovieInit);
//start loading
loader.loadClip("child.swf",loadedMC);
//init handler
function onMovieInit()
{
    //create the next layer from the library
    var firstMC:MovieClip = attachMovie("mc1","newName",10);
    //trace var from loaded mc
    trace(loadedMC.hello); // hi
}

MovieClipLoader在加载目标SWF并处理完第一帧时调用onLoadInit函数,这意味着第一帧上的任何代码现在都可用于父SWF。将调用委托给onLoadInit而不是使用侦听器对象作为官方文档,您希望删除在处理函数中使用_root的要求,因为函数的范围没有改变。