|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Проверить на принадлежность к классу
Друзья, ещё маленький частный вопрос к вам.
У меня в механизме проверки условий обращения идут по строковым идентификаторам, которые совпадают с геттерами проверяемого объекта. Например, имея массив условий на выполнение действия, записанный в формате {owner, propID, value}, нам для проверки достаточно установить owner-а, чтобы потом обратиться owner[propID] и сравнить полученный результат с value. Вопрос, как проверить самого owner-a на принадлежность к тому или иному наследнику класса? И как записать это в массиве условий, подобно тому, как в моём примере выше? Спасибо.
__________________
Не сломано - не чини! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вообще не понял вопроса.
Цитата:
2. не достаточно, чтобы класс был "правильным". Нужно еще, чтобы propID был существующим. Если owner — экземпляр, то проверить класс можно if (owner is EnemySoldier) {}. Но owner может быть и "статическим" классом? Надеюсь нет.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
protected function checkOwner(ownerID: String) : Character { switch(ownerID) { case IDs.STATUS_ATTACKER: return attacker; // Проверка по строковому ID и возврат экземпляра персонажа case IDs.STATUS_DEFENDER: return defender; } Цитата:
не выходит. В этом и вопрос.
__________________
Не сломано - не чини! |
|
|||||
Тоже не понял. Ты имеешь ввиду это?
__________________
while(live()) { hope(); } |
|
|||||
Следующий шаг начать писать цепочки вызывов функций в конфигах. Очень интересно как автор рефакторит код? А ведь можно было сразу использовать что-то типа https://github.com/mayakwd/as3-vanilla-ice
__________________
местонахождение |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Цитата:
СлаваRa, автор - зелёный новичок, который пытается реализовать давнюю мечту - написать игру, простите за пафос. А что смущает? Что я делаю не так? Поясни.
__________________
Не сломано - не чини! |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
(рабочий код)): var owner:Sprite = new Sprite(); var ownerClass:Class = getDefinitionByName("flash.display.Sprite") as Class; trace(owner is ownerClass); — А что смущает? Ну, как бы, трудно рефакторить такую Лондонскую Библиотеку. Компилятор понятия не имеет о том, что ты делаешь, ибо ты оперируешь строками а не классами и их свойствами и методами до последнего момента вызова — но и там нетипизированный доступ и компилятор возвращается ни с чем. "Расходимся". Причем, всю эту непроверяемую компилятором кучу текста ты используешь, "чтобы ничего не забыть и не ошибиться". Когнитивный диссонанс настигает здесь.
__________________
Reality.getBounds(this); |
|
|||||
Открой для себя интерфейсы. Очень полезная штука
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
|
Wolsh, спасибо за код. Разобрался.
Цитата:
Цитата:
А как ещё хранить ссылки на те или иные свойства объекта, кроме как строковой константой?
__________________
Не сломано - не чини! |
|
|||||
Цитата:
// класс применяющий интерфейс public class Character extends Sprite implements ICheckable { public function Character() { } // применяем свойство из интерфейса public function get hasForce():Boolean { return true; } } // сам интерфейс public interface ICheckable { function get hasForce():Boolean; } // какой-то менеджер, которому нужно проверить есть ли у объекта свойство hasForce public function setSomeObject(object:*):void { if (object is ICheckable) { var checkable:ICheckable = object as ICheckable; trace(checkable.hasForce); // 100% у этого объекта будет нужное свойство } } Плюс интерфейсов в том, что их можно применить к любому классу. Допустим ты можешь легко применить один и тот же интерфейс и к наледнику Sprite и Sound или еще чего-то. И по типу интерфейса они будут одинаковы
__________________
Ко мне можно и нужно обращаться на ты) |
Часовой пояс GMT +4, время: 04:41. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|