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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.03.2012, 22:52
AlexFrost вне форума Посмотреть профиль Найти все сообщения от AlexFrost
  № 1  
Ответить с цитированием
AlexFrost
Banned

Регистрация: Jan 2012
Сообщений: 25
Post swc и много классов

прошу помощи, т.к. уже руки и голова пухнут от объёма всего.

есть swc с векторной графикой. каждый спрайт вынесен отдельным классом, типа Ball1...BallN, Car1...CarN etc.

каким образом можно хотя бы полу-автоматизировать процесс для вынесения экземпляров классов на сцену?

т.к. графики уже много + ещё добавляю постоянно.

на данном этапе добавляю всё вручную.
Код AS3:
var ball1:Ball1 = new Ball1();
ball1.x
ball1.y
ball1.buttonmode = true;
ball1.addEventListener
container.addchild(ball1);
а хотелось бы функцию, которая просматривает все объявленные экземпляры
т.е. дело не в самой функции, а на её сути. можно ли какими-либо методами пробегаться по всем или хотя бы по выборке по имени класса?


Последний раз редактировалось dimarik; 10.03.2012 в 22:56.
Старый 11.03.2012, 00:00
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 2  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
А в чем, собственно, проблема? Не знаете как написать фабричный метод, который добавляет экземпляры?
Это не выход из ситуации, но если вам именно это нужно, то см. ниже.
Код AS3:
public function addInstance(container:DisplayObjectContainer, type:Class, x:Number = 0, y:Number = 0):DisplayObject {
      var instance:type = new type();
      instance.x = x;
      instance.y = y;
      //массив, через который обращаться к обьектам
      instanceArray.push(instance);
      return container.addChild(instance);
}
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 11.03.2012, 00:04
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
@HardCoder, Вы серьезно?
Код AS3:
var instance:type = new type();
Это не скомпилируется.

@AlexFrost
Попробуйте ApplicationDomain.currentDomain.getDefinition("..."). Ну и try-catch Вам в помощь
__________________
...вселенская грусть

Старый 11.03.2012, 00:11
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 4  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
@HardCoder, Вы серьезно?
Код AS3:
var instance:type = new type();
Это не скомпилируется.
Действительно, приношу извинения. В таком случае можно написать так:
Код AS3:
var instance:DisplayObject = new type();
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 11.03.2012, 00:26
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 5  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Надо ещё в свойствах проекта поставить что-бы это swc полностью вкомпилилась в флешку (а то классы будут недоступны, они же ни где не прописываются явно) например в flash develop во вкладку
project - properties - swc include library
и потом можно проверять и брать, например
Код AS3:
			if (loaderInfo.applicationDomain.hasDefinition('CellRenderer_downSkin')) {
				var myClass:Class = loaderInfo.applicationDomain.getDefinition('CellRenderer_downSkin') as Class;
				trace(describeType(myClass));//посмотреть свойства
			}
__________________
Гоночка

Старый 11.03.2012, 00:48
AlexFrost вне форума Посмотреть профиль Найти все сообщения от AlexFrost
  № 6  
Ответить с цитированием
AlexFrost
Banned

