CEGUI-专用游戏界面开发库

CEGUI-专用游戏界面开发库
转载请注明原帖地址:http://www.unpack.cn/thread-62011-1-1.html
本文来自:UPK软件安全社区作者:铁打英雄
 
下载:
http://www.cegui.org.uk/wiki/index.php/Downloads

更多中文教程
http://www.ispinel.com/2010/05/26/971

首先感谢李素颙同学的热心和耐心指导。

大家好,又见面了,我是你们的朋友全栈君。

转载请注明原帖地址:http://www.unpack.cn/thread-62011-1-1.html

本文来自: UPK软件安全社区 作者: 铁打英雄

 

下载:
http://www.cegui.org.uk/wiki/index.php/Downloads

更多中文教程
http://www.ispinel.com/2010/05/26/971

首先感谢李素颙同学的热心和耐心指导。


做游戏或者计算机图形程序,GUI是重要的一个环节,假如你的时间足够多的话,或许你可以自己写一个符合自己的GUI系统,但是假如你想要使用现成的GUI系统并且还要有很多不错的功能的话,CEGUI是个不错的选择的。

尽管CEGUI有着各种各样的让人无法忽视的弊病,但是最重要的是:这是免费的,而且有一个不错的编辑器CElayoutEdtior,尽管这个编辑器时常崩溃和各种各样的错误让人挠头.


免费的GUI系统或许还有其他选择,比如MyGUI,BetaGUI等等,但是CEGUI却是相对比较出色的一个.


如何得到CEGUI?请前来这里下载:http://www.cegui.org.uk

你可以在这里下载SDK和原始码,同时还有CEGUI的各种各样的皮肤,以及那个著名的编辑器CELayoutEdtior.


不幸的是,似乎身处中国大陆我并不能打开CEGUI的Skin皮肤页面http://skins.cegui.org.uk/,当我翻墙之后却打开一切正常,难道是被GFW屏蔽了么?对此感到无语。

假如现在你仍然不知道GFW是什么,那么或许有两种可能:一,你没有生活在中国大陆。二,你还没具有一个大陆网民的基本素质。


本文档的目的:在于让你快速的熟悉CEGUI的基本使用,同时可以让一个对CEGUI完全不熟悉的人在很短的时间内就能自行的创建一个简单的内容,假如你已经对CEGUI有着基本的熟悉,那么本文档已经不再适合你了。


本文档采用CEGUI SDK 0.7.1,里面的部分内容已经不再和老版本的CEGUI SDK0.6.2相兼容,请升级SDK到最新版本.


下面让我们进入正题。

二、环境配置

你使用什么开发环境,就得下载符合这个开发环境的SDK,我下载的是CEGUI 0.7.1 Binary Downloads for Microsoft Visual C++ 2008。


注意,这份文档教授的是快速上手CEGUI,因此已经略去了如何教你下载SDK的原始码自行编译的部分,直接下载以及编译好的SDK,这样会省事很多,当然,假如你想要更多了解,你可以尝试下载原始码,自行编译一下.


下载完成解压到任何目录,将CEGUI-SDK-0.7.1-vc9目录,CEGUI-SDK-0.7.1-vc9/RendererModules和CEGUI-SDK-0.7.1-vc9/dependencies/include还有CEGUI-SDK-0.7.1-vc9/cegui/include目录一起加入VisualStudio 的Include包含路径。

同时还要把CEGUI-SDK-0.7.1-vc9/dependencies/lib/dynamic,CEGUI-SDK-0.7.1-vc9/dependencies/lib/static和CEGUI-SDK-0.7.1-vc9/lib加入VisualStudio 的Lib包含目录,这样就完成了CEGUI开发环境的配置.

三、
开始前的一点准备

渲染环境是基于OpenGL制作的GLUT,GLUT 也是一个非常快速的搭建OpenGL环境的东西,能够让你避免还得自己去处理Windows消息循环,等等一大堆烦人的东西,并且,GLUT是开源而且跨平台的。


当然,CEGUI是支持DirectX和OGRE引擎渲染模式的,这里我们采用了OpenGL渲染模式.


下面让我们开始最快速的部分,当然首先你得包含头档和Lib档。


请为了避免缺少头档包含而出的错误,建议直接把这些全部写上去吧:

#include <dependencies/include/GL/freeglut.h>

#include <CEGUI.h>

#include <CEGUIWindowRenderer.h>

