![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 183
|
Всем здравствуйте! Мне на ум ничего толкового не приходит. может кто подскажет как грамотно сделать.
Попробую объяснить. Есть некий массив данных Допустим такой: Все они наследуются от ShapeData Нужна функция, которая возвращает определенный объект Shape в зависимости от типа DataShape я написал вот такую: public static function getShapeByData(_data : ShapeData) : Shape { if(_data as ShapeData1) return new Shape1(_data); if(_data as ShapeData2) return new Shape2(_data); if(_data as ShapeData3) return new Shape3(_data); ....................................... return new Shape(_data); } Как бы четко определить, что некая ShapeData именно ShapeData1 или ShapeData3, независимо от их порядка проверки в функции (не зависимо от их наследования). Или еще может какой выход есть. Я перелопатил весь форум, нашел только getQualifiedSuperclassName(value:*):String но он название класса с пекеджем выдает. Это нужно получается еще эту строку обрезать от него, что бы к примеру создать в зависимости от названии ShapeData Если конечно нет другого выхода, наверно так сделаю. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
я так понимаю речь идет о:
public static function cloneShapeData( shapeData:ShapeData ):Shape { return (new (shapeData as Object).constructor( shapeData )) as Shape; } Если да, то лучше заведите метод clone() в классе ShapeData, а в наследуемых переопределяйте его
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 183
|
Если честно, не понял. Запись мудреная.
Добавлено через 1 час 14 минут И где вот эта функция должна быть написана: public static function cloneShapeData( shapeData:ShapeData ):Shape { return (new (shapeData as Object).constructor( shapeData )) as Shape; } Что то типа: Но я не хотел что бы ShapeData еще заведовала тем, что создовала какой то конкретный объект Последний раз редактировалось Doctor76; 22.02.2011 в 21:36. |
|
|||||
package { import flash.display.MovieClip; import flash.utils.setInterval; public class Main extends MovieClip { public function Main() { setInterval(sortShapes, 100); } public function sortShapes():void{ var shapeData : ShapeData = getRandomShapeData(); switch(shapeData.getClass()){ case ShapeData: trace("this is ShapeData!"); break; case ShapeData2: trace("this is ShapeData2!"); break; case ShapeData3: trace("this is ShapeData3!"); break; } } public function getRandomShapeData():ShapeData{ var classes : Array = [ShapeData, ShapeData2, ShapeData3]; var classIdx : int = Math.random()*classes.length; return new classes[classIdx]; } } } package { import flash.utils.getQualifiedClassName; import flash.display.Sprite; import flash.utils.getDefinitionByName; public class ShapeData extends Sprite { public function ShapeData() { } public function getClass():Class { return getDefinitionByName(getQualifiedClassName(this)) as Class; } } } package { public class ShapeData2 extends ShapeData { public function ShapeData2() { // constructor code } } }
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
|
Wolsh-овский метод, кроме того, что проще, так еще и быстрее на ~11%
Прошу извинить за нубство и пользоваться им.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 183
|
Спасибо всем за помощь.
Wolsh-овский метод работает! Последний раз редактировалось Doctor76; 24.02.2011 в 11:43. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
ChuwY, ого, getDefinitionByName + getQualifiedClassName — это по-самурайски.
|
|
|||||
|
Вырезать гланды через уши -- наш метод =D
Я был пьян и было ночь. Я и так краснею. Не надо больше пинать морально =D
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ" Мои ачивки: художник-паразит. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|