События c ++ GUI / Дизайн сообщений - PullRequest
2 голосов
/ 18 июня 2011

Итак, я делаю простую игру, используя DirectX 9 и C ++. Я посмотрел на графический интерфейс SDK, но думаю, что смогу реализовать что-то более простое.

Все, что мне нужно, - это окна, метки, кнопки, текстовые поля и флажки.

Я создал базовый класс GUIObject, от которого все наследуют. Он включает в себя основы, такие как размер и фокус и еще много чего. Затем производные классы, например GUILabel, все определяют render (), update () и еще много чего.

У меня вопрос, как обрабатывать события, такие как клики? Я работал с GUILabel :: Click (), определяя каждую возможность на основе значения текстового члена текущего экземпляра. Это было неправильно, и я понял, что каждый ярлык, который нужно щелкнуть, должен быть определен в классе GUILabel. Я хотел бы перенести это в код каждого игрового состояния.

Итак, я кратко попытался заставить GUILabel :: Click () взять указатель на функцию в качестве аргумента. Но затем я понял, что мне нужно иметь статический метод члена класса состояния (это не очень возможно, если только все в нем не статично, верно?) Или также передать ему класс GUIObject. Это путь?

Могу ли я определить происхождение GUILabel (или кнопки, или еще чего-нибудь) в игровом состоянии и просто переопределить все необходимые мне действия? И затем сделать это для того контроля, который мне нужен в этом состоянии?

Как правильно реализовать обработку событий?

Ответы [ 2 ]

3 голосов
/ 18 июня 2011

Возможно, вы захотите использовать библиотеку сигналов, такую ​​как boost::signals, чтобы дать вам гибкость в определении интерфейса между вашими объектами GUI и базовыми событиями, которые будут вызывать каждый обратный вызов.Это также может пригодиться для обратной связи, когда вам нужны элементы GUI, такие как индикаторы состояния и т. Д., Чтобы реагировать на лежащие в основе события.

1 голос
/ 18 июня 2011

Для обратных вызовов / событий щелчка я бы пошел с boost :: function / boost :: bind. В моей GUI-структуре у меня было два разных абстрактных класса InputHandler и Renderable для обработки касаний и рендеринга. Это приводит к разработке, в которой компоненты, которые не должны быть активируемыми (например, UILabel), не должны реализовывать бесполезные методы.

НТН, Alex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...