#include <CEGUIResourceProvider.h>

#include <CEGUIDefaultResourceProvider.h>

#include <RendererModules/OpenGL/CEGUIOpenGL.h>

#include <RendererModules/OpenGL/CEGUIOpenGLRenderer.h>

#include <XMLParserModules/XercesParser/CEGUIXercesParser.h>

#include <CEGUIXMLParser.h>

#include <CEGUISystem.h>

#include <CEGUIInputEvent.h>

#include <CEGUIWindow.h>

#include <CEGUIWindowManager.h>

#include <CEGUISchemeManager.h>

#include <CEGUIFontManager.h>

#include <elements/CEGUIFrameWindow.h>


同时你得包含Lib文件:

#pragma comment(lib, “CEGUIBase_d.lib”)

#pragma comment(lib, “CEGUIOpenGLRenderer_d.lib”)

#pragma comment(lib, “CEGUIXercesParser_d.lib”)

 

“_d”表示这是Debug模式,假如你想Release了,那么就包含没有”_d”.

 

同时可以这样:using namespaceCEGUI;

 

四、
开始动手吧,不过之前得有一点小准备

下面我们开始实际的编码了,首先得初始化CEGUI,创建一个渲染对象。


CEGUI::OpenGLRenderer *myRenderer;

 

这句话是声明一个OpenGL的渲染对象,也只能有这一个对象。

接着你得创建OpenGL渲染环境:

myRenderer = &CEGUI::OpenGLRenderer::create();

CEGUI::System::create(*myRenderer);

 

OK,现在我们创建好了基本的渲染环境,注意,创建的这部分代码仅仅适用于CEGUI SDK 0.7.1版本,并不适用于CEGUI SDK 0.6.2.


一个GUI系统,得需要有资源,比如脚本,用编辑器做好的菜单文件,图片以及字体什么的,所以下一步你得设置这些GUI资源的目录。


所以接着你得写如下代码用来设置资源:目录


CEGUI::DefaultResourceProvider*rp = static_cast<CEGUI::DefaultResourceProvider*>(CEGUI::System::getSingleton().getResourceProvider());

 


rp->setResourceGroupDirectory(“schemes”, “datafiles/schemes/”);


rp->setResourceGroupDirectory(“imagesets”,“datafiles/imagesets/”);


rp->setResourceGroupDirectory(“fonts”, “datafiles/fonts/”);


rp->setResourceGroupDirectory(“layouts”, “datafiles/layouts/”);


rp->setResourceGroupDirectory(“looknfeels”,“datafiles/looknfeel/”);


rp->setResourceGroupDirectory(“lua_scripts”,“datafiles/lua_scripts/”);

 


//
使用Xerces作为XML解析器


rp->setResourceGroupDirectory(“schemas”,“../../XMLRefSchema/”);

CEGUI基于强大的设计思想,只要少量的修改或扩充,几乎可以实现现存国内外任何一款3D网游的界面。
这是一张大图:
CEGUI-专用游戏界面开发库
主要实现的功能有:
1基础控件
2具有wow外观的的Frame窗口
3拖曳控件
4拖曳控件的buffer显示,其实是饼图的pregress,及buffer完成后的高亮闪烁
5血量不足时的心跳效果
6根据不同网速显示的设置按钮
7wow效果的拖曳控件
8吟唱技能条
9高光效果
9聊天向下指示箭头的闪烁
11小地图
12任务面板
13目标的目标
14wow效果的聊天界面
15快键栏

wow的技能吟唱条实现
技能条上的亮条通过高光贴图实现,加载完成后的高亮贴图也是高光贴图,最后通过改变alpha值实现淡入淡出。
技能吟唱完成进度条:
CEGUI-专用游戏界面开发库

技能打断进度条:
CEGUI-专用游戏界面开发库

技能持续进度条:
CEGUI-专用游戏界面开发库

技能持续完成进度条:
CEGUI-专用游戏界面开发库

背包:
CEGUI-专用游戏界面开发库

聊天:
CEGUI-专用游戏界面开发库

CEGUI-专用游戏界面开发库

本文原文发表在http://www.ogre3d.org.cn
代码还没有上传上去,全文也没有写完,先转载过来一章,供大家拍砖。

