![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 22.06.11]
Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
|
Нужно перевести тип Class в тип String.
|
|
|||||
|
[+1 22.06.11]
Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
|
Ну у меня такие особенности программы
|
|
|||||
|
[+1 22.06.11]
Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
|
Мне надо сохранить её ). А потом загрузить и создать экземпляр того класса, который записан.
Добавлено через 4 минуты Ладно, расскажу подробно. У меня здания. Конечно у каждого здания есть класс (Электростанция, Завод и тд). Я создаю экземпляры классов на сцене. То есть строю здания на карте. Мне нужно сохранить что у меня на карте, а потом загрузить. |
|
|||||
|
Да пожалуйста =)
package utils { import flash.system.ApplicationDomain; import flash.utils.getQualifiedClassName; /** * Утилитные функции для работы с классами * * @author gloomyBrain */ public final class ClassUtil { /** * Функция возвращает ссылку на класс по его имени и ApplicationDomain с описанием * * @param className Имя искомого класса * @param domain ApplicationDomain, в котором следует искать описание класса */ public function getClassReference(className:String, domain:ApplicationDomain = null):Class { if (!domain) domain = ApplicationDomain.currentDomain; if (!domain.hasDefinition(className)) throw new Error("Класс не найден: " + className); return domain.getDefinition(className) as Class; } /** * Функция возвращает экземпляр необходимого класса * * @param className Имя класса, экземпляр которого необходимо получить * @param domain ApplicationDomain, в котором следует искать описание класа * @param ...args Параметры, которые необходимо передать в конструктор (до 10 параметров) * * @return Экземпляр тербуемого класса, созданный с заданными параметрами */ public static function getClassInstance(className:String, domain:ApplicationDomain = null, ...args):Object { var ClassRef:Class = ClassUtil.getClassReference(className, domain); if (!args || args.length == 0) return new ClassRef(); switch (args.length) { case 1: return new ClassRef(args[0]); break; case 2: return new ClassRef(args[0], args[1]); break; case 3: return new ClassRef(args[0], args[1], args[2]); break; case 4: return new ClassRef(args[0], args[1], args[2], args[3]); break; case 5: return new ClassRef(args[0], args[1], args[2], args[3], args[4]); break; case 6: return new ClassRef(args[0], args[1], args[2], args[3], args[4], args[5]); break; case 7: return new ClassRef(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); break; case 8: return new ClassRef(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); break; case 9: return new ClassRef(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]); break; case 10: return new ClassRef(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]); break; default: throw new ArgumentError("Слишком много параметров передано в конструктор " + className); break; } } /** * Получает имя класс для заданного объекта * * @param target Объект, для которого необходимо получить имя класса * @return Строка с имененем класса */ public static function getClassName(target:Object):String { var fullClassName:String = getQualifiedClassName(target); var index:int = fullClassName.indexOf("::"); if (index != -1) return fullClassName.substr(index + 2); return fullClassName; } } }
__________________
...вселенская грусть |
|
|||||
|
strange mood
|
FlashWizard, в вашем случае лучше сохранять тип объекта (завод, электростанция итд), а для воссоздания сделать фабрику, которая в зависимости от типа объекта будет создавать экземпляр нужного класса.
Вот пример: сайт подгружает данные, и в зависимости от типа данных (текст, музыка, видео, фотогаллерея) использует разные модули для их отображения. Модуль (в вашем случае - объект на карте) создается следующим образом: contentType - это тип контента и по сути тип модуля. Может принимать одно из значений, описанных отдельно (след. блок кода). Остальные параметры передаются непосредственно в конструктор модуля. package ru.stardust.pages.contentpage{ /** * @author Gaen */ public class ContentTypes{ //===================================================================== // // Public props // //===================================================================== public static const TEXT :String = 'text'; public static const MUSIC :String = 'music'; public static const PHOTOS :String = 'photos'; public static const VIDEO :String = 'video'; //------------------------------------ // // Constructor // //------------------------------------ public function ContentTypes(){ throw new Error('Static class!'); }//ContentTypes }//class }//package package ru.stardust.pages.contentpage{ import ru.stardust.pages.contentpage.modules.*; /** * @author Gaen */ public class ModulesFactory{ //===================================================================== // // Public props // //===================================================================== // Nothing here //===================================================================== // // Private props // //===================================================================== private static var hash :Object; //===================================================================== // // Public methods // //===================================================================== //------------------------------------ // // Constructor // //------------------------------------ public function ModulesFactory(){ throw new Error('Static class!'); }//ModulesFactory public static function createModule(contentType:String, base:String, language:String):ContentModule{ if(!hash) initHash(); if(!hash[contentType]) throw new Error('No module for content type "' + contentType + '"'); return new hash[contentType](base, language); }//createModule //===================================================================== // // Private methods // //===================================================================== private static function initHash(){ hash = {}; hash[ContentTypes.TEXT] = TextModule; hash[ContentTypes.PHOTOS] = PhotosModule; hash[ContentTypes.MUSIC] = MusicModule; hash[ContentTypes.VIDEO] = VideoModule; }//initHash }//class }//package
__________________
тонкий тролль, осеянный благодатью Последний раз редактировалось Gaen; 21.12.2010 в 18:58. |
|
|||||
|
[+1 22.06.11]
Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
|
Чего-то я не понял. Как пользоваться всем этим ?
Что тут значит hash ? Последний раз редактировалось FlashWizard; 22.12.2010 в 15:57. |
|
|||||
|
strange mood
|
Как пользоваться:
1. Описать все имеющиеся типы объектов 2. Написать класс, который позволяет по типу объекта получить экземпляр нужного класса 3. Сохранять и загружать типы объектов, использовать созданный класс для получения нужных экземпляров Hash - это хеш Он связывает типы объектов (строки) с соответствующими классами. В данном случае используется обычный Object, ключ - строка, значение - ссылка на класс.
__________________
тонкий тролль, осеянный благодатью |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|