【CEGUI】CEGUI入门篇之数据文件及默认初始化(三)

以下内容翻译自http://static.cegui.org.uk/docs/0.8.7/datafile_tutorial.html

开始之前需要了解CEGUI Render和System的创建及ResourceProvider的用法,不懂的请参考“CEGUI入门篇之初始化(一)”和“CEGUI入门篇之使用ResourceProvider加载资源(二)”。

1、简介

CEGUI使用了许多不同类型的数据文件,至少在初始化时可能会感到困惑,这些文件到底是什么东西,它们之间有什么关系,一些系统级别的默认设置,这里将对这些内容作个说明,描述这些数据文件的用法。

2、一切都是xml

在CEGUI中,Font、Imageset、LookNFeel、Scheme、XSD都是xml文件,不过也有几个例外,如图像文件、脚本文件、lib库文件等,下面介绍XSD。

使用Xerces-C++进行schema校验——

CEGUI中xml文件的解析模块默认为Expat,但也支持其它的xml解析模块如Apache Software Foundation的Xerces-C++,这个库的优点是提供了schema校验功能,以保证xml文件格式正确,为此我们需要提供schema文件,即CEGUI中名字以.xsd为扩展的文件,供ResouceProvider使用,最好是设置资源组,相关用法可参照“CEGUI入门篇之使用ResourceProvider加载资源(二)”。建议CEGUI开发者使用Xerces-C++进行开发和测试,避免不良xml文件的流入,最后软件部署阶段可转换为其它轻量级的xml解析模块。

3、数据文件

正如前面提到的,CEGUI中不多数的数据文件是基于xml的,这些xml文件并不以.xml为后缀,而是根据数据文件的类型进行设置,如Imageset数据文件的后缀为.imageset,Font数据文件的后缀为.font,这种后缀命名方法虽不是强制的,但可读性更好。下面介绍不同类型的数据文件。

Imageset——

Imageset是一系列图片或纹理的集合,包括若干Image,它们都有自己的名字。在xml文件中,根元素为Imageset,包括若干Image子元素,Imageset的属性包括version(资源文件都应该设置这个属性,当前版本为2)、name(必选)、imagefile(必选)、resourceGroup(可选)、autoScaled(可选,支持vertical、horizontal、min、max、true、false,默认false)、nativeHorzRes(可选,默认640)、nativeVertRes(可选,默认480),Image的属性包括name(必选)、xPos(必选)、yPos(必选)、width(必选)、height(必选)、xOffset(可选,默认0)、yOffset(可选,默认0)。Imageset的详细用法可参考http://static.cegui.org.uk/docs/0.8.7/xml_imageset.html,下面是一个简单的例子(DriveIcons.imageset):

<?xml version="1.0"?>
<Imageset version="2" name="DriveIcons" imagefile="DriveIcons.png" nativeHorzRes="800" nativeVertRes="600" autoScaled="vertical">
    <Image name="Artic" xPos="1" yPos="1" width="62" height="54" />
    <Image name="Lime" xPos="64" yPos="1" width="62" height="54" />
    <Image name="Sunset" xPos="127" yPos="1" width="62" height="54" />
    <Image name="Black" xPos="190" yPos="1" width="62" height="54" />
    <Image name="Blue" xPos="1" yPos="58" width="62" height="54" />
    <Image name="Silver" xPos="65" yPos="58" width="62" height="54" />
    <Image name="DriveStack" xPos="128" yPos="57" width="62" height="54" />
    <Image name="GreenCandy" xPos="192" yPos="57" width="62" height="54" />
    <Image name="GlobalDrive" xPos="1" yPos="114" width="62" height="54" />
</Imageset>

Font——

Font即CEGUI中使用的字体,包括两种类型,FreeTypeFont和PixmapFont,前者使用标准的.ttf字体文件,对字体进行动态渲染,后者使用Imageset,包括了与字体对应的位图。在xml文件中,根元素为Font,字体类型为PixmapFont还包括若干Mapping子元素,Font的属性包括version(资源文件都应该设置这个属性,当前版本为3)、type(FreeType或Pixmap)、name(必选)、filename(根据type选择对应的imageset或ttf)、resourceGroup(可选)、size(可选,用于FreeTypeFont,默认12)、antiAlias(可选,用于FreeTypeFont,默认true)、autoScaled(可选,支持vertical、horizontal、min、max、true、false,默认false)、nativeHorzRes(可选,默认640)、nativeVertRes(可选,默认480),lineSpacing(可选,用于FreeTypeFont,默认0),Mapping的属性包括codepoint(必选)、image(必选)、horzAdvance(可选,默认-1)。Font的详细用法可参考http://static.cegui.org.uk/docs/0.8.7/xml_font.html,下面是一个字体类型为FreeTypeFont的例子(Batang-18.font):

<?xml version="1.0" ?>
<Font version="3" name="Batang-18" filename="batang.ttf" type="FreeType" size="18" nativeHorzRes="1280" nativeVertRes="720" autoScaled="vertical"/>

LookNFeel——

LookNFeel是CEGUI皮肤系统的主要部分,在xml文件中,根元素为Falagard(CEGUI皮肤系统),包括若干WidgetLook子元素,具体用法可参考http://static.cegui.org.uk/docs/0.8.7/fal_man.html

Scheme——

