Почему свойство .name дочернего объекта DisplayObject и результаты getChildByName () иногда отличаются? - PullRequest
1 голос
/ 22 сентября 2008

Может кто-нибудь объяснить разницу между свойством "name" экранного объекта и значением, найденным функцией getChildByName ("XXX") ? Они одинаковы в 90% случаев, пока это не так, и все разваливается.

Например, в приведенном ниже коде я нахожу объект по имени экземпляра только путем непосредственного изучения свойства имени дочернего элемента; getChildByName () завершается ошибкой.

var gfx:MovieClip = new a_Character(); //(a library object exported for Actionscript)

var do1:DisplayObject = null;
var do2:DisplayObject = null;

for( var i:int = 0 ; i < gfx.amSword.numChildren ; i++ )
{
    var child:DisplayObject = gfx.amSword.getChildAt(i);
    if( child.name == "amWeaponExchange" )  //An instance name set in the IDE
    {
        do2 = child;
    }
}

trace("do2:", do2 );

var do1:DisplayObject = gfx.amSword.getChildByName("amWeaponExchange");

Создает следующий вывод:

do2: [object MovieClip]
ReferenceError: Error #1069: Property amWeaponExchange not found on builtin.as$0.MethodClosure and there is no default value.

Есть идеи, о чем думает Флэш?

Ответы [ 5 ]

4 голосов
/ 23 сентября 2008

Кажется, вы исправили это сами!

С:

var do1:DisplayObject = gfx.amSword.getChildByName["amWeaponExchange"];

Вы получаете ошибку:

ReferenceError: Error #1069: Property amWeaponExchange not found on builtin.as$0.MethodClosure and there is no default value.

Поскольку компилятор ищет свойство "amWeaponExchange" для фактического getChildByName , метод .

Когда вы меняете его на:

var do1:DisplayObject = gfx.amSword.getChildByName("amWeaponExchange");

Как вы сделали в своем редакторе, он успешно находит дочерний элемент и компилирует.

0 голосов
/ 22 сентября 2008

Я неправильно понял мой первый ответ.

Возможно, это связано с параметром публикации Flash IDE: «Автоматически объявлять экземпляры сцены» в диалоговом окне «Параметры ActionScript 3.0».

0 голосов
/ 22 сентября 2008

В одном месте вы перебираете gfx.amSword, а в другом - e.gfx.amSword - вы упускаете e.

Кроме того, это не является причиной вашей проблемы, но имена классов должны начинаться с заглавной буквы и не должны содержать подчеркивания. «a_Character» должен быть просто «Персонаж».

0 голосов
/ 22 сентября 2008

Упс, вы правы насчет е, Иэн, но это не проблема, я удалил е из кода, чтобы сосредоточиться на проблеме, но не уловил ее.

Думаю, мне следует опубликовать более ясный пример неудачи. Забавное имя класса - это просто мое личное соглашение об именах для классов, автоматически сгенерированных IDE Flash с помощью «export for Actionscript», но это запутывает проблему.

0 голосов
/ 22 сентября 2008

Мне действительно не удалось понять, что ты делаешь. Но я обнаружил, что доступ к детям MovieClip в самом первом кадре немного ненадежен. Например, вы не можете перейти к gotoAndStop () и затем получить доступ к дочерним элементам этого кадра, вам нужно подождать, пока они не станут доступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...