当前位置: 代码迷 >> 综合 >> CEGUI 使用方法 三
  详细解决方案

CEGUI 使用方法 三

热度:66   发布时间:2024-01-21 21:26:43.0

装载数据文件和初始化入门

 

Ok。目前你已经学习了 CEGUI渲染入门 和 资源管理入门,下一步就要开始学习装载数据文件了。只有装载了相关数据文件,CEGUI才会产生想要的输出!

 

数据文件概述

CEGUI使用多种类型的数据文件。刚开始学的时候,可能搞不清:它们是什么,它们之间怎样联系以及它们怎样被载入。所以,我决定先介绍一下这些数据文件:它们是什么,它们将被用来干什么以及它们是如何被载入CEGUI的。


XML, XSD?都是XML!
CEGUI所使用的数据文件绝大多数都是XML格式的,除了那些特殊的图片文件(.tag等)以及可载入模块文件(DLL等)。说到这里大家可能会想到那个特殊的.xsd文件。

尽管现在CEGUI的默认XML解析库是Expat XML解析库,可是CEGUI以前一直用Xerces-C++库作为它的默认XML解析库,Crazy Eddies本人也更喜欢这个库。这个库的优势是它提供模式验证(schema validation)。通过模式验证,我们可以在解析期间检测输入的文件是否包含需要的数据以及数据是否被正确的设置。系统需要一些额外的文件才能做这个,它们就是以.xsd作为后缀的模式文件 -- CEGUI的模式文件存放在cegui_mk2/XMLRefSchema/目录下。目前,对于.xsd文件,你只需知道:当把Xerce-C++用作XML解析器的时候,必须让ResourceProvider系统能够找到它们。要做到这点很简单,只需设置一个资源组,把此资源组关联到一个包含相关.xsd文件的文件夹,并把这个资源组设置为CEGUI::XercesParser装载.xsd文件时所使用的默认资源组。(相关方法参看 资源管理入门)


数据文件
正如前面提到的,CEGUI所用的数据文件除了少数的特殊情况外都是XML格式的。但是,为了清晰的说明数据文件代表什么类型的资源,数据文件并不是以“.xml”作为后缀,而是用更有意义的后缀名。比如,Imageset的后缀名是.imageset,Font的后缀名是.font,等等。下面将对每种文件类型做个简要的说明,以后将对它们进行更深入的讨论。

 

Imageset
这么说吧,通常,为了提到效率,我们需要把材质等图片组合成一个大的材质图片。在使用的时候就需要在它上面截取得到各个小材质。而这个Imageset就是保存各个小材质在整张源图片上的区域信息(源图片同样在Imageset中指定了)。每个区域信息都有一个独一无二的名字,当提到它们的名字的时候,系统就把它们当作图片处理。所以,也可以说Imageset中定义了一系列的图片。通过修改Imageset中的源图片名、各个小区域的位置和大小,就可以很轻松的改变所画GUI的外观。

 

Font
显而易见,Font文件定义了CEGUI使用的字体。所能定义的字体类型有两种:

 

FreeType Font
这是一种基于true-type(.ttf)的字体文件。从CEGUI 0.5.0开始,在.font文件中用Type="FreeType"指定这种字体类型。在更早的版本中,用"Dynamic"指定。

 

Pixmap Font
这种字体就是众所周知的位图字体,这种字体基于一个定义了文字图片的Imageset。从CEGUI 0.5.0开始,在.font文件中用Type="Pixmap"指定此字体。在更早的版本中,用"Static"指定。

 

Scheme
Scheme文件是把其他数据文件联系到一起的主要手段,同时它也是装载和定义各种控件最方便的方法。一个Scheme文件可以包含下面的一种或多种文件(当Scheme被载入的时候,它所包含的文件也将被载入并初始化):

* Imageset (either a full Imageset via XML, or a single image via an image file)
* Font
* WindowSet
* WindowRendererSet
* WindowAlias
* FalagardMapping

 

Imageset and Font
它们已经被提到过了。这里列出来仅仅为了说明scheme可以包含它们。


WindowSet 主要用来指明一个可载入模块(.dll,.so等)的名字,并列出它所使用的控件中你想注册的控件的名字。如果没有列出任何控件名,那么模块中所有的控件都将被注册。

 

WindowRendererSet
指明一个可载入模块(.dll等)的名字,并列出它所使用的窗口渲染器(window renderer)中你想注册的窗口渲染器的名字。如果没有列出任何窗口渲染器名,那么模块中所有的窗口渲染器都将被注册。“窗口渲染器”是一个可以控制基本窗口类型渲染的东西。所有的窗口渲染器都是利用'Falagard'蒙皮系统进行渲染的(尽管这不是非常必须的)。

 

