我使用过的所有GUI系统都涉及一个处理布局,输入和渲染的规范化基本窗口小部件对象。由于我一直在用C ++创建游戏GUI,我发现专门研究每个小部件的角色,这样每个小部件只处理布局,输入或渲染,使代码更具组合性,灵活性和组织性。
然而,随着我进一步扩展这种范式,它开始突然爆发,我试图找到规范化和专业化小部件之间的最佳位置。我的主要困难是我无法找到这个GUI模型的先例。
[编辑]
以下是传统GUI模型的代码示例:
var button = new Widget()
button.width = 100
button.height = 30
button.set_fill(FILL_COLOR)
button.set_border(BORDER_COLOR, BORDER_SIZE)
button.click(()=> submit())
button.text = "Submit"
以下是专用GUI模型的代码示例:
var button = new Box()
button.width = 100
button.height = 30
button.add(new Fill(FILL_COLOR))
button.add(new Border(BORDER_COLOR, BORDER_SIZE))
button.add(new Clickable(()=> respond_to_click())
button.add(new Text("Submit"))
第一个模型依赖于包含许多常见GUI功能的大型基类,而第二个模型则将这些功能分解为最小的类。对于专门的方法,Box类只关注布局,而像Fill和Clickable这样的类除了继承父级的边界之外没有布局逻辑。
答案 0 :(得分:1)
在某些方面,您可以将其视为component-based architecture,这在视频游戏中更受欢迎。这里的想法是,单独的“组件”需要不同的工作,并且通常会附加到根“GameObject”之类的东西上。从这个意义上讲,“按钮”可能甚至不能正确存在,而是“控制” - 但几乎没有顶级逻辑。然后,您只需添加组件即可组成工作对象。基于组件的体系结构不一定是GUI特定的,但它似乎与您提供的代码片段非常匹配。
好消息是,有很多关于基于组件的架构的书面文章,因此您将能够利用它来评估可能的优势和劣势。祝你好运!