Я пытался реализовать простую компонентную архитектуру игровых объектов, используя Objective-C, во многом по аналогии со статьей 'Evolve Your Hierarchy' Мика Уэста. С этой целью я успешно использовал некоторые идеи, изложенные в статье Майка Эша 'Пересылка сообщений Objective-C' , то есть используя метод -(id)forwardingTargetForSelector:
.
Базовая настройка: у меня есть контейнерный класс GameObject, который содержит три экземпляра классов компонентов в качестве переменных экземпляра: GCPosition, GCRigidBody и GCRendering. Метод -(id)forwardingTargetForSelector:
возвращает тот компонент, который ответит на соответствующий селектор, определенный с помощью метода -(BOOL)respondsToSelector:
.
Все это, в некотором смысле, работает как чудо: я могу вызвать метод в экземпляре GameObject, реализация которого находится в одном из компонентов, и он работает. Конечно, проблема в том, что компилятор выдает предупреждения «возможно, не отвечает ...» для каждого вызова. Теперь мой вопрос: как мне избежать этого? И особенно в том, что дело в том, что каждый экземпляр GameObject будет иметь свой набор компонентов? Может быть, способ регистрации методов с объектами-контейнерами для каждого объекта в отдельности? Например, могу ли я создать какой-нибудь метод -(void)registerMethodWithGameObject:
, и как бы я это сделал?
Теперь, это может быть или не быть очевидным, что я довольно новичок в Какао и Objective-C, и, в основном, просто шучу, и все это может быть очень чуждо здесь. Конечно, хотя мне бы очень хотелось узнать о решении моей конкретной проблемы, любой, кто захочет объяснить более изящный способ сделать это, также будет очень рад.
Очень ценится, -Bastiaan