|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2010
Сообщений: 9
|
Типизированный массив, расширяющийся при необходимости
Всем привет.
У меня есть массив одинаковых объектов, к примеру 10 мувиклипов, а мне нужно разместить на экране 15 таких мувиков из этого массива. Для этого нужно заполнить этот массив ещё 5 объектами этого же типа. Т.е нужно создать такую функцию, которая расширяла бы указанный массив, нужным типом данных ... понятно что можно внутри такой функции реализовать switch в котором будут указаны все типы, но может есть способ поэлегантнее? чтобы при появлении нового класса не надо было добавлять соответсвующий case ? Либо может как-то расширить класс Array или Vector так чтобы его можно было влюбой момент дополнить? Спасибо! |
|
|||||
вроде есть метод один... getQualifiedClassName... вроде называется.
В параметры принимает объект. Получаете имя класса, потом получаете сам класс: getDefinitionByName Потом создаете экземпляры --- если я правильно понял, что нужно автору |
|
|||||
Регистрация: Feb 2010
Сообщений: 9
|
Скажу иначе, у меня есть 2 типизированых массива
var A:Vector.<Sprite> = new Vector.<Sprite>(); var B:Vector.<Object> = new Vector.<Object>(); Т.е функция add возьмет на себя работу определения нужного типа элементов и добавит нужное их число в массив. Ну или в более простом виде реализовать, типа как-нить так: |
|
|||||
Да, вы можете это реализовать с помощью того, что я описал выше.
|
|
|||||
Регистрация: Feb 2010
Сообщений: 9
|
Да, все получилось, спасибо!
Состряпал тут для наглядности, может ещё кому пригодится: 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. |
|
|||||
Если вам, на этапе компиляции, известен класс который необходимо создать, то все эти танцы с
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
А вам есть разница, писать
или ? в первом случае всё намного легче и быстрее, new NeedClass и всё). Для второго советую вместо (зачем, кстати, строку эту тягать весь цикл и кучу раз getDefinitionByName дёргать?) - нет мороки со строками, строки это не особо быстро всегда. Ну и вообще информацию о типах использовать не рекомендуют.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Может я что-то не понял, но не лучше ли в таком случае использовать Array?
Зачем тут Vector вообще? По-моему, все преимущества в скорости будут сведены на нет подобной хренью getDefinitionByName(getQualifiedClassName(NeedClass)) |
|
|||||
[+1 23.05.11]
Регистрация: 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, время: 18:20. |
|
« Предыдущая тема | Следующая тема » |
Теги |
array , Vector массив |
|
|