Условие не работает в AS3 (дополнительный сайт не позволит мне публиковать)

#if-statement #actionscript-3

#if-statement #actionscript-3

Вопрос:

У меня довольно прямолинейный оператор if

 var mynum:Number = 0; 
var myclip:MovieClip = new thisclass();
addChild(myclip);
  

в файле класса

 var i:int = 0;
for (i; i<stage.numChildren;   i)
{
  if (stage.getChildAt(i) is thisclass)
  { trace("true"); }
}
  

и я не получаю ожидаемых результатов?

Есть ли что-то еще в условии «есть»?

Комментарии:

1. Возможны две проблемы. 1. Обычно вы не работаете со сценой напрямую. Если вы явно не укажете stage , вы с ним не работаете. Например, если вы пишете сценарии на основной временной шкале, вы находитесь в корне , а не на сцене . 2. Если вы обратитесь к stage или root в конструкторе класса, вы получите ошибки, потому что конструктор выполняется точно после оператора new и перед следующей строкой после new . Таким образом, в конструкторе класса у вас нет доступа к этапу или корню . Сначала вы должны прослушать событие ADDED_TO_STAGE.

2. @Organis судя по этому коду, он написан на временной шкале. Так что да, иерархия должна быть stage -> root -> MC.

Ответ №1:

Решил проблему, используя parent вместо stage, не уверен, почему ему не понравился stage

Комментарии:

1. Потому что ваш этап не является прямым родителем вашего thisclass. getChildAt() не пересекает все дерево отображения, оно пересекает только текущий узел этого дерева. Вы вызвали его из stage значения, означающего, что вам нужен корневой узел, хорошо, но ваш экземпляр не является прямым родителем root. Вы должны проверить myclip.parent , чтобы узнать, что вы должны перечислить, чтобы найти его.