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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.12.2010, 17:39
FlashWizard вне форума Посмотреть профиль Отправить личное сообщение для FlashWizard Найти все сообщения от FlashWizard
  № 1  
Ответить с цитированием
FlashWizard
[+1 22.06.11]
 
Аватар для FlashWizard

Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
По умолчанию Как Class превратить в String и наоборот

Нужно перевести тип Class в тип String.

Старый 21.12.2010, 17:46
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Возникает очевидный вопрос: зачем?
__________________
тонкий тролль, осеянный благодатью

Старый 21.12.2010, 17:47
FlashWizard вне форума Посмотреть профиль Отправить личное сообщение для FlashWizard Найти все сообщения от FlashWizard
  № 3  
Ответить с цитированием
FlashWizard
[+1 22.06.11]
 
Аватар для FlashWizard

Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
Ну у меня такие особенности программы

Старый 21.12.2010, 17:55
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Ладно, поставим вопрос иначе
Что вы намереваетесь делать с поулченной строкой, и почему нельзя передать ссылку на класс?
__________________
тонкий тролль, осеянный благодатью

Старый 21.12.2010, 18:04
FlashWizard вне форума Посмотреть профиль Отправить личное сообщение для FlashWizard Найти все сообщения от FlashWizard
  № 5  
Ответить с цитированием
FlashWizard
[+1 22.06.11]
 
Аватар для FlashWizard

Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
Мне надо сохранить её ). А потом загрузить и создать экземпляр того класса, который записан.

Добавлено через 4 минуты
Ладно, расскажу подробно. У меня здания. Конечно у каждого здания есть класс (Электростанция, Завод и тд). Я создаю экземпляры классов на сцене. То есть строю здания на карте. Мне нужно сохранить что у меня на карте, а потом загрузить.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Да пожалуйста =)
Код AS3:
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;
 
		}
 
	}
 
}
__________________
...вселенская грусть

Старый 21.12.2010, 18:52
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 7  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
FlashWizard, в вашем случае лучше сохранять тип объекта (завод, электростанция итд), а для воссоздания сделать фабрику, которая в зависимости от типа объекта будет создавать экземпляр нужного класса.

Вот пример: сайт подгружает данные, и в зависимости от типа данных (текст, музыка, видео, фотогаллерея) использует разные модули для их отображения.

Модуль (в вашем случае - объект на карте) создается следующим образом:
Код AS3:
this.contentModule	=	ModulesFactory.createModule(this.contentType, base, this.language);
contentType - это тип контента и по сути тип модуля. Может принимать одно из значений, описанных отдельно (след. блок кода). Остальные параметры передаются непосредственно в конструктор модуля.

Код AS3:
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
Ну и собственно сама фабрика:

Код AS3:
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.
Старый 22.12.2010, 14:28
FlashWizard вне форума Посмотреть профиль Отправить личное сообщение для FlashWizard Найти все сообщения от FlashWizard
  № 8  
Ответить с цитированием
FlashWizard
[+1 22.06.11]
 
Аватар для FlashWizard

Регистрация: Jun 2010
Адрес: г. Ташкент
Сообщений: 364
Чего-то я не понял. Как пользоваться всем этим ?
Что тут значит hash ?


Последний раз редактировалось FlashWizard; 22.12.2010 в 15:57.
Старый 22.12.2010, 23:11
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 9  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Как пользоваться:
1. Описать все имеющиеся типы объектов
2. Написать класс, который позволяет по типу объекта получить экземпляр нужного класса
3. Сохранять и загружать типы объектов, использовать созданный класс для получения нужных экземпляров

Hash - это хеш Он связывает типы объектов (строки) с соответствующими классами. В данном случае используется обычный Object, ключ - строка, значение - ссылка на класс.
__________________
тонкий тролль, осеянный благодатью

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
И зачем тут этот хеш?
__________________
...вселенская грусть

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

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

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


 


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


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