AS2-версия MovieClip.getChildByName ()? - PullRequest
0 голосов
/ 05 ноября 2008

Я пытаюсь быть ответственным за мои ссылки "DOM" в этом маленьком проекте Flash 8 / AS2.

То, что становится все более разочаровывающим, это получение ссылок на другие видеоклипы и объекты. Например, в настоящее время мой код для доступа к кнопке отправки формы выглядит примерно так

var b:Button = _level0.instance4.submitBtn;

Я надеялся, что для AS2 существует метод извлечения экземпляров, аналогичный MovieClip.getChildByName() для AS3 или даже document.getElementById() для Javascript. Потому что жесткое кодирование имен этих анонимных экземпляров (например, instance4 в приведенном выше) просто кажется очень, очень грязным.

Но я не могу найти ничего подобного в этом справочнике AS2 .

Ответы [ 3 ]

1 голос
/ 11 ноября 2008

Есть несколько способов сделать это. Самый простой способ - использовать обозначение Array. Ваш предыдущий пример, который выглядит так:

var b:Button = _root.instance4.submitBtn;

будет выглядеть следующим образом в записи Array:

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

Так что, если вы хотите перебрать 100 уже созданных кнопок и установить альфа в 0:

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

Вы также можете использовать eval ("instance4"), чтобы сделать то же самое, но я немного запутался в связанных с этим вопросах.

1 голос
/ 05 ноября 2008

Если мувиклип был помещен на сцену в Flash IDE, вы можете дать ему правильное имя экземпляра на панели свойств.

Если он был добавлен динамически, вы также можете дать ему имя и дополнительно сохранить ссылку:

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

В любом случае вы можете указать их с помощью _parentClip.instanceName или my_MC.

0 голосов
/ 06 ноября 2008

Вы можете написать это самостоятельно (код не проверен, но вы поняли):

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 );
}
...