通知 GUI 对象有关屏幕大小的信息 - 设计
Posted
技术标签:
【中文标题】通知 GUI 对象有关屏幕大小的信息 - 设计【英文标题】:Informing GUI objects about screen size - Designing 【发布时间】:2012-11-09 18:30:38 【问题描述】:我在为自己创建的游戏设计类时遇到问题。
在我的应用中,有:
类CGame
包含游戏本身的所有信息,
例如屏幕宽度、屏幕高度等在main()
函数中我
创建一个指向CGame
实例的指针。
类CGUIObject
,其中包括指定其位置的字段和
draw()
方法,它应该知道如何根据
屏幕尺寸。
class 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】:您的CGUIObject
需要您的屏幕分辨率有什么原因吗?
他们已经有了一个位置,所以如果你让他们在本地空间中绘制自己,你可以在你的CGUIManager
中对他们应用一个变换来布置它们。您可以通过这种方式从 GUI 对象本身中抽象出您的布局,并且对象不需要知道它们所在的容器(屏幕、窗口、选项卡等)。
【讨论】:
以上是关于通知 GUI 对象有关屏幕大小的信息 - 设计的主要内容,如果未能解决你的问题,请参考以下文章