Итак, я делаю простую игру, используя DirectX 9 и C++. Я посмотрел на графический интерфейс SDK, но думаю, что могу реализовать что-то попроще.
Все, что мне нужно, это окна, метки, кнопки, текстовые поля и флажки.
Я создал базовый класс GUIObject, от которого все наследуются. Он включает в себя такие основы, как размер и фокус и еще много чего. Затем все производные классы, например GUILabel, определяют render(), update() и еще много чего.
Мой вопрос: как обрабатывать события, такие как клики? Я работал с GUILabel::Click(), определяя каждую возможность на основе значения текстового члена текущего экземпляра. Это казалось неправильным, и я понял, что каждая отдельная метка, которую нужно щелкнуть, должна быть определена в классе GUILabel. Я хотел бы переместить это в код каждого игрового состояния.
Итак, я кратко попытался заставить GUILabel::Click() принимать указатель на функцию в качестве аргумента. Но затем я понял, что мне нужно, чтобы метод члена класса состояния был статическим (на самом деле это невозможно, если только все в нем тоже не статично, верно?) или также передать ему класс GUIObject. Это путь?
Могу ли я определить производное от GUILabel (или кнопки, или чего-то еще) в игровом состоянии и просто переопределить нужные мне действия? И затем сделать это для любых элементов управления, которые мне нужны в этом состоянии?
Каков правильный способ реализации обработки событий?