通知 GUI 对象有关屏幕大小的信息 - 设计



我在为我创建的游戏设计类时遇到问题。

在我的应用程序中,有:

  • CGame包含有关游戏本身的所有信息,例如屏幕宽度、屏幕高度等。在main()函数 I创建指向CGame实例的指针。
  • CGUIObject,包括指定其位置和 draw()方法,它应该知道如何根据屏幕尺寸。
  • CGUIManager 这是一个单例,它包括一个列表 CGUIObject的。对于列表中的每个对象,它只调用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();
};

而主要的.cpp:

CGame* g;
int main()
{
   g = new CGame();
   while(1)
   {
      CGUIManager::Instance().drawObjects();
   }
   return 0;
}

现在的问题是,每个CGUIObject都需要知道CGame持有的屏幕尺寸,但我发现在每个对象中包含指向CGame实例的指针是非常愚蠢的。

任何人都可以告诉我实现这一目标的最佳方法是什么?

您是否

有理由需要CGUIObject的屏幕分辨率?

它们

已经有一个位置,所以如果你让它们在本地空间中绘制自己,你可以在你的CGUIManager中对它们应用变换,以便将它们布置出来。您可以通过这种方式从 GUI 对象本身抽象布局,并且对象不需要知道它们位于哪个容器中(屏幕、窗口、选项卡等)。

最新更新