我已经做了许多不同的单独部分的GUI系统的遊戏机,像个按钮和文本框和选择盒,但我需要的一种方式含有这些类中的一个Gui类,这样,我可以借鉴的一切到屏幕上的所有一次,检查所有的按钮在一次检查,如果任何被挤压。我的问题是什么是最好的方式组织的所有类(例如按钮和文本框)进入一个GUI类?

这里的一种方法我想的,但它似乎不正确的:

编辑: 我使用C++。

class Gui {
    public:
        void update_all();
        void draw_all() const;
        int add_button(Button *button); // Returns button id
        void remove_button(int button_id);
    private:
        Button *buttons[10];
        int num_buttons;
}

这个代码中有一些问题,但我只是想让你知道我想要什么。

有帮助吗?

解决方案

这个问题是非常相似的一个我要去后,只有我是索尼的PSP编程。

我一直在玩弄的东西的同时,我征询了一些书籍和 限流继, 和迄今为止,这是一个粗略的想法的一个简单的用户界面系统。

class uiElement()
{
    ...
    virtual void Update() = 0;
    virtual void Draw() = 0;
    ...
}

class uiButton() public : uiElement
{
    ...
    virtual void Update();
    virtual void Draw();
    ...
}

class uiTextbox() public : uiElement
{
    ...
    virtual void Update();
    virtual void Draw();
    ...
}

... // Other ui Elements

class uiWindow()
{
    ...
    void Update();
    void Draw();

    void AddElement(uiElement *Element);
    void RemoveElement(uiElement *Element);

    std::list <uiElement*> Elements;

    ...
}

void uiWindow::Update()
{
    ...
    for (list <uiElement*>::iterator it = Elements.begin(); it != Elements.end(); it++ )
        it->Update();
    ...
}

void uiWindow::Draw()
{
    ...
    for (list <uiElement*>::iterator it = Elements.begin(); it != Elements.end(); it++ )
        it->Draw();
    ...
}

这类是创建一个窗口和发球进攻ui要素,并呼吁绘制和更新方法从各自的主要职能。

我没有什么工作呢,因为我有问题的绘画代码。与不同的Api上电脑和PSP,我看到一些包装码照片和其他区。

希望这会有所帮助。

thing2k

其他提示

任何人感兴趣,这是我的开放源,BSD许可GUI的工具包,为DS:

http://www.sourceforge.net/projects/woopsi

thing2k的答案是不错的,但我会认真推荐具有代码包含儿童UI元素的基础。级。这是我跟在Woopsi.

如果你 不不 支持这一基类中,你会碰到的主要问题,当你试图实施任何东西复杂得多,一个文本框和一个按钮。例如:

  • 签吧可以仿效为多个按钮一起组合成一个单一的父UI元素,强制执行相互排斥的选择;
  • 无线电按钮组(同上);
  • 滚动条可表示为一个滑动/排水沟元和上/下按钮;
  • 滚动的名单可以表示作为一个容器和多种选项的用户界面元素。

此外,这是值得记住的是,DS有66MHz CPU和4M RAM,这是用来储存程序和执行(DS光盘载入RAM之前,他们均运行)。你真的应该把它作为一个嵌入式系统,这意味着STL。我删除了STL从Woopsi和管理,以节约0.5兆。不是很多的桌面标准,但是这是1/8DS总可用的存储的消耗通过STL垃圾。

我已经详细的整个过程中编写的用户界面在我的博客:

http://ant.simianzombie.com/blog

它包括描述的两种算法,我想到了重新划分为的画面,这是最棘手的部分创造一个GUI(一个分裂的矩形,并记得可见的地区;其他使用BSP树,这是更加高效和更容易理解),对于优化,等等。

一个有用的战略,铭记可能的 复合物的图案.在一个低水平,它可能会让你把所有的GUI对象(并且收藏的物体)较容易一旦建成。但我不知道有什么参与GUI框架的设计,这样一个地方找到一般的灵感的源代码中的现有项目。 个函数库和二进制文 是一个交叉平台GUI框架,来源。好运与你的项目!

我想看看其他方式GUI工具包已经完成,这将是一个良好的开端。C++的例子,我听到许多好的事情 夸脱.我没有用过它的个人。当然,个函数库和二进制文尼克提及。

我已经写了一个非常简单的图形用户界面,就像你建议。我已经在运行Windows、Linux和Macintosh。它应当港口相对较容易的任何系统一样的PSP或DS。

它的开放源,LGPL而是在这里:

http://code.google.com/p/kgui/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top