Flash: установка имени экземпляра документа Flash - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть простой документ Flash с одним прямоугольником на сцене.Я сделал прямоугольник символом MovieClip и установил имя его экземпляра в «test_symbol_name».Я опубликовал этот документ в .swf.(Вот .fla и .swf )

В проекте AS3 Flash Builder я загружаю SWF-файл с загрузчиком, а затем отслеживаю все в его списке отображения с помощью этогоfunction:

    public static function traceDisplayList(container:DisplayObjectContainer, indentString:String = "->"):void {
        var child:DisplayObject;

        for (var i:uint=0; i < container.numChildren; i++) {
            child = container.getChildAt(i);
            trace(indentString, child.parent.name + " " + indentString + " " + child.name);

            if (container.getChildAt(i) is DisplayObjectContainer) {
                traceDisplayList(DisplayObjectContainer(child), indentString + "->");
            }
        }   
    }

Вот вывод:

-> instance471 -> instance472
->-> instance472 ->-> instance473
->-> instance472 ->-> test_symbol_name
->->-> test_symbol_name ->->-> instance474

Мой символ стал вложенным в instance472, который находится внутри instance471.

Я могу получить символ в кодеуказав содержащий символ (472), например:

var myTestSymbol:MovieClip = (loader.getChildByName('instance472') as DisplayObjectContainer).getChildByName('test_symbol_name') as MovieClip;

Вот мои вопросы

Что такое instance472 и instance471?Это документ и сцена или что-то еще?

Когда я публикую swf, номер экземпляра может измениться.Я должен изменить свой код в соответствии с последним номером, чтобы заставить его работать.Как я могу назвать instance471?

Это правильный подход или есть лучший способ добраться до моего экземпляра символа?

1 Ответ

1 голос
/ 20 апреля 2011

Вы можете использовать getChildAt (0) вместо этого случайного имени (afaik это контейнер SWF).Но я думаю, что самым безопасным способом было бы сослаться на ваш клип как на элемент documentClass (общедоступная переменная) или, если он вам нужен для использования в родительском фильме, экспортировать символ для ActionScript и создать новый экземпляр из родительского фильма после завершениязагрузка это:

loader.contentLoaderInfo.addEventListener("init", contentReady);
function contentReady(e) {
    var clipdef:Object=loader.contentLoaderInfo.applicationDomain.getDefinition("MyClip");
    var myClip:MovieClip=new clipdef() as MovieClip;
    addChild(myClip);
}
...