Регистрация: Jan 2012
Сообщений: 25
так ничего и не понял из советов, как ни пытался...
я делаю приложение - аппликацию.
из кусочков собирать картинки.
Код AS3:
private function addToPictField(e:MouseEvent):void 
		{	
var _targetClip:MovieClip = e.currentTarget as MovieClip;
var _clipName:String = getQualifiedClassName(_targetClip);
var _clipClass:Class = getDefinitionByName(_clipName) as Class;
var newClip:MovieClip = new _clipClass();
def...
т.е. на щелчок по выбранной картинке её копия появляется в PictField.
как видите, на этом этапе - всё автоматизировано. а вот на этапе добавления нового элемента - попкин.
графики уже безумно много. и ещё добавляю постоянно.
пишу полностью в FD.
если бы можно было каким-нибудь образом пробегаться по классам из SWC и находить соответствие по имени, скажем, если я буду все классы делать kartinka1, kartinka2, kartinka3....kartinkaN то по содержанию в имени класса kartinka - считать их/заносить в массив и работать уже на уровне цикла.

Добавлено через 1 минуту
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Попробуйте ApplicationDomain.currentDomain.getDefinition("..."). Ну и try-catch Вам в помощь
Спасибо, ушёл гуглить.

Старый 11.03.2012, 00:55
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 7  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Сомневаюсь, что есть такая возможность. Поэтому нужно создать некий список классов, например:
Код AS3:
public static const SWC_CLASSES:Vector.<Class> = new <Class> [kartinka2, kartinka3, kartinkaN, GolayaBaba34];
. В этот список поместить все нужные классы из свц. Так при подключении новой библиотеки каждый раз этот список обновлять новыми (тоько что подключенными) классами

Добавлено через 2 минуты
Потом соответственно циклом проходится по этому списку и делать то что вам нужно. Не думаю что программно можно получить весь список классов библиотеки...
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 11.03.2012, 00:59
AlexFrost вне форума Посмотреть профиль Найти все сообщения от AlexFrost
  № 8  
Ответить с цитированием
AlexFrost
Banned

Регистрация: Jan 2012
Сообщений: 25
Цитата:
Сообщение от HardCoder Посмотреть сообщение
Сомневаюсь, что есть такая возможность. Поэтому нужно создать некий список классов, например:
Код AS3:
public static const SWC_CLASSES:Vector.<Class> = new <Class> [kartinka2, kartinka3, kartinkaN, GolayaBaba34];
. В этот список поместить все нужные классы из свц. Так при подключении новой библиотеки каждый раз этот список обновлять новыми (тоько что подключенными) классами

Добавлено через 2 минуты
Потом соответственно циклом проходится по этому списку и делать то что вам нужно. Не думаю что программно можно получить весь список классов библиотеки...
по-моему, это то, что мне нужно =)))

Добавлено через 30 секунд
Спасибо,HardCoder =)

Старый 11.03.2012, 01:14
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 9  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
можно программно получить список классов через магическую библиотеку
http://etcs.ru/blog/as3/getdefinitionnames/
Код AS3:
import ru.etcs.utils.getDefinitionNames;
 
trace(getDefinitionNames(loaderInfo));//выдаст список классов
__________________
Гоночка

Старый 12.03.2012, 07:51
AlexFrost вне форума Посмотреть профиль Найти все сообщения от AlexFrost
  № 10  
Ответить с цитированием
AlexFrost
Banned

Регистрация: Jan 2012
Сообщений: 25
Проблему решил.
Для тех, кому потребуется решение проблемы.

Код для FD:
Код AS3:
public class Main extends MovieClip 
	{
		//СПИСОК ВСЕХ КЛАССОВ ИЗ SWC, КОТОРЫЕ БУДЕМ ДОБАВЛЯТЬ
		private static const CAS:Vector.<Class> = new <Class> 
		[ca1, ca2, ca3, ..., GoliyMuzhiK];
 
		//ПУСТОЙ СПИСОК. ДЛЯ ДОБАВЛЕНИЯ В НЕГО ВСЕХ ЭКЗЕМПЛЯРОВ НУЖНЫХ КЛАССОВ
		private static const _CAS:Vector.<Object> = new <Object>[];
 
               public function Main():void 
		{       if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);	
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
                        for (var i:int = 0; i < CAS.length; i++) {			
				var caName:String = getQualifiedClassName(CAS[i]);			
				var caClass:Class = getDefinitionByName(caName) as Class;				
				var newCa:MovieClip = new caClass();		
				_CAS.push(newCa);			
				}
                 }
            }
Дальше можно организовать ещё список-выборку по параметрам. И в цикле штамповать экземпляры по списку.


Последний раз редактировалось AlexFrost; 12.03.2012 в 18:27.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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