本地化支持:OGRE+CEGUI中文输入:OGRE方面的问题
From OGRE 3D 中文网
Jump to: navigation, search
其实从许久以前的版本开始,CEGUI基本上已经成为官方制定的GUI系统,并在OGRE的演示程序中使用(能得到同等待遇的似乎只有ODE物理引擎)。
而中文输入这种关联与GUI的事件,已经基本上和OGRE引擎没有多少关系了。但是这里仍然有几件事情需要我们注意。

从CEGUI版本0.4.x 迁移到版本0.5.x
OGRE 引擎对CEGUI的支持是通过一个叫做OgreGUIRenderer.dll的插件来完成的,你可以在OGRE提供的SDK中找到这个文件。不过到目前为止,官方之提供了对0.4.0版本CEGUI的支持。似乎为了保持版本的稳定性,目前还看不出来OGRE官方对这个插件的升级计划。
0.4.0也是一个不错的CEGUI版本(我没有用过,纯属瞎说),但是对于中文支持有一个致命的弱点,那就是不支持分页对文字的读取。中文常用汉字就有上千个,再分为不同的字体,对内存的占用量是无法接受的。CEGUI版本0.5.0已经解决了这个问题。
这时候就需要我们继承革命前辈“自己动手丰衣足食”的优良传统了。根据OGRE官方论坛提供的方法,我们对OgreGUIRenderer.dll插件进行一次手术。让其适配CEGUI版本0.5.x。
首先需要下载OGRE引擎的源代码和相应的依赖包,我这里使用的平台是WindowsXP+Visual Studio2005(VC8.0)。
解压完源代码并配置好依赖项目,你会看到OgreCEGUIRenderer项目(ogrenew/Samples/Common/CEGUIRenderer),然后进行如下修改:
文件OgreCEGUITexture.h,第109行,
virtual void loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight);
改为
virtual void loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight, PixelFormat pixelFormat = CEGUI::Texture::PF_RGBA);

文件OgreCEGUITexture.cpp,第144行,
void OgreCEGUITexture::loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight)
改为
void OgreCEGUITexture::loadFromMemory(const void* buffPtr, uint buffWidth, uint buffHeight, PixelFormat pixelFormat)

相同文件,第167行
d_ogre_texture = TextureManager::getSingleton().loadRawData(getUniqueName(), “General”, odc, buffWidth, buffHeight, PF_A8R8G8B8, TEX_TYPE_2D, 0, 1.0f);
改为
d_ogre_texture = TextureManager::getSingleton().loadRawData(getUniqueName(), “General”, odc, buffWidth, buffHeight, pixelFormat == CEGUI::Texture::PF_RGB ? PF_R8G8B8:PF_A8R8G8B8, TEX_TYPE_2D, 0, 1.0f);
然后去CEGUI网站上下载最新0.5.x版本的CEGUI库,覆盖OGRE相应的CEGUI依赖文件(包括头文件以及lib、dll文件)。编译生成新的OgreGUIRenderer.dll,如果你觉得这个过程很麻烦,那么可以到这里下载。
后遗症是因为CEGUI版本接口的变动,之前OGRE所提供的Demo中使用CEGUI部分会无法编译通过。
得到Win32系统消息
我们这里有两种得到Win32系统消息的办法,一种是好的,一种是简单的。请根据实际情况选择相应的方法:
好的方法
OGRE 3D是一个跨平台的引擎,所以平台相关的操作自然要封装在具体的实现里面。这样就等于说,用户在使用中无法了解具体的平台相关信息。对于跨平台的设计来说这样做是合理的,但是对于一些需要得到系统消息的项目来说,就有一些特殊需要了。
OGRE 项目并不是没有顾全到这种情况,因此提供了两种不同的创建窗口办法,简单的方法是Demo中所使用的,委托OGRE创建并维护窗口。另外一种方法是手动创建窗口,之后交给OGRE引擎用来渲染,并手动维护。手动维护窗口虽然比较麻烦,但是这样可以更自由的控制窗口,换句话说可以简单得得到任何窗口信息,包括消息。
创建窗口不是一个困难的过程,但是却是麻烦。在这里交给读者作为作业来做吧(我还没抽出时间来实现呢)。然后通过下面的方法来初始化渲染窗口:
//假设之前已经执行完创建窗口以及Ogre::Root对象的过程
//hWnd为窗口句柄,root为Ogre::Root类型实例
Ogre::NamevaluePairList params;//构造参数
std::stringstream ss;
ss<<hWnd;//窗口句柄
params[“externalWindowHandle”] = ss.str();//把窗口句柄做为字符串形势设置到参数中
root->initialise(false);//Ogre::Root对象初始化参数为false,表示手动创建渲染窗口
//下面创建渲染窗口
Ogre::RenderWindow * window = _root->createRenderWindow(“name”, //名称
    width,//宽度
    height, //高度
    false, //是否全屏显示
    &params);

