学习CEGUI

CEGUI()

       CEGUI(Crazy Eddie’s GUI http://www.cegui.org.uk )是一套开源的使用C++开发的游戏界面库, 基于LGPL协议. 它能减少游戏开发中繁琐而大量的UI开发工作量. 现有很多游戏开发都会利用或者是借鉴它.

       在学习了解CEGUI之前, 先把CEGUI源代码的环境搭建起来. CEGUI使用了几套开源库Freetype(http://sourceforge.net/projects/freetype),  Glut(http://www.opengl.org/resources/libraries/glut), Xerces(http://xml.apache.org). 更全的信息资料大家可以去相应的网站上面了解. 下载相关库或者源代码后, 先在IDE中设置好, 那么就可以先编译CEGUI.

注意在使用freetype库时, CEGUIBASE工程链接会报错,提示为CEGUIBase error LNK2001: 无法解析的外部符号 _otv_module_class. 解决方法是在Freetype工程中打开ftmodule.h文件, FT_USE_MODULE(otv_module_class)这句代码注释掉,然后重新编译既可.

   在运行CEGUI自带的例子时, 需要设置一下工作路径. 因为例子中一些相关的配置,资源文件路径都是使用了相对路径, 如不设置工作路径, 会无法运行DEMO.

       首先运行一下最简单的DEMO,叫Sample_FirstWindow工程,里面的代码很简单,并且有大量的注释。关键的逻辑代码全在initialiseSample()函数中,看下来后可以发现,这里初始化所有UI资源,如图片,字体。

 

 

CEGUI(二)

       例子已经有过基本了解了,那么首先来分析一下CEGUI的资源配置文件。例子的资源都放在sample/datafiles文件夹下。可以发现文件下面包含了各种图片,字体,脚本及其相应的配置文件。

    以各种控件的图片为例,这种资源放在imagesets子文件夹下面,进入后大家可以看见里面有一个imageset.xsd文件,还有一些tga图片和一些后辍为imageset的文件。先打开imageset.xsd文件,可以发现内容全是XML格式的,这里其实定义了一些属性说明,但这些属性是谁在用呢?打开TaharezLook.imageset的文件看看,可以发现其中的秘密。Imageset文件中子结点的名字跟xsd文件中属性定义是相对应的。例如xsd文件的一个结点内容为:

<xsd:complexType name="ImageType">

    <xsd:attribute name="Name" type="xsd:string" use="required"/>

    <xsd:attribute name="XPos" type="xsd:nonNegativeInteger" use="required"/>

    <xsd:attribute name="YPos" type="xsd:nonNegativeInteger" use="required"/>

    <xsd:attribute name="Width" type="xsd:nonNegativeInteger" use="required"/>

    <xsd:attribute name="Height" type="xsd:nonNegativeInteger" use="required"/>

    <xsd:attribute name="XOffset" type="xsd:integer" use="optional" default="0"/>

    <xsd:attribute name="YOffset" type="xsd:integer" use="optional" default="0"/>

</xsd:complexType>

TaharezLook.imageset文件图片资源结点描述为:

<Image Name="ButtonRightNormal" XPos="96" YPos="20" Width="12" Height="16" />

 

ImageType是图片资源描述的结点,它包含的属性像Name, XPos这些都定义在xsd文件中结点为属性name=”ImageType”中,可以发现这里对应关系的。打开相应的TaharezLook.tga文件,可以发现里面是一些控件图片资源,而它对应的位置在TaharezLook.imageset中定义了。CEGUI的资源管理会根据xsd文件内容取得imageset文件中的内容结构,而imageset文件会告诉资源管理从tga文件中取到相应的图片纹理资源。感觉配置文件是有点多,但这样非常灵活,能根据不同需求定义不同的控件属性,按自己的方式制作纹理资源。

    再看看其它的资源及相应的配置文件,像字体。可以发现跟图片纹理的做法是一样的。如果自己要使用它,明白了配置文件定义方式,很容易把相应的文件改成自己需要的。很方便的把CEGUI加入到自己的工程中应用,也不会给开发人员添加很大的麻烦。

 

 

CEGUI(三)

    怎样把CEGUI应用到我们自己的工程中去呢?首先从CEGUI自带的例子Sample_FirstWindow分析,这个工程只有一个类,叫做Sample_FirstWindow, 它是从CEGuiSample父类派生而来。里面只有一个函数,叫InitialiseSample(),界面的初始化全部在这。追踪到最里面,会发现CEGuiD3D9BaseApplication, Win32AppHelp两个类,跟系统窗体和DX联系的都在这里面处理了。

    明白原理了,那么做个测试,把CEGUI添加到一个DX工程中来。步骤分为以下几步:

1.  CEGUI的头文件,资源文件(datafiles文件夹),库文件(注意包含freetype2, xerecs, glut)全部复制到工程下面

2.  在工程中把头文件添加进来,并设置好路径,引用lib

3.  在相应的代码中添加好CEGUI的代码,就是初始化,渲染,消息处理。具体代码可以参考一下例子

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CEGUI(Crazy Eddie’s GUI http://www.cegui.org.uk)是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。 CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。另外,使用更高级的图形库也是可以的,比如OGRE、Irrlicht和RenderWare等,关键需求可以简化为二点: 纹理(Texture)的支持直接写屏(RHW的顶点格式、正交投影、或者使用shader实现) 本书截止日时,CEGUI的最新版本是0.6.0(本书的讨论也是基于此版本),本书光盘提供了SDK和全部源码的下载。 除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor和ImageSet编辑器,以方便UI和图像集的制作。作为界面编辑器,它需要系统级界面以提供编辑器操作,0.3.0版是基于MFC实现的;而在0.4.0版本以后,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见http://www.wxwidgets.org)实现。 目前将CEGUI作为游戏界面库开发的游戏已经有好多种,国内的天龙八部,巨人等游戏就是很好的例子。 CEGUI的功能是非常强大的,而且使用也非常的灵活,可以和脚本配合。可以通过配置文件自定义窗口外观。通过布局文件实现窗口布局等等特性,使得游戏的界面开发更加方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值