盖莫游戏引擎-GUI系统-布局管理器
2012-10-16 12:27
337 查看
盖莫游戏引擎-GUI系统-布局管理器
GUI系统 布局管理器1.布局管理器存在的理由:可以避免手动或者逐个调整控件位置
2.布局管理器的基本功能:调整同一容器下同一层次下各个控件的位置
3.布局管理器的基本接口:
A.控件加入
B.控件移除
C.控件排列
4.布局管理器和控件的关系
A.一个布局管理器负责1个或则多个控件的排列
B.具有控件容器语义的控件(例如面板)持有一个布局管理器
5.合适调用布局管理之布局?
A.持有的控件尺寸变化,移动或者用户显示的调用之时
6.可能的布局管理器类型
A>流式,中央布局,盒子,复杂类型,...
7.简单的布局管理器接口
///////////////////////////////////////////////////////////
/// UI布局信息基类
///////////////////////////////////////////////////////////
class UILayoutInfo
{
public:
UILayoutInfo(){}
virtual ~UILayoutInfo(){}
public:
virtual engine_string GetLayouttType()const = 0;
};
///////////////////////////////////////////////////////////
/// 定义UI布局管理器基类
///////////////////////////////////////////////////////////
class UILayouter
{
public:
UILayouter(){}
virtual ~UILayouter(){}
public:
////////////////////////////////////////////////////////
/// 增加一个窗体到布局管理区
////////////////////////////////////////////////////////
virtual UILayouter& AddWidget(Widget* widget) = 0;
virtual UILayouter& AddWidget(Widget* widget,const UILayoutInfo&)
{
AddWidget(widget);
return *this;
}
////////////////////////////////////////////////////////
/// 控件移除和重新排列
////////////////////////////////////////////////////////
virtual UILayouter& RemoveWidget(Widget* widget) = 0;
virtual UILayouter& Arrange(Widget* parent) = 0;
};
所有类型的布局管理器都需要继承于UILayouter
其成员函数Arrange负责调配parent控件下的所有控件单元.
需要说明的是当容器控件加入一个新的控件的时候,其布局管理器就会调用AddWidget负责把新的控件加入布局管理器对象
举一个UI面板的例子:
////////////////////////////////////////////////////////////
/// UI面板(容器)
////////////////////////////////////////////////////////////
class G_DLL_API Panel : public Widget
{
public:
Panel(const Rectf& rect,Widget* parent,const engine_string& text = "Panel");
virtual ~Panel();
public:
////////////////////////////////////////////////////////
/// 加入一个子窗体
////////////////////////////////////////////////////////
Panel& AddChildWidget(Widget* widget)
{
windows_.push_back(widget);
layouter_->AddWidget(widget);
return *this;
}
Panel& AddChildWidget(Widget* widget,const UILayoutInfo& info)
{
windows_.push_back(widget);
layouter_->AddWidget(widget,info);
return *this;
}
////////////////////////////////////////////////////////
/// 控件移除
////////////////////////////////////////////////////////
Panel& RemoveChildWidget(Widget* widget)
{
windows_.remove(widget);
layouter_->RemoveWidget(widget);
return *this;
}
////////////////////////////////////////////////////////
/// 控件排列
////////////////////////////////////////////////////////
Panel& ArrangeChildren()
{
layouter_->Arrange(this);
return *this;
}
////////////////////////////////////////////////////////
/// 加载布局管理器
////////////////////////////////////////////////////////
Panel& SetLayouter(UILayouter* layouter);
在我设计的时候主要参考了2个GUI库,glooey,opengl gui lib
目前商业上使用的开源CEGUI过于复杂 比很多游戏引擎都大 让人难以容忍
相关文章推荐
- /LGC设计模式/从游戏引擎看 GUI 系统
- atitit ui引擎之道 游戏引擎之道.docx 1. 概念 2 1.1. (cocos,createjs,dom) 2 2. 游戏引擎的构成(图形引擎(渲染系统),控件部件系统,事件系统 ,布局
- JAVA图形界面(GUI)之布局管理器
- 游戏引擎架构选摘之第五章 游戏支持系统
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理--旧的动画系统)
- 幻世(OurDream)2D图形引擎使用教程13——GUI图形用户界面系统(1)
- #笔记#圣思园 JavaSE 第76讲——GUI,AWT组件,布局管理器
- JavaSE学习55:GUI编程之布局管理器
- Atitit 游戏引擎---物理系统(1)------爆炸效果
- Java基本功练习十七GUI(图形用户界面基础【基本概念及其使用、三种布局管理器实现同样的框架练习】)
- 基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
- Java GUI编程的几种常用布局管理器
- 游戏引擎中的相机系统
- 【Cocos2d-x游戏引擎开发笔记(4)】系统动画
- 盖莫游戏引擎2.1.2功能测试-环境映射
- java -- GUI程序设计之基于布局管理器的布局
- java -- GUI程序设计之无布局管理器布局
- 游戏引擎/GUI的设计与实现-序
- Atitit 游戏引擎---物理系统(1)------爆炸效果
- 游戏引擎基础(六)(声音系统,音频APIs)