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

时间:2012-11-21 13:30:49

标签: c++ oop design-patterns game-engine

我为我创建的游戏设计课程时遇到了问题。

在我的应用中,有:

  • class CGame,其中包含有关游戏本身的所有信息, 例如屏幕宽度,屏幕高度等。main()功能I 创建指向CGame实例的指针。
  • class 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();
};

和main.cpp:

CGame* g;

int main()
{
   g = new CGame();

   while(1)
   {
      CGUIManager::Instance().drawObjects();
   }

   return 0;
}

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

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

1 个答案:

答案 0 :(得分:1)

是否有理由要求CGUIObject的屏幕分辨率?

他们已经有了一个位置,所以如果你让他们在当地空间画画,你可以在你的CGUIManager中对他们进行变换以便将它们展开。您可以通过这种方式从GUI对象本身抽象布局,并且对象不需要知道它们所在的容器(屏幕,窗口,选项卡等)。