Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   For each и MovieClip (http://www.flasher.ru/forum/showthread.php?t=116137)

LEXiy 21.09.2008 17:27

For each и MovieClip
 
Здравствуйте.
Не могу понять, почему у меня не работает for each :confused:
В AS2 for in быстро пробегался по всем свойствам и объектам любого мувика, а здесь что-то молчит.
Допустим, что есть клип в котором лежит еще два, но при вызове из класса первого клипа например такого кода:
Код:

for each (var item in this) {
      trace(item);
}

Он молчит, как будто он пустой... В чем дело?
Мастера и мастерицы, помогите плиз.

etc 21.09.2008 22:29

Потому что это классы, у них свойства закрыты от перечисления. Если очень надо, есть describeType.

silin 21.09.2008 22:46

Цитата:

The for each..in statement iterates only through the dynamic properties of an object, not the fixed properties
т.е. свойства, определенные как часть класса (твоя ситуация) не будут перечисляться, а динамически добавленные свойства будут
Код:

var myMc:MovieClip = new MovieClip();
myMc.child = new Sprite();
myMc.prop = "someProperty";
for each(var item:Object in myMc) {
        trace( "item : " + item );
}
//item : someProperty
//item : [object Sprite]


LEXiy 23.09.2008 15:47

Спасибо за ответы.

Цитата:

myMc.child = new Sprite();
А так тоже можно клипы добавлять?

У меня не показываются клипы созданные addChild()
Ситуация такая: в одном клипе есть мувик win1, в который он добавляет другие клипы. Вот код первого мувика:
Код:

public function change(s:String, ...args):void {
...
  var ClassReference:Class = getDefinitionByName("main."+s) as Class;
  newobj = new ClassReference();
  win1.addChild(MovieClip(newobj));
...
}

Код добавляемого клипа:
Код:

package main{
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.describeType;
        import main.*;
       
        dynamic public class MenuScreen extends MovieClip {
               
                public function MenuScreen() {
                        this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
                }
               
                private function onAdded(e:Event):void{
                        trace("Hello! I am "+this.name);
                        trace("My parent is "+this.parent.name);
                       
                        for each (var item:Object in this.parent) {
                            trace(item);
                        }
                }
        }
}

И результат:
Цитата:

Hello! I am MenuScreen
My parent is win1
...и все! :confused:
Может быть есть другие способы, чтобы пробежаться по всем созданным обьектам (кроме describeType)?

silin 23.09.2008 16:03

путаница в том, что клипы (любые дисплейОбжекты) добавленные в дисплей лист (addChild) не обязательно являются свойствами класса..
а for each перечисляет именно свойства( и то не все, а только динамически добавленные)
что бы посмотреть дисплейЛист см. numChildren/getChildAt/getChildByName
или, если так нужен for each, оставляй ссылку на мувик в родителе
Код:

public function change(s:String, ...args):void {
...
  var ClassReference:Class = getDefinitionByName("main."+s) as Class;
  win1.newobj = new ClassReference();
  win1.addChild(MovieClip(win1.newobj));
...
}


LEXiy 23.09.2008 16:16

Спасибо вери мач!!!
Теперь все стало понятнее. Я правда решил вообще без этого обойтись... но тем не менее для общего развития полезно было :)


Часовой пояс GMT +4, время: 02:09.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.