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

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

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

Регистрация: Feb 2010
Сообщений: 9
Tools Типизированный массив, расширяющийся при необходимости

Всем привет.

У меня есть массив одинаковых объектов, к примеру 10 мувиклипов, а мне нужно разместить на экране 15 таких мувиков из этого массива. Для этого нужно заполнить этот массив ещё 5 объектами этого же типа.
Т.е нужно создать такую функцию, которая расширяла бы указанный массив, нужным типом данных ... понятно что можно внутри такой функции реализовать switch в котором будут указаны все типы, но может есть способ поэлегантнее? чтобы при появлении нового класса не надо было добавлять соответсвующий case ? Либо может как-то расширить класс Array или Vector так чтобы его можно было влюбой момент дополнить?

Спасибо!

Старый 30.06.2011, 16:57
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
По-моему в Array и так можно когда и куда угодно добавлять что угодно.

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

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
вроде есть метод один... getQualifiedClassName... вроде называется.
В параметры принимает объект.
Получаете имя класса, потом получаете сам класс: getDefinitionByName
Потом создаете экземпляры
---
если я правильно понял, что нужно автору

Старый 30.06.2011, 17:10
FinalBoss вне форума Посмотреть профиль Отправить личное сообщение для FinalBoss Найти все сообщения от FinalBoss
  № 4  
Ответить с цитированием
FinalBoss

Регистрация: Feb 2010
Сообщений: 9
Цитата:
Сообщение от bav Посмотреть сообщение
По-моему в Array и так можно когда и куда угодно добавлять что угодно.
Скажу иначе, у меня есть 2 типизированых массива

Код AS1/AS2:
var A:Vector.<Sprite> = new Vector.<Sprite>();
var B:Vector.<Object> = new Vector.<Object>();
мне нужно дополнить ещё тремя и пятью элементами оба массива, для этого я хочу использовать функцию вроде этой:

Код AS1/AS2:
A.add(3);
B.add(5);
Т.е функция add возьмет на себя работу определения нужного типа элементов и добавит нужное их число в массив.
Ну или в более простом виде реализовать, типа как-нить так:

Код AS1/AS2:
AddElementsTo(A, 3, Sprite);
AddElementsTo(B, 5, Object);

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

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Да, вы можете это реализовать с помощью того, что я описал выше.

Старый 30.06.2011, 17:51
FinalBoss вне форума Посмотреть профиль Отправить личное сообщение для FinalBoss Найти все сообщения от FinalBoss
  № 6  
Ответить с цитированием
FinalBoss

Регистрация: Feb 2010
Сообщений: 9
Цитата:
Сообщение от kackbip Посмотреть сообщение
Да, вы можете это реализовать с помощью того, что я описал выше.
Да, все получилось, спасибо!
Состряпал тут для наглядности, может ещё кому пригодится:

Код AS1/AS2:
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedClassName;
import flash.display.MovieClip;
 
var AArray:Array = new Array();
var BArray:Array = new Array();
 
function AddElementsTo(A:Array, num:int, NeedClass:String):void {
	for (var i:int = 0; i < num; i++) {
		var someClass:Class = getDefinitionByName(NeedClass) as Class;
		A.push(new someClass());	
	}
}
 
function AddElementsTo2(A:Array, num:int, NeedClass:*):void {
	var nameClass:String = getQualifiedClassName(NeedClass) as String;
	trace(nameClass);
	for (var i:int = 0; i < num; i++) {
		var someClass:Class = getDefinitionByName(nameClass.toString()) as Class;
		A.push(new someClass());	
	}
}
 
AddElementsTo(AArray, 3, "flash.display.Sprite"); // указываем нужный класс
AddElementsTo2(BArray, 5, AArray[1]); // реализация, где просто даем ссылку на экземпляр нужного класса
 
trace(AArray + "\n" + BArray);
 
//результат
[object Sprite],[object Sprite],[object Sprite]
[object Sprite],[object Sprite],[object Sprite],[object Sprite],[object Sprite]
Ну похоже тема закрыта


Последний раз редактировалось FinalBoss; 30.06.2011 в 17:54.
Старый 30.06.2011, 18:17
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Если вам, на этапе компиляции, известен класс который необходимо создать, то все эти танцы с бубном getQualifiedClassName не нужны. Передавайте в функцию сразу необходимый класс.
Код AS3:
function AddElementsTo2(A:Array, num:int, NeedClass:Class):void {
	for (var i:int = 0; i < num; i++) {
		A.push(new NeedClass());	
	}
}
...
AddElementsTo(AArray, 3, Sprite);
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 30.06.2011, 18:21
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
А вам есть разница, писать
Код AS3:
AddElementsTo(AArray, 3, Sprite);
или
Код AS3:
AddElementsTo(AArray, 3, "flash.display.Sprite");
?
в первом случае всё намного легче и быстрее, new NeedClass и всё). Для второго советую вместо
Код AS3:
getDefinitionByName(getQualifiedClassName(NeedClass))
(зачем, кстати, строку эту тягать весь цикл и кучу раз getDefinitionByName дёргать?)
Код AS3:
(NeedClass as Object).constructor
- нет мороки со строками, строки это не особо быстро всегда. Ну и вообще информацию о типах использовать не рекомендуют.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 30.06.2011, 20:15
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 9  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Может я что-то не понял, но не лучше ли в таком случае использовать Array?
Зачем тут Vector вообще?
По-моему, все преимущества в скорости будут сведены на нет подобной хренью getDefinitionByName(getQualifiedClassName(NeedClass))

Старый 30.06.2011, 20:27
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 10  
Ответить с цитированием
Crazy
[+1 23.05.11]
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
...тем более, что штатно это делается передачей параметром не имени класса или самого класса, а объекта-фабрики. Что и быстрее и гибче.

Изучаем паттерн Abstract Factory и будет счастье.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++

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

Теги
array , Vector массив
Опции темы
Опции просмотра

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

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


 


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


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