CEGUI初学者指南2——装载数据文件和初始化

来源:互联网 发布:饥荒玩偶淘宝 编辑:程序博客网 时间:2024/05/03 12:17

装载数据文件和初始化的初学者指南

From CEGUIWiki


1 概览:数据文件和ResourceProvider
1.1 资源的提供 – 什么是ResourceProvider?
1.2 XML, XSD? 都是XML!
1.3 数据文件
1.3.1 图片集
1.3.2 字体
1.3.3 Scheme
1.3.4 布局
1.3.5 配置
2 装载基本文件
3 简单的默认初始化
4 结论
 


1 概览:数据文件和ResourceProvider

    CEGUI使用一些数据文件的变体,这可能会导致一些混淆的发生。因此首先介绍数据文件是什么,它们用来干什么,怎么在CEGUI中装载。


1.1 资源的提供 – 什么是ResourceProvider?

    CEGUI使用一个叫做ResourceProvider的帮助对象。这个对象提供一个CEGUI核心库和外部文件装载系统的接口。例如Ogre和Irrlicht引擎使用他们自己的资源管理器、文件装载子系统:通过实现和提供一个专门化的ResourceProvider对象,这些引擎的渲染器实现了以上系统的“无缝”整合,因此CEGUI数据文件是通过这些系统装载的。

    Direct3D和OpenGL默认情况下没有使用专门话的ResourceProvider,这些系统默认从应用程序的当前路径装载所有资源文件。因此这些文件必须和同一个文件夹相关,但是他们彼此毫无关系,这个很重要。


1.2 XML, XSD? 都是XML!

    除了图形文件和可装载模块文件(.dll/.so等等),所有CEGUI使用的数据文件都是XML。这儿出现了第一个障碍:如何使用schema(.xsd)文件。

    默认情况下,CEGUI使用Xerces-C++来处理带有schema验证的XML文件。(关于XSD文件的介绍略)。CEGUI有一些XSD在cegui_mk2/XMLRefSchema/ 目录下。必须记住的是xsd文件是ResourceProvider系统所必须的,你可以在要装载的xml文件目录下放置一个合适的.xsd文件。


1.3 数据文件

    数据文件常常不是以.xml结尾的,尽管它们都是xml文件。它们通常根据文件内容定义,例如.imageset是Imageset的xml配置文件,.font是字体的xml配置文件,等等。下面是对每种数据文件的简要介绍。


1.3.1 图片集Imageset

    Imageset只是原图形/纹理文件某个区域的定义(Imageset定义时将会指定区域)。每个定义的区域都有一个唯一的名字,并且在系统内被认为是一个Image。Image是Imageset中一个基本的元素。如果想要更改CEGUI画出的图形,可以更改原图形/纹理文件,或者更改image的定义区域。


1.3.2 字体

    可以定义两种类型的字体供CEGUI使用动态字体    基于true-type(.ttf)的字体文件静态字体    一个位图字体,这种字体基于一个定义了Images的Imageset。


1.3.3 Scheme

    Schema是把零碎的数据文件组合起来的一种方法。 它也是装载和注册widget类型的最简便的方法。一个Schema可以包含以下一个或者多个类型的定义(这些文件描述的资源可以在schema被装载时装载)。

  • Imageset
  • Font
  • Window Set
  • Window Alias

    Imageset和font在前面已经提到过。一个Window Set指定了可装载模块(.dll/.so, 等等)的名字。
    Widgets集包含了你希望注册的模块集。(注,根据网上的资料,widgets类似于windows的themes)
    Window或者widget类型可以有多个名字,Windows Alias提供了这一机制。我们也可以通过这种机制使一个widget"隐藏"另一个已经注册了的widget。(有点象c++的隐藏?)


1.3.4 布局layout

    布局文件包含了一个窗口布局的信息,它也是xml格式的。其中每个'window'元素定义了被创建的window或者widet,'Property'元素定义每个window的属性值。


1.3.5 配置

    CEGUI支持配置文件。可以通过这个文件设定一些默认值,例如使用哪个Scheme,哪个布局,哪个脚本文件(在使用SriptMoudle时)等等


2 装载基本文件

    要跑起一个CEGUI的示例,至少必须有以下文件。

  • Imageset
  • Font
  • Scheme

    Scheme文件的好处在于它可以用来自动装载其他两个数据文件。在CEGUI的样例schemes中只有Imageset而没有Font。下面我们来装载一个scheme文件和font文件。如下:

// load in the scheme file, which auto-loads the TaharezLook imageset
CEGUI::SchemeManager::getSingleton().loadScheme(“../datafiles/schemes/TaharezLook.scheme”);
// load in a font.  The first font loaded automatically becomes the default font.
CEGUI::FontManager::getSingleton().createFont(“../datafiles/fonts/Commonwealth-10.font”);

    在上面的代码中,我们假设'datafiles'目录存在,并且位于当前目录的上层目录中,其中包含了cegui_mk2/Samples/datafiles中的所有文件。

    Oger用户注意:要使用没有被编辑过的样例数据文件,你必须确保当前工作目录被oger资源管理器中设定为资源路径(可以通过resources.cfg设定)。或者你可以添加所有数据文件子目录并且删去数据文件中的所有相对路径信息。这样做是因为它们必须在默认的ResourceProvider下和D3D/OpenGL一起工作,就像前面讨论的那样。


3 简单的默认初始化

    最后,你需要设定一些默认值。这保证了在window或者widget中没有指定特定的主题时系统总是可以有一个可用的字体和鼠标图标。

    在现实中,我们没有必要指定一个默认字体,因为FontManager总是会自动设置第一个装载的字体为默认的。但如果这不是你要的默认字体,你可以再设定一个你想要的默认字体。设置默认字体的代码如下:

System::getSingleton().setDefaultFont(“Commonwealth-10”);

    另一个需要设置的默认对象就是鼠标图标了。在你没有定义当鼠标移到某个元素上的图标时,鼠标不会消失。设定默认鼠标图标的代码如下:(使用上面和scheme一起装载的TaharezLook imageset)

System::getSingleton().setDefaultMouseCursor(“TaharezLook”, “MouseArrow”);


4 结论

    我们学习了一些基本数据文件,它们怎么装载,CEGUI的需要的最小初始化数据文件等等。其他文章会讨论每种数据文件的细节。

 

原创粉丝点击