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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.02.2013, 13:24
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 1  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Question Приведение Class к конкретному классу

Начал мучать еще один вопрос

Есть некий базовый класс BaseBuilding, у которого есть статический метод
Код AS3:
public static function getIcon():Sprite
который возвращает иконку строения. Каждый класс наследник соотвественно этот статический метод переписывает.

Дальше, есть класс BuildMenu, который показывает окошко с этими иконками строений. Для этого у него есть массив с классами конкретных построек (ConcreteBuilding1, ConcreteBuilding2, ... etc).
Код AS3:
private var buildings:Array = [
                                          ConcreteBuilding1,
                                          ConcreteBuilding2,
                                          //...
                                          ];
При формировании сетки с иконками происходит примерно следующее
Код AS3:
for(var i:int = 0; i < buildings.lenght; i++)
{
    var BuildingClass:Class = buildings[i];
    var buildingIcon:Sprite = BuildingClass.getIcon();
    //...
}
так вот, проблема в том, что оно то конечно все сработает, но при этом код является «ненадежным», потому что я не могу «гарантировать», что статический метод вызовется именно у класса наследника BaseBuilding.

Несколько слов о том, зачем это вообще мне надо.
-Во-первых это удобно, когда не нужно создавать для каждой иконки свой отдельный класс.
-Во-вторых, оттуда же, выбрав постройку, я могу отправить класс объекту, который будет создавать постройки на карте, например:

при клике на иконку:
Код AS3:
Ground.build(ConcreteBuilding1);
реализация:
Код AS3:
public static function build(BuildingClass:Class):void
{
   var building:BaseBuilding = new BuildingClass(param);
   //...
}
и опять таки здесь тоже было бы неплохо решить задачу о том, чтобы сделать указание на то, что класс должен быть наследником BaseBuilding, чтобы гарантировать, к примеру, возможность передачи ему в конструктор параметров.

Вобщем такой вот вопросец: возможно ли привести Class к типу BaseClass, так чтобы он продолжал быть обектом-классом? Или может быть вообще есть решение лучше чем заниматься такой морокой?

Старый 20.02.2013, 13:14
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 2  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
что такое у вас ConcreteBuilding1 etc?
почему нельзя работать на уровне экземпляров, а не классов?
сделайте модельки ваших строений. которые содержат ссылки на нужные вам данные..тип модели в этом случае будет всего один и ничего ни к чему приводить не надо будет.
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Какую тему закрыть, эту или эту?
__________________
Reality.getBounds(this);

Старый 20.02.2013, 17:57
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 4  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
Цитата:
Сообщение от Wolsh Посмотреть сообщение
Какую тему закрыть, эту или эту?
обе закрывайте, не ошибётесь. Всёравно ни в одной из них ничего интересного почитать нету

Старый 21.02.2013, 21:49
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 5  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Извиняюсь за задержку, закрывайте эту, ту еще сейчас почитаю )

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

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

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


 


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


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