这样就能把手动创建的窗口交给Ogre进行渲染操作,代价是你作为窗口的拥有者应该管理窗口的一切行为。这是一个正规的方法,任何真正的项目都应该遵守尽量不要破坏库的封装。
简单的方法
也可以称作懒人的方法,或者免费打工仔偷懒的方法。极力不推荐,但这里的演示却是用它。我知道这有一些矛盾,但作为只是想要测试中文输入功能的工作来说,还勉强算说得过去。
这种方法就是破坏OGRE引擎的封装,通过直接修改OGRE源代码来得到已经被封装好的Win32窗口消息。我不会在这做太多地介绍,因为你马上会看到相应的源代码,没有什么难度,只要覆盖OGRE工程中相应的文件就可以了。
http://ogre3d.org.cn/wiki/index.php?title=%E6%9C%AC%E5%9C%B0%E5%8C%96%E6%94%AF%E6%8C%81:OGRE%2BCEGUI%E4%B8%AD%E6%96%87%E8%BE%93%E5%85%A5:OGRE%E6%96%B9%E9%9D%A2%E7%9A%84%E9%97%AE%E9%A2%98

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163753.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 加多宝首度披露"换头手术"的详细内幕

    加多宝首度披露"换头手术"的详细内幕12月下旬,加多宝与王老吉的“改名案”和“怕上火案”判决结果先后出台,两大凉茶巨头之间的官司纠纷再起波澜。而加多宝集团品牌管理部负责人王月贵,在出席活动时首度披露了加多宝“换头手术”的详细内幕——由此,加多宝打赢凉茶之战的始末得以首次公开。以下为发言及访谈摘要:  快速出击,跟时间赛跑  在2012年,就在我们红罐凉茶迅速成长的时候,加多宝突然遭遇品牌地震,我们被迫放弃了使用和推广了17

    2022年10月29日
  • PetShop4架构设计分析(三,四)

    PetShop4架构设计分析(三,四) petshop4.0详解之三(PetShop数据访问层之消息处理)三、PetShop数据访问层之消息处理在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。在前面我曾提到,分层式结构设计可能会在一定

    2022年10月16日
  • 《微机原理与接口技术》期末复习笔记「建议收藏」

    《微机原理与接口技术》期末复习笔记「建议收藏」微机原理与接口技术第01章微机原理概述基本知识CPU:中央处理单元(CentralProcessorUnit),处理器,能够分析和执行指令的部件,能分析和执行指令的芯片就是CPUMPU:微处理器,MicroProcessorUnit,CPU集成芯片,比传统CPU功能性能简化,集成度高,价格低廉,性价比高微型计算机(微机:MicroComputer):MPU+存储器+…

  • 项目范围管理:范围定义[通俗易懂]

    项目范围管理:范围定义[通俗易懂]定义范围是制定项目和产品详细描述的过程。 定义范围的主要作用是:明确所收集的需求哪些将包括在项目范围内,哪些将排除在项目范围外,从而明确项目、服务或输出的边界。 范围定义的内容和作用:由于在收集需求过程中识别出的所有需求未必都包含在项目中,所以定义范围过程就是从需求文件中选取最终的项目需求,然后制定出关于项目及其产品、服务或输出的详细描述。 准备好详细的项目范围说明书,对项目成功至关重要。应根据项目启动过程中记载的主要可交付成果、假设条件和制约因素来编制项目范围说明书。在项目规划过程中,随着对项目

  • vscode新建html文件并快速生成标准的html代码_用vscode写一个html页面

    vscode新建html文件并快速生成标准的html代码_用vscode写一个html页面在Vscode新建html文件1、点击OpenFolder:2、选择目标文件夹,新建一个拓展名为html的文件:3、在第1行输入!(英文状态下),按tab键,新建成功。界面如下图所示:转载于:https://www.cnblogs.com/zhangyu10/p/10535730.html…

  • Java waa started but returned exit code = 13

    Java waa started but returned exit code = 13Java waa started but returned exit code = 13

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号