У меня проблема с разработкой классов для моей игры, которую я создаю.
В моем приложении есть:
CGame
которая содержит всю информацию о самой игре,main()
функция ICGame
пример.CGUIObject
который включает в себя поля, указывающие его положение иdraw()
метод, который должен знать, как нарисовать объект в соответствии сCGUIManager
который является единственным и включает в себя списокCGUIObject
«S. Для каждого объекта в списке это просто вызывает draw()
Для ясности, я поставлю простой код:
class CGame
{
int screenWidth;
int screenHeight;
};
class CGUIObject
{
CPoint position;
void draw(); // this one needs to know what is a screen's width and height
};
class CGUIManager // it's a singleton
{
vector<CGUIObject*> guiObjects;
void drawObjects();
};
И main.cpp:
CGame* g;
int main()
{
g = new CGame();
while(1)
{
CGUIManager::Instance().drawObjects();
}
return 0;
}
Теперь проблема в том, что каждый CGUIObject
должен знать размер экрана, который удерживается CGame
но я нахожу очень глупым указатель на CGame
экземпляр в каждом объекте.
Может ли кто-нибудь, пожалуйста, сказать мне, что было бы лучшим подходом для достижения этой цели?
Есть ли причина, по которой вам нужно разрешение экрана в вашем CGUIObject
«S?
У них уже есть позиция, поэтому, если они у вас нарисованы в локальном пространстве, вы можете применить к ним преобразование в своем CGUIManager
чтобы выложить их. Таким образом вы абстрагируете свой макет от самих объектов GUI, и объектам не нужно знать, в каком контейнере они находятся (экран, окно, вкладка и т. Д.).
Других решений пока нет …