我在为我创建的游戏设计类时遇到问题。
在我的应用程序中,有:
- 类
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 对象本身抽象布局,并且对象不需要知道它们位于哪个容器中(屏幕、窗口、选项卡等)。