MovieClip.getChildByName()的AS2版本?

时间:2008-11-05 18:43:26

标签: flash actionscript actionscript-2

我正在尝试对这个小小的Flash 8 / AS2项目中的“DOM”引用负责。

越来越令人沮丧的是获取对其他电影剪辑和对象的引用。例如,目前我访问表单的提交按钮的代码看起来像这样

var b:Button = _level0.instance4.submitBtn;

我希望AS2的实例检索方法类似于AS3的MovieClip.getChildByName()甚至是Javascript的document.getElementById()。因为硬编码这些匿名实例的名称(如上面的instance4)只是感觉非常非常脏。

但是,我在this AS2 Reference找不到任何类似的东西。

3 个答案:

答案 0 :(得分:1)

如果MovieClip放置在Flash IDE的舞台上,您可以在属性面板中为其指定正确的实例名称。

如果它是动态添加的,您还可以为其命名,并另外存储引用:

var my_MC=createEmptyMovieClip("instanceName", depth);

在任何一种情况下,您都可以使用_parentClip.instanceNamemy_MC.

对其进行处理

答案 1 :(得分:1)

有几种方法可以做到这一点。最简单的方法是使用数组表示法。您之前的示例,如下所示:

var b:Button = _root.instance4.submitBtn;

在数组表示法中看起来像这样:

var b:Button = _root["instance4"].submitBtn;

因此,如果您想循环已经创建的100个按钮并将alpha设置为0:

for( var i:Number = 0; i < 101; i++)
{
     var button:Button = _root["instance"+i].submitBtn;
     button._alpha = 0;
}

您也可以使用eval(“instance4”)来做同样的事情,但我对涉及的范围问题有点模糊。

答案 2 :(得分:0)

您可以自己编写代码(代码未经测试,但您明白了):

MovieClip.prototype.getElementByName = function(name : String) : Object
{
    var s : String;
    var mc : Movieclip = null;

    for( s in this )
    {
        if( this[s] instanceof MovieClip )
        {
            if( s == name )
            {
                mc = this[ s ];
                break;
            }

            mc = this[s].getElementByName( name );
        }
    }

    return( mc );
}