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

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

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

Регистрация: Nov 2007
Сообщений: 183
По умолчанию Проверка типа данных

Всем добрый день!

Есть вот такой код:

Код AS3:
if(data is ImageData) {				
	sprite = new Image(ImageData(data));						
}else if(data is TextBoxData) {
	sprite = new TextBox(TextBoxData(data));
} else if(data is ShapeData) {
	sprite = new ShapeSprite(ShapeData(data));
}else if(data is SpriteData){				
	sprite = SpriteData(data).getSpriteInstance();
}else {
trace("DisplayItem.createDiasplayElement(data)>> unknown data type!!!");
				return;
}
	this.admitSprite(sprite);
и впринципе рабочий. но есть одно "НО", которое мне не нравится.
ImageData, TextBoxData, ShapeData - все наследуются от SpriteData
И поэтому если код будет немного другого порядка:
Код AS3:
if(data is ImageData) {				
 sprite = new Image(ImageData(data));
}else if(data is SpriteData){				
	sprite = SpriteData(data).getSpriteInstance()				
}else if(data is TextBoxData) {
	sprite = new TextBox(TextBoxData(data));
} else if(data is ShapeData) {
	sprite = new ShapeSprite(ShapeData(data));
 
}else {
	trace("DisplayItem.createDiasplayElement(data)>> unknown data type!!!");
				return;
}
 this.admitSprite(sprite);
Ниже этого
else if(data is SpriteData){
sprite = SpriteData(data).getSpriteInstance();

ничего не отработает

Как в таком случае быть? Может кто подскажет?

Старый 11.02.2010, 17:26
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 2  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
заведите в SpriteData метод
Код AS3:
 getSpriteInstance():Sprite
в каждом наследнике переопределите этот метод так как надо
напрмер в
TextBox


Код AS3:
public function getSpriteInstance():Sprite
{
return  new TextBox(this);
}
тогда весь ваш код будет выглядеь так
Код AS3:
if (data is SpriteData)
{
sprite:Sprite = data.getSpriteInstance();
this.admitSprite(sprite);
}
else {
	trace("DisplayItem.createDiasplayElement(data)>> unknown data type!!!");
				return;
}
__________________
Отряд Котовскага

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

Регистрация: Nov 2007
Сообщений: 183
Спасибо!
Хороший ход. И код в ф-и короче

Точнее в SpriteData и был такой метод
Только вод в других что то не сообразил переписать


Последний раз редактировалось Doctor76; 11.02.2010 в 17:49.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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