WindowAlias
提供通过别名指定一个窗口/控件类型的方法。用此方法,也可以用另一个控件类型来“替代”一个已经注册的控件类型,这样就达到隐藏已注册控件的效果。

 

FalagardMapping
用来创建一个可用的WindowType类型。包含三个部分:TargetType --- 指定基类(具有相关功能);Renderer --- 指定窗口渲染器(可以控制渲染指定的TargetType);LookNFeel --- 指定要使用的皮肤(一般这个它们是通过XML格式的looknfeel文件指定)。


Layout
Layout文件用XML格式描述一个窗口的布局。每个镶嵌的“Window”元素定义一个要创建的窗口或控件,“Property”元素为每个定义的窗口设置相关属性。

 

Config
CEGUI支持使用配置文件。这个文件允许你定义一些默认参数,比如:默认载入的Scheme,默认载入的Layout,初始化和终止脚本文件(ScriptModule中使用),以及其他没有提到的东西。

 

载入基本的文件

为了成功显示GUI,你需要载入一些文件。至少要载入下面这些:

* Imageset
* Font
* Scheme

值得高兴的是,Scheme文件能自动的载入其他两个文件。介于本教程的目的,我们将载入一个scheme文件和一个font文件 --- scheme文件自动帮我们载入一个Imageset文件。代码如下:

// 载入scheme文件,它将自动载入TaharezLook imageset  
CEGUI::SchemeManager::getSingleton().loadScheme(   
                        "TaharezLook.scheme" );  
 
// 载入font文件。第一个被载入的字体文件将自动成为默认字体。  
if(! CEGUI::FontManager::getSingleton().isFontPresent(   
                        "Commonwealth-10" ) )  
  CEGUI::FontManager::getSingleton().createFont(   
                        "Commonwealth-10.font" ); 

// 载入scheme文件,它将自动载入TaharezLook imageset
CEGUI::SchemeManager::getSingleton().loadScheme(
      "TaharezLook.scheme" );

// 载入font文件。第一个被载入的字体文件将自动成为默认字体。
if(! CEGUI::FontManager::getSingleton().isFontPresent(
      "Commonwealth-10" ) )
  CEGUI::FontManager::getSingleton().createFont(
        "Commonwealth-10.font" );

上面的代码假设资源组以及默认资源组都按照资源管理入门中描述的方法设置完了。

 

简单的默认设置

最后,你需要设置一些默认值。这么做是为了确保系统总是有可用的字体和鼠标指针,以防某个窗口或控件没有特别设置它自己的字体和鼠标指针。

实际上,我们不再需要指定一个默认字体,因为FontManager会自动的设置第一个被载入的字体为默认字体。如果它不是你想要的默认字体,你可以设置为其他的。设置的代码如下:
System::getSingleton().setDefaultFont( "Commonwealth-10" ); 

System::getSingleton().setDefaultFont( "Commonwealth-10" );

另一个你需要设置默认值的是鼠标指针。这么做是为了确保当鼠标位于那些没有设置指针的控件上时不至于消失。设置默认鼠标指针的代码如下(本示例使用由上面的scheme载入的TaharezLook imageset): System::getSingleton().setDefaultMouseCursor(   
                                "TaharezLook", "MouseArrow" ); 

System::getSingleton().setDefaultMouseCursor( "TaharezLook", "MouseArrow" );

如果你打算用工具提示,则需要指明你想用的基于ToolTip的控件类型名。尽管通常情况下是不需要这么做的,这也超出了这个基础教程的范围,其实可以在每个窗口基础上设置它。设置工具提示窗口类型代码如下:
System::getSingleton().setDefaultToolTip( "TaharezLook/Tooltip" ); 

System::getSingleton().setDefaultToolTip( "TaharezLook/Tooltip" );

 

总结

目前,我们已经讨论了关于CEGUI所用的数据文件最基础的东西:它们是什么,它们是怎样被载入的,以及最少要做的初始化工作。以后将要对每种数据文件类型做深入的讨论,发掘关于它们更高级的用法。


原文作者:CrazyEddie
原作日期:Not Given
原文地址:The Beginner Guide to Loading Data Files and Initialisation
翻 译 者:天外|OutSky
翻译日期:2008-09-29 19:54

以前,我曾幻想自己做所有东西,包括游戏GUI。现在,我才发现这种想法多么幼稚。更体会到开源精神的伟大!


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pepper6681747/archive/2008/10/26/3151289.aspx