调用MovieClip中定义的函数 - ActionScript 2

时间:2009-02-27 12:09:17

标签: flash actionscript

我有一个附加了attachMovieClip的影片剪辑,它有一个名为test()的函数

///

function test()
{
   trace('!');
}

附加影片后,我试图调用该功能,但我根本无法。有一个简单的解决方案吗?我已经读过一些关于你的事情,你不能在剪辑完全加载之前调用这个函数......有一个简单的解决方案吗?

3 个答案:

答案 0 :(得分:1)

确保在MovieClip时间轴的第一帧定义了“test”功能。然后使用MovieClip.onLoad处理程序捕获MovieClip准备接收函数调用的时间。之后,您应该可以在剪辑上调用“test”。

祝你好运!

答案 1 :(得分:1)

您可以在主时间轴中定义动画片段外的功能。然后,附加它(通过attachMovie),您可以通过initObject(第4个参数)传递它:

function test(p) {
    trace("called with "+p);
}
this.attachMovie("lib_clip","clip_mc",3,{func:test, mp:"my parameter"});
clip_mc._x = 100;
clip_mc._y = 100;
clip_mc.onRelease = function() {
    this.func(this.mp);
};

Vyger

答案 2 :(得分:0)

我使用AS2已经有一段时间了,因为AS3摇滚,但我相信您需要为附加的影片剪辑提供实例ID。而且你还需要等到电影准备就绪。

//MovieClip with function hello() in it.
hello():Void
{
    trace('Hello world!');
}

//Root timeline of main movie.
container.attachMovieClip("nameInLibraryToAttach", "instanceID", depth);

//The following will not trace because it happens to soon.
container.instanceID.hello();

//The following works
var runOnceNumber:Number = 0;
var interval:Number = setInterval(someFunction, 1000);

someFunction():Void
{
    container.instanceID.hello();
    runOnceNumber++;

    clearInterval(interval);
}

你需要做的是设置带有嵌入式功能的MovieClip,以便在准备好时广播一个事件,并从主要事件中监听它,或者像setInterval那样只需要一个滴答。我用setInterval测试它,它首先工作。再次,您需要等到它“INITIALIZED”,这意味着第1帧上的所有代码都已加载并可用。考虑一下ActionScript 3,因为它的事件驱动流程非常容易。