Определите MovieClip в AS3 среди DisplayObjectContainer - PullRequest
2 голосов
/ 30 октября 2009

в ActionScript 3, если я перебираю потомки фрагмента ролика, он возвращает DisplayObjectContainer, который является списком объектов DisplayObject.

Однако тип AS3 не может идентифицировать MovieClip, поскольку MovieClip теперь является объектом, а не типом данных. Как правильно определить MovieClip?

Я нашел 3 решения онлайн:

Решение 1 (решение, которое я использую):

Сначала установите название мувиклипа на конкретное имя, то в итерации процесс, проверьте имя детей использование child.name.indexOf ("specificName")> -1

Решение 2:

используйте child.hasOwnProperty ("numChildren") для идентификации мувиклипа

Решение 3:

используйте сторонний плагин, такой как FlashDevelop

какое решение лучше? или есть альтернативы?

Ответы [ 2 ]

8 голосов
/ 30 октября 2009

В AS3 это значительно улучшено и упрощено. Вы можете просто использовать оператор "is":

for(var i:int = 0; i < containerObj.numChildren; i++) {
    if(containerObj.getChildAt(i) is MovieClip) {
        // do something
    }
}

В Flash Liveocs для этой темы есть некоторые подробности.

1 голос
/ 30 октября 2009

Используйте ключевое слово is как предложено richleland.

Заранее извиняюсь за придирки, но я не удержался, сказав, что:

  • getChildAt возвращает DisplayObject, а не DisplayObjectContainer, как вы предложили в вопросе.
  • numChildren является свойством класса DisplayObjectContainer, и MovieClip не является единственным его производным классом. Loader, Stage и Sprite расширяет DisplayObjectContainer. MovieClip является подклассом Sprite. Следовательно, трюк с numChildren потерпит неудачу, если вы захотите использовать определенные действия для мувиклипа, такие как gotoAndStop на дочернем элементе.
  • Правильный способ сравнения имени будет child.name == "specificName", если вы не используете «specificName» в качестве префикса или суффикса для всех дочерних элементов, которые являются видеоклипами.
...