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

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

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

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
По умолчанию Как получить список всех клипов?

Привет!
Подскажите, как можно получить список или массив имен всех MovieClip определенного пользовательского класса (например, Ball), которые в данный момент находятся на сцене?
Что-то наподобии:
Код:
for (i in _root) {
  trace("_root."+i+" ("+typeof (_root[i])+")");
}
но, желательно и вложеных в другие мувик.
Спасибо.

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

Регистрация: Sep 2002
Сообщений: 30,784
Рекурсией, конечно.

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

Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
Отправить сообщение для Usnul с помощью ICQ
подсказка: функции.
__________________
I'm only happy when it rains.
Waka Laka

Старый 09.08.2007, 19:51
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 4  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Но, приведеный мною код выводит общее название класса: объект, стринг и тд..
Мне надо примерно так: на сцене в данный момент есть клип myBall1 (просто клип) и myBall2 (объкт класса Ball наследник мувиклипа). Вывести надо:
myBall2

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

Регистрация: Sep 2002
Сообщений: 30,784
Код:
function getNames(root) {
	for (var i in root) {
		var item = root[i];
		
		if (typeof item == 'movieclip') {
			getClassName(item, _global);
			trace('[object '+(__currentClassName ? __currentClassName : 'MovieClip')+', path='+item+']');
			delete __currentClassName;
			getNames(item);
		}
	}
}
function getClassName(mc, scope) {
	for (var i in scope) {
		var item = scope[i];

		if (typeof item == 'function' && mc.__proto__ == item.prototype) {
			__currentClassName = i;
			return;
		} else if (typeof item == 'object') {
			getClassName(mc, item);
		}
	}
}
onEnterFrame = function() {
	getNames(this);
	delete onEnterFrame;
}
Цитата:
Сообщение от Output
[object MyClass, path=_level0.myClass]
[object AnotherClass, path=_level0.myClass.anotherClass]

Старый 10.08.2007, 11:40
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 6  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Привет!
__etc код как всегда великолепен. Спасибо. Однако моя проблема не разрешилась. Попрбую еще раз сформулировать.
В фильме участвует постоянно меняющее кол-во клипов (класса MovieClip) и экземпляров класса Ball (тоже клипов, так как изначально определены как class Ball extends MovieClip)
В любой момент времени мне надо обратиться ко всем экземплярам Ball, а не ко всем MovieClip.
Ваш код выдает:
Код:
[object MovieClip, path=_level0.myBall2]
[object MovieClip, path=_level0.myBall1]
[object MovieClip, path=_level0.myBall1.myBall3]
[object MovieClip, path=_level0.main_mc]
[object MovieClip, path=_level0.main_mc.myBall4]
[object MovieClip, path=_level0.main_mc.myBall4.myBall3]
[object MovieClip, path=_level0.main_mc.box_mc]
А как обратиться только к 1,2,3,5,6 объектам, то есть код должен распознавать принадлежность к классу Ball.
Как в известном выражении: мухи и котлеты по отдельности, хотя и те и другие мясо.
Еще раз благодарю за попытку помочь.

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

Регистрация: Sep 2002
Сообщений: 30,784
Так, а вот так:

Код:
function getNames(root) {
	for (var i in root) {
		var item = root[i];
		
		if (typeof item == 'movieclip') {
			getClassName(item, _global);
			trace('[object '+(__currentClassName ? __currentClassName : 'MovieClip')+', path='+item+']');
			delete __currentClassName;
			getNames(item);
		}
	}
}
function getClassName(mc, scope) {
	for (var i in scope) {
		var item = scope[i];
		if (typeof item == 'function' && mc.__proto__ == item.prototype) {
			__currentClassName = i;
			return;
		} else if (typeof item == 'object') {
			getClassName(mc, item);
		}
	}
}
onLoad = function() {
	getNames(this);
}
Работает? Судя по MovieClip в трейсе, классы ещё не успели инициализироваться.

Старый 10.08.2007, 17:13
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 8  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
К сожалению тот же результат.
Проблему можно решить по другому, но у меня нет (пока!) опыта работать с классами. Если б я смог передать в класс событие "нажатие кнопки на руте" или нажатие мышки в определенной области рута, то не потребывалось бы оттделять "мух от котлет".
А так засел за англо-русский словарь и пытаюсь перевести из ХЭЛПа что есть addEventListener, broadcast, EventDispatcher, и как они могут мне помочь.
Нашел в EventDispatcher.addEventListener() такой код:
Код:
myListener = new Object();
myListener.click = function(evt){
    trace(evt.type + " triggered");
}
myButton.addEventListener("click", myListener);
Может его как то пробывать прикрутить к классу? Или это не из той оперы?

В догонку к написаному:
Первый код отлично подошел для другой задачи: останока/пуск всех мувиков (включая вложеных) в данный момент времени!!!


Последний раз редактировалось Жень Шень; 10.08.2007 в 17:16.
Старый 10.08.2007, 17:16
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 9  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Можно.
http://www.actionscript.org/resource...her/Page1.html

Старый 13.08.2007, 16:32
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 10  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Привет!
__etc, спасибо за ссылку, сижу разбираю...и возникли 2 "непонятки".
1. В примерах (по вышепреведенной ссылке) в классе есть такая строка в конструкторе:
Код:
EventDispatcher.initialize(this);
Но класс EventDispatcher согласно просмотренному хэлпу не имеет метода initialize(), и в объявленых методах его нет. Как происходит инициализация?
2. Непонятен (для меня) синтаксис таких строк в части параметра (передаваемые параметры заключены в фигурные скобки):
Код:
dispatchEvent({target:this, type:'rollOver'});
Предпологаю, что это передача объектов с определенными свойствами. Так ли это?
Спасибо.

ЗЫ
И, последнее. Это относится к теме топика. Чисто теоретически хочется удовлетвориться, как все-таки получить список любого пользовательского класса, а не список классов верхнего уровня. Повторюсь, для решения своей проблемы я попытаюсь использовать событие кнопки и обработка его в моем классе.

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

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

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


 


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


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