现在我正在研究需要的AS2代码:
以下是我的代码:
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中访问变量?
答案 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
的要求,因为函数的范围没有改变。