【CEGUI】CEGUI入门篇之使用ResourceProvider加载资源(二)
来源:互联网 发布:乐视没有mac版 编辑:程序博客网 时间:2024/06/01 14:59
以下内容翻译自http://static.cegui.org.uk/docs/0.8.7/resprov_tutorial.html
这里主要介绍CEGUI::ResourceProvider的相关概念及DefaultResourceProvider的用法。
1、什么是ResourceProvider?
CEGUI使用ResourceProvider作为CEGUI库和外部文件系统的桥接,无论是基本的本地文件系统还是像Ogre3D和Irrlicht一样提供的资源管理子系统,通过实现ResourceProvider的接口,都可以把这些很好的集成到CEGUI系统。
2、DefaultResourceProvider
CEGUI提供了默认的ResourceProvider即DefaultResourceProvider,适用于简单的场景,包括文件中数据的加载和资源组的设置。资源组用于标识系统中的一个目录,不同类型的资源文件放置在不同的物理目录,资源组与目录关联之后,使用资源组将更方便资源管理。不使用DefaultResourceProvider时,如Ogre3D就提供了自己的OgreResourceProvider,或者是其它自定义的ResourceProvider,请忽略这里对关联资源组与目录的相关介绍,特别是关于DefaultResourceProvider的介绍,这时就需要按照相应资源系统的用法来实施,如Ogre3D的ResourceManager,不过设置默认资源组还是需要的。
关联资源组与目录——
DefaultResourceProvider允许定义任意数量的资源组,并关联到相应的目录。比如说创建一个名为imagesets的资源组并关联到目录./mygame/datafiles/gui/imagesets/,然后通过ImageManager加载Imageset时,使用imagesets这个资源组,就可以在./mygame/datafiles/gui/imagesets/这个目录中查找,另外还可以设置默认资源组,也就是在默认资源组中查找而不需要指定在哪个资源组中查找。需要注意的是现在仅支持资源组关联到一个目录,如果一个数据文件引用了其它数据文件的信息,禁用相对路径,直接使用引用文件的名字即可,而且还方便文件位置的移动。首先看一下通过一个完整的路径来加载Imageset:
ImageManager::getSingleton().loadImageset( "./mygame/datafiles/gui/imagesets/WindowsLook.imageset");
下面是通过关联资源组与目录后来加载Imageset:
// initializationDefaultResourceProvider* rp = static_cast<DefaultResourceProvider*>( CEGUI::System::getSingleton().getResourceProvider());rp->setResourceGroupDirectory("imagesets", "./mygame/datafiles/gui/imagesets/");// load laterImageManager::getSingleton().loadImageset( "WindowsLook.imageset", "imagesets");
3、设置默认资源组
CEGUI系统的可加载的资源类都有设置和获取默认资源组的静态函数,某个资源类加载数据文件时就会用到资源组,除了ImageManager和XercesParser之外,其它的资源类都有相同的静态函数(ResourceProvider有类似的成员函数),如下:
const String& getDefaultResourceGroup();void setDefaultResourceGroup(const String& groupname);
下面列出了资源加载的相关类及其加载的内容:
(1)CEGUI::Font : Font xml and freetype loadable font files.
(2)CEGUI::Scheme : Scheme xml files.
(3)CEGUI::WindowManager : Window layout xml files.
(4)CEGUI::WidgetLookManager : LookNFeel xml files
(5)CEGUI::ScriptModule : Script files in whichever scripted langauge.
给ImageManager设置默认资源组——
Imageset是从xml文件加载的图片资源包,其默认资源组由CEGUI::ImageManager进行设置,除了用于加载Imageset的xml文件外,还用于加载图片纹理文件,具体函数为:
const String& ImageManager::getImagesetDefaultResourceGroup();void ImageManager::setImagesetDefaultResourceGroup(const String& resourceGroup);
给XercesParser设置默认资源组——
XercesParser有特殊的资源组设置方法,用来指定用于xml schema校验的.xsd文件的位置,使用PropertySet的接口通过属性名SchemaDefaultResourceGroup进行访问,这种用法是为了避免直接通过XercesParser来设置schema默认资源组,同时还能与其它的提供了schema校验和相同属性的xml解析模块一起工作。因为不能提前知道使用哪种xml解析模块,也就不知道某个属性是否存在,所以在设置属性前应该检查属性是否存在,这比检查xml解析模块的字符串ID(如Xerces)要好的多。示例代码如下:
// setup default group for validation schemasCEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();if (parser->isPropertyPresent("SchemaDefaultResourceGroup")) parser->setProperty("SchemaDefaultResourceGroup", "schemas");
4、一个完整的例子
// initialise the required dirs for the DefaultResourceProviderCEGUI::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/");// This is only really needed if you are using Xerces and need to// specify the schemas locationrp->setResourceGroupDirectory("schemas", "../datafiles/xml_schemas/");// set the default resource groups to be usedCEGUI::ImageManager::setImagesetDefaultResourceGroup("imagesets");CEGUI::Font::setDefaultResourceGroup("fonts");CEGUI::Scheme::setDefaultResourceGroup("schemes");CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");CEGUI::WindowManager::setDefaultResourceGroup("layouts");CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");// setup default group for validation schemasCEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();if (parser->isPropertyPresent("SchemaDefaultResourceGroup")) parser->setProperty("SchemaDefaultResourceGroup", "schemas");
- 【CEGUI】CEGUI入门篇之使用ResourceProvider加载资源(二)
- 【CEGUI】CEGUI入门篇之初始化(一)
- 【CEGUI】CEGUI入门篇之创建window(四)
- 【CEGUI】CEGUI入门篇之注入输入事件(五)
- 【CEGUI】CEGUI入门篇之数据文件及默认初始化(三)
- CEGUI入门
- cegui 1 cegui渲染入门
- cegui 7 在CEGUI中使用Lua脚本入门
- cegui
- CEGUI
- CEGUI
- CEGUI
- 使用CEGUI
- CEGUI文本渲染(二)
- 在CEGUI中使用Lua脚本入门
- 在CEGUI中使用Lua脚本入门
- CEGUI中文加载优化
- cegui 9 编写CEGUI脚本入门
- 分治算法---二分搜索算法
- 产品经理如何来优化CSDN手机短信验证的功能
- bzoj 3910 并查集+LCA
- 【CEGUI】CEGUI入门篇之初始化(一)
- 113.Test测试实现黑名单的增删该查
- 【CEGUI】CEGUI入门篇之使用ResourceProvider加载资源(二)
- 【CEGUI】CEGUI入门篇之数据文件及默认初始化(三)
- 数据字段属性
- kmp 算法
- ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 5 理解ROS节点
- 投资案例分析:投资创业公司时,VC 关注什么?
- 枚举继承自int
- hadoop2.6集群下Zookeeper与Hbase的安装与配置
- Aggressive cows(最大化最小值问题(二分搜索))