在Ogre中加载自己的资源包
转自:http://www.cnblogs.com/minggoddess/archive/2011/02/19/1958472.html
由于数据保护的需要,一款游戏一般都会有自己独有的资源包,这样做既有利于知识产权的保护,又减少了磁盘碎片的产生。Ogre本身是支持的Zip包的,但Zip包不具要资源保护的特性,随便用个winrar就可以把资源打开并导出,这样就失去了数据保护的意义。
现在假设你的操作资源包的API已经完成,下一步需要集成到OGRE中去,那么该怎么做呢,
大致我机械式的列出下面几步,照着做一般就不会错。
1. 继承Ogre::Archive 派生出新的,假设派生出 Ogre::XXXArchive
2. Ogre::XXXArchive 中实现下面的虚函数bool isCaseSensitive(void)
void unload()
DataStreamPtr open(const String& filename)
StringVectorPtr list(bool recursive = true )
FileInfoListPtr listFileInfo(bool recursive = true )
StringVectorPtr find(const String& pattern, bool recursive = true)
FileInfoListPtr findFileInfo(const String& pattern, bool recursive = true)
bool exists(const String& filename)
3. 继承Ogre::DataStream 派生出新的, 假设派生出 Ogre::XXXDataStream
4. Ogre::XXXDataStream 中实现下面的虚函数
void skip(long count);
void seek( size_t pos );
size_t tell(void) const;
bool eof(void) const;
void close(void);
5. 继承 Ogre::ArchiveFactory 派生出新的, 假设派生出 Ogre::XXXArchiveFactory
6. Ogre::XXXArchiveFactory 中实现下面虚函数
Archive* createInstance( const String& name )
7. 在OgreRoot.h 中注册我们新的资源包的加载
在private成员中加入一个新的变量
代表你新的资源包的创建工厂
8. 在OgreRoot.cpp 中加入相关代码
在
ArchiveManager::getSingleton().addArchiveFactory( mZipArchiveFactory );
两句代码的下面加上,注册我们资源包的代码
ArchiveManager::getSingleton().addArchiveFactory( mXXXArchiveFactory );
关于XXXArchive, 和 XXXDataStream 的编写,可以参照 ZipArchive 和 ZipDataStream 照葫芦画瓢来做。
在Ogre中加载自己的资源包的更多相关文章
- Arcmap中加载互联网地图资源
本文转载自:http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地 ...
- [转]在Arcmap中加载互联网地图资源的4种方法
转自http://blog.3snews.net/space.php?uid=6955280&do=blog&id=67981 前一段时间想在Arcmap中打开互联网地图中的地图数据, ...
- 在Arcmap中加载互联网地图资源的4种方法
前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a) ...
- 在Arcmap中加载互联网地图资源的4种方法(转载)
前一段时间想在Arcmap中打开互联网地图中的地图数据,如影像数据.基础地图数据等,经过简单研究目前总结了四种方法,整理下与大家分享,有些内容可能理解有误,希望大家多多指教.4种方法如下: a) ...
- 使用 pdf.js 在网页中加载 pdf 文件
在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子商务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...
- Direct2D开发:MFC下从资源文件中加载位图
转载请注明出处:http://www.cnblogs.com/ye-ming 0X01 概述: 相对于GDI处理界面,Direct2D有得天独厚的优势,下图就是Direct2D与GDI的效果对比,wi ...
- 『转载』从内存资源中加载C++程序集:CMemLoadDll
MemLoadDll.h #if !defined(Q_OS_LINUX) #pragma once typedef BOOL (__stdcall *ProcDllMain)(HINSTANCE, ...
- Spring中加载xml配置文件的六种方式
Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog 因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...
- Android中加载位图的方法
Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加 ...
随机推荐
- MATLAB 利用filter函数实现滑动平均滤波
function [ y ] = moving_average( x, win_size ) y1=filter(ones(1,win_size/2+1)/win_size,1,x); y2=fi ...
- 一、javaSE总结
1.变量与常量区别: 常量:是在程序中的不会变化的数据. 变量:其实就是内存中的一个存储空间,用于储存常量数据 ,方便运算,因为有些数据不确定,变量空间可以重复使用. 2.变量空间的开辟条件:数据类型 ...
- 颜色之RGBA
颜色之RGBA RGB是一种色彩标准,是由红(R).绿(G).蓝(B)的变化以及相互叠加来得到各式各样的颜色.RGBA是在RGB的基础上增加了控制alpha透明度的参数. 语法: color:rgba ...
- mac下phpstorm左侧的project列表找不到了
早上开机,发现左侧的project列表没有了,用着不方便,当然了,是可以调出来的. View-Tool Windows-Project,就出来来. 快捷键:command+1. 问题解决.
- Mysql的主从数据库没有同步的解决办法
Mysql的主从数据库没有同步的解决办法 今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. ...
- Ext中如何校验TextField的字段被修改了?
场景描述: 在form表单中有个sfzhm的字段,需要去后台进行sfzhm是否重复的校验,一开始使用了blur的event来去后台进行校验,后来发现在焦点离开时,及时数据没有发生变化,也会造 ...
- zepto判断手机横竖屏
var CheckOrientation = (function(){ var win = $( window ), get_orientation, last_orientation, initia ...
- 【CentOS】samba服务器安装与配置
参考资料: http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html 1.简介 2.安装 3.配置 1.简介 Samba是一个能让Li ...
- Java递归列出目录下全部文件
Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...
- iOS7 状态栏 修改为白色字体的步骤
1在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO2 在需要改变状态栏颜色的ViewController中在ViewDidLoad方 ...