Информирование объектов GUI о размере экрана — Проектирование

У меня проблема с разработкой классов для моей игры, которую я создаю.

В моем приложении есть:

  • учебный класс CGame которая содержит всю информацию о самой игре,
    например ширина экрана, высота экрана и т. д. main() функция I
    создать указатель на CGame пример.
  • учебный класс 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 экземпляр в каждом объекте.

Может ли кто-нибудь, пожалуйста, сказать мне, что было бы лучшим подходом для достижения этой цели?

1

Решение

Есть ли причина, по которой вам нужно разрешение экрана в вашем CGUIObject«S?

У них уже есть позиция, поэтому, если они у вас нарисованы в локальном пространстве, вы можете применить к ним преобразование в своем CGUIManager чтобы выложить их. Таким образом вы абстрагируете свой макет от самих объектов GUI, и объектам не нужно знать, в каком контейнере они находятся (экран, окно, вкладка и т. Д.).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]