通知 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 对象有关屏幕大小的信息 - 设计的主要内容,如果未能解决你的问题,请参考以下文章

高分辨率屏幕上的 PyQt GUI 大小

Flutter firebase 通知点击打开一个屏幕

API 设计:缓存“部分”嵌套对象

Python Tkinter未检测到用于GUI大小调整的正确屏幕分辨率

仪表和中控车机GUI界面开发工具介绍

用于应用审查的 iPad Pro 屏幕截图大小