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

问题描述 投票:0回答:1

现在我正在研究需要的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中访问变量?

flash actionscript-2 loaded player-stage
1个回答
0
投票

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

这是一个使用MovieClipLoader和Delegate将事件函数的范围保持在其余代码本地的简单示例,就像在AS3中的addEventListener一样。首先,要加载的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
}

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

© www.soinside.com 2019 - 2024. All rights reserved.