Scheme用于组合所有的资源文件,在xml文件中,根元素为GUIScheme,子元素包括Imageset、Font、LookNFeel、WindowSet、WindowRendererSet、WindowAlias、FalagardMapping。GUIScheme的属性包括version(资源文件都应该设置这个属性,当前版本为5)、name(必选)。FalagardMapping的属性包括windowType(必选)、targetType(必选)、renderer(必选)、lookNFeel(必选)、renderEffect(可选)。Font的属性包括name(可选)、filename(必选)、resourceGroup(可选)。Imageset的属性包括name(可选)、filename(必选)、resourceGroup(可选)。ImagesetFromImage的属性包括name(可选)、filename(必选)、resourceGroup(可选)。LookNFeel的属性包括filename(必选)、resourceGroup(可选)。WindowAlias的属性包括alias(必选)、target(必选)。WindowFactory的属性包括name(必选)。WindowRendererFactory的属性包括name(必选)。WindowRendererSet的属性包括filename(必选)。WindowSet的属性包括filename(必选)。Scheme的详细用法可参考http://static.cegui.org.uk/docs/0.8.7/xml_scheme.html,下面是一个简单的例子(GameMenu.scheme):

<?xml version="1.0" ?>
<GUIScheme version="5" name="GameMenu">
    <Imageset filename="GameMenu.imageset" />
    <Font filename="Jura-10.font" />
    <Font filename="Jura-13.font" />
    <Font filename="Jura-18.font" />
    <LookNFeel filename="GameMenu.looknfeel" />
    <WindowRendererSet filename="CEGUICoreWindowRendererSet" />

    <FalagardMapping windowType="GameMenu/Editbox" targetType="CEGUI/Editbox" renderer="Core/Editbox" lookNFeel="GameMenu/Editbox" />
    </GUIScheme>

Layout——

Layout即Window布局,可设置属性以及绑定事件。在xml文件中,根元素为GUILayout,只能包含一个Window子元素。GUILayout的属性包括version(资源文件都应该设置这个属性,当前版本为4)。Window的属性包括type(必选)、name(可选),Window可嵌套使用,作为GUILayout、Window、AutoWindow的子元素,Window的子元素有一定的顺序,依次是LayoutImport、Property、Event、Window和/或AutoWindow,最后还可以是Property。Property的属性包括name(必选)、value(可选,省略时使用文本内容)。Event的属性包括name(必选)、function(必选)。LayoutImport的属性包括filename(必选)、resourceGroup(必选)。AutoWindow的属性包括namePath(必选),AutoWindow可嵌套使用,作为Window、AutoWindow的子元素,AutoWindow的子元素有一定的顺序,依次是LayoutImport、Property、Event、Window和/或AutoWindow,最后还可以是Property。Layout的详细用法可参考http://static.cegui.org.uk/docs/0.8.7/xml_layout.html,下面是一个简单的例子(application_templates.layout):

<?xml version="1.0" encoding="UTF-8"?>

<GUILayout version="4" >
    <Window type="DefaultWindow" name="DefaultWindow" >
        <Property name="Area" value="{{0,0},{0,0},{1,0},{1,0}}" />
        <Property name="MaxSize" value="{{1,0},{1,0}}" />
        <Window type="TaharezLook/FrameWindow" name="FrameWindow" >
            <Property name="Area" value="{{0.3,0},{0.3,0},{0.7,0},{0.7,0}}" />
            <Property name="Text" value="Demo Window" />
            <Window type="TaharezLook/Button" name="Button" >
                <Property name="Area" value="{{1,-160},{1,-43},{1,-15},{1,-11}}" />
                <Property name="Text" value="DemoButton" />
            </Window>
            <Window type="TaharezLook/Editbox" name="Editbox" >
                <Property name="Area" value="{{0,10},{0,8},{1,-10},{0,40}}" />
            </Window>
        </Window>
    </Window>
</GUILayout>

Config——

Config可以配置系统默认资源及ScriptModule中的脚本文件,在xml文件中,根元素为CEGUIConfig,没有属性,其子元素包括Logging、AutoLoad、ResourceDirectory、DefaultResourceGroup、Scripting、DefaultXMLParser、DefaultImageCodec、DefaultFont、DefaultMouseCursor、DefaultTootip、DefaultGUISheet,具体用法可参考http://static.cegui.org.uk/docs/0.8.7/xml_config.html

4、加载资源

为了CEGUI程序的正常运行,需要加载一些必备资源,包括Imageset、Font、LookNFeel和Scheme,其中Scheme组合了其它资源,可以帮我们自动加载其它资源文件。下面的例子加载了scheme和font,前提是关联了资源组与目录并设置了默认资源组,资源组相关介绍可参照“CEGUI入门篇之使用ResourceProvider加载资源(二)”。

// create (load) the TaharezLook scheme file
// (this auto-loads the TaharezLook looknfeel and imageset files)
CEGUI::SchemeManager::getSingleton().createFromFile( "TaharezLook.scheme" );
// create (load) a font.
// The first font loaded automatically becomes the default font, but note
// that the scheme might have already loaded a font, so there may already
// be a default set - if we want the "DejaVuSans-10" font to definitely
// be the default, we should set the default explicitly afterwards.
CEGUI::FontManager::getSingleton().createFromFile( "DejaVuSans-10.font" );

5、系统默认初始化

最后,还需要为CEGUI系统设置一些默认选项,以保证window或widget没有设置font、mouse cursor时,有默认的font、mouse cursor可以使用。FontManager自动设置第一个加载的font为系统默认font,如果这个font不是我们想要的默认font或者难以保证font的加载顺序,就需要显式地设置默认font,如下所示:

CEGUI::System::getSingleton().getDefaultGUIContext().setDefaultFont( "DejaVuSans-10" );

另一个需要设置的对象是mouse cursor,方法如下:

CEGUI::System::getSingleton().getDefaultGUIContext().
    getMouseCursor().setDefaultImage( "TaharezLook/MouseArrow" );

如果使用了Tootip,还要设置Tootip的类型,如下:

CEGUI::System::getSingleton().getDefaultGUIContext().
    setDefaultTooltipType( "TaharezLook/Tooltip" );
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值