cegui 3
数据文件的装载和初始化
目前已经学习了CEGUI的渲染入门 和 资源管理入门,下一步要学习装载数据文件了.只有装载了数据文件,
CEGUI才会产生想要的输出..
数据文件概述
CEGUI使用多种类型的数据文件.
xml xsd? 都是xml
CEGUI使用的大多说文件都是xml格式的,除了那些特殊的图片以及可以装载的模块文件(DLL),说到这里
大家可能会想到那个特殊的.xsd文件. 尽管现在CEGUI的默认xml解析库是Expat XML解析库,可是CEGUI
以前一直使用的是Xerces-C++库作为她的xml解析库.Crazy Eddies 本人也更喜欢这个库,这个库的优势
是它提供模式验证(schema validation).通过模式验证,我们可以在解析期间检测输入文件是否包含需要的
数据以及数据是否正确的设置.系统需要一个额外的文件才可以做到这个.他们就是以.xsd作为后缀的模式文件
CEGUI的模式文件存放在cgui_mk2/XMLRefSchema/目录下.目前,对于.xsd文件,你只需知道,当把Xerce-C++
用作xml解析器的时候,必须让ResourceProvider系统可以找到他们.要做到这一点很简单那,只需要设置一个资源组,
把此资源组关联到一个包含.xsd文件的文件夹,并把这个资源组设置为CEGUI::XeracesParser装载.xsd文件是
所使用的资源组.
数据文件
为了清晰的说明数据文件代表什么类型的资源.数据文件并不是都是以.xml作为后缀,而是以更有意义的后缀名.比如
Imageset的后缀名是.imageset,Font的后缀.font等等
Imageset
为了效率,通常我们把材质文件等图片组合成到一个大的材质图片,在使用的时候在上面截取
各个小的材质.而这个Imageset就是保存各个小材质在整个源图片的区域信息的.源图片也在
里面指定了,每个区域都有一个独一无二的名字,当提到他名字的时候,系统就把他当作图片处理.
所以 ,可以说Imageset定义了一系列图片,通过修改Imageset中的源图片名,各个区域的位置
和大小,就可以轻松的改变所绘制的GUI的外观了.
Font
显然是定义了CEGUI使用的字体. 所能定义的字体类型有2种
FreeType Font
这是一种基于true-type (.ttf)的字体文件.从CEGUI 0.5.0开始,在.font文件中用Type ="FreeType"
指定这种字体类型,在更早的版本中,用"Dynamic"指定.
Pixmap Font
位图字体. 这种字体基于一个定义了文字图片的Imageset.从CEGUI0.5.0 开始,在.font文件中
使用Type =" Pixmap"指定该字体,在更早的版本中,使用"Static"指定.
Scheme
该文件是把其他数据文件联系到一起的主要手段,同时他也是装载和定义各种控件最方便的方法.
一个Scheme文件可以把下面的一个或者多个文件.
(当Scheme文件被载入的时候,他所包含的文件也被载入并且初始化)
Imageset
Font
WindowSet
WindowRendererSet
WindowAlias
FalagardMapping
WindowSet 主要用来指明一个可载入的模块 .dll .so等.并列出他所使用的控件中你想注册的
控件的名字.如果没有列出任何空间名,那么模块中的所有控件都将被注册.
WindowAlias
提供通过别名可以指定一个窗口/空间类型的方法.用此方法,也可以使用另一个控件类型来"替代"
一个已经注册的空间类型,这样就达到了隐藏已注册控件的效果.
WindowRendererSet
指明一个可载入模块(.dll等)的名字,并列出它所使用的窗口渲染器(window renderer)中你想注册的窗口渲染器的名字。如果没有列出任何窗口渲染器名,那么模块中所有的窗口渲染器都将被注册。“窗口渲染器”是一个可以控制基本窗口类型渲染的东西。所有的窗口渲染器都是利用'Falagard'蒙皮系统进行渲染的(尽管这不是非常必须的)。
FalagardMapping
用来创建一个可用的WindowType类型,包含3个部分.
TargetType --指定基类(具有相关的功能);Renderer----指定窗口渲染器
(可以控制渲染指定的TargetType)
LookNFeel --指定要使用的皮肤(
一般这个它们是通过XML格式的looknfeel文件指定)
Layout
文件用xml格式描述了一个窗口的布局. 每个镶嵌的"Window"元素定义一个想要创建的窗口或者
控件,"Property"元素为每个定义的窗口设置相关属性.
Config
CEGUI文件支持使用配置文i件. 这个文件允许你定义一些默认参数,比如默认载入的Scheme,
默认载入的Layout文件.初始化和终止脚本,以及其他没有提到的东西.
载入基本的文件
为了成功的显示CEGUI,你需要载入一些文件,至少是下面这些
Imageset Font Scheme
值得高兴的是,Scehme文件可以自动的载入其他的2个文件,基于教程的目的,我们将载入
一个Scheme文件和一个font文件 ------Scheme文件会自动帮我们载入一个Imageset文件.
code:
//load Scheme ,他自动load TaharezLook imageset
CEGUI::SchemeManger::GetSingleton().loadScheme(
"TaharezLook.scheme");
载入font文件 .第一个被载入的字体文件将自动成为默认字体.
if(!CEGUI::FontManger::GetSingleton().isFontPresent(
"Commonwealth-10") )
CEGUI::FontManger::GetSingleton().createFont(
"Commonwealth-10");
上面的代码假设资源组以及默认资源组都按照资源管理入门中描述的方法设置好了.
简单的默认设置
最后需要设置一些默认值,这么做是为了确保系统总是用可用的字体和鼠标指针,以防止某个窗口
或者控件没有特别设置他自己的字体和鼠标指针.
实际上 我们不需要指定一个默认字体,因为FontManager会自动的设置第一个被载入的字体作为
默认字体,如果他不是你想要的默认字体.你可设置为其他的. 设置的代码如下:
System::getSingleton().setDefaultFont(
"Commonwealth-10");
- System::getSingleton().setDefaultMouseCursor(
- "TaharezLook", "MouseArrow" );
如果你打算用工具提示,则需要指明你想用的基于ToolTip的控件类型名。尽管通常情况下是不需要这么做的,这也超出了这个基础教程的范围,其实可以在每个窗口基础上设置它。设置工具提示窗口类型代码如下:
- System::getSingleton().setDefaultToolTip( "TaharezLook/Tooltip" );
总结
目前,我们已经讨论了关于CEGUI所用的数据文件最基础的东西:它们是什么,它们是怎样被载入的,以及最少要做的初始化工作。以后将要对每种数据文件类型做深入的讨论,发掘关于它们更高级的用法。