Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.09.2008, 17:27
LEXiy вне форума Посмотреть профиль Отправить личное сообщение для LEXiy Посетить домашнюю страницу LEXiy Найти все сообщения от LEXiy
  № 1  
Ответить с цитированием
LEXiy
 
Аватар для LEXiy

Регистрация: Jan 2006
Сообщений: 66
По умолчанию For each и MovieClip

Здравствуйте.
Не могу понять, почему у меня не работает for each
В AS2 for in быстро пробегался по всем свойствам и объектам любого мувика, а здесь что-то молчит.
Допустим, что есть клип в котором лежит еще два, но при вызове из класса первого клипа например такого кода:
Код:
for each (var item in this) { 
      trace(item); 
}
Он молчит, как будто он пустой... В чем дело?
Мастера и мастерицы, помогите плиз.
__________________
Делаем так и перетакивать не будем!

Старый 21.09.2008, 22:29
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Потому что это классы, у них свойства закрыты от перечисления. Если очень надо, есть describeType.

Старый 21.09.2008, 22:46
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
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]

Старый 23.09.2008, 15:47
LEXiy вне форума Посмотреть профиль Отправить личное сообщение для LEXiy Посетить домашнюю страницу LEXiy Найти все сообщения от LEXiy
  № 4  
Ответить с цитированием
LEXiy
 
Аватар для LEXiy

Регистрация: Jan 2006
Сообщений: 66
Спасибо за ответы.

Цитата:
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
...и все!
Может быть есть другие способы, чтобы пробежаться по всем созданным обьектам (кроме describeType)?
__________________
Делаем так и перетакивать не будем!

Старый 23.09.2008, 16:03
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
путаница в том, что клипы (любые дисплейОбжекты) добавленные в дисплей лист (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));
...
}

Старый 23.09.2008, 16:16
LEXiy вне форума Посмотреть профиль Отправить личное сообщение для LEXiy Посетить домашнюю страницу LEXiy Найти все сообщения от LEXiy
  № 6  
Ответить с цитированием
LEXiy
 
Аватар для LEXiy

Регистрация: Jan 2006
Сообщений: 66
Спасибо вери мач!!!
Теперь все стало понятнее. Я правда решил вообще без этого обойтись... но тем не менее для общего развития полезно было
__________________
Делаем так и перетакивать не будем!

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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