在Ogre中加载自己的资源包
来源:互联网 发布:监控摄像头控制软件 编辑:程序博客网 时间:2024/05/22 16:53
由于数据保护的需要,一款游戏一般都会有自己独有的资源包,这样做既有利于知识产权的保护,又减少了磁盘碎片的产生。Ogre本身是支持的Zip包的,但Zip包不具要资源保护的特性,随便用个winrar就可以把资源打开并导出,这样就失去了数据保护的意义。
现在假设你的操作资源包的API已经完成,下一步需要集成到OGRE中去,那么该怎么做呢,
大致我机械式的列出下面几步,照着做一般就不会错。
1. 继承Ogre::Archive 派生出新的,假设派生出 Ogre::XXXArchive
2. Ogre::XXXArchive 中实现下面的虚函数bool isCaseSensitive(void)
void load()
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)
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 中实现下面的虚函数
size_t read(void* buf, size_t count);
void skip(long count);
void seek( size_t pos );
size_t tell(void) const;
bool eof(void) const;
void close(void);
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 中实现下面虚函数
const String& getType(void) const
Archive* createInstance( const String& name )
Archive* createInstance( const String& name )
7. 在OgreRoot.h 中注册我们新的资源包的加载
在private成员中加入一个新的变量
ArchiveFactory *mXXXArchiveFactory;
代表你新的资源包的创建工厂
8. 在OgreRoot.cpp 中加入相关代码
在
mZipArchiveFactory = new ZipArchiveFactory();
ArchiveManager::getSingleton().addArchiveFactory( mZipArchiveFactory );
ArchiveManager::getSingleton().addArchiveFactory( mZipArchiveFactory );
两句代码的下面加上,注册我们资源包的代码
mXXXArchiveFactory = new XXXArchiveFactory();
ArchiveManager::getSingleton().addArchiveFactory( mXXXArchiveFactory );
ArchiveManager::getSingleton().addArchiveFactory( mXXXArchiveFactory );
关于XXXArchive, 和 XXXDataStream 的编写,可以参照 ZipArchive 和 ZipDataStream 照葫芦画瓢来做。
- 在Ogre中加载自己的资源包
- Ogre的资源加载策略
- 在Android持续集成项目中android.jar前加载自己的jar包
- 第六章 OGRE中场景管理器、资源加载、manualObject的使用
- OGRE加载资源文件框架
- Ogre资源加载流程概述
- maven加载自己的包
- Android中通过反射获取资源Id(特别用在自己定义一个工具将其打成.jar包时,特别注意资源的获取)
- Android中通过反射获取资源Id(特别用在自己定义一个工具将其打成.jar包时,特别注意资源的获取)
- OGRE资源相关分析 + OGRE 启动详解 + 实体的加载与显示
- 在ogre中加载 ogremax场景文件方法
- 在ogre中加载ogremax场景文件方法
- 在ogre中加载 ogremax场景文件方法
- 在Unity3D的网络游戏中实现资源动态加载
- 在Unity3D的网络游戏中实现资源动态加载
- 在ImageView中加载SD卡上的图片资源
- 在Unity3D的网络游戏中实现资源动态加载
- 在Unity3D的网络游戏中实现资源动态加载
- PLSQL访问远程数据库的配置方法
- 一起回忆广州快腾气化炉恋爱的甜蜜时光
- linux下apr安装方法
- 语言和软件的本质是数据结构与算法
- 让ExWatcher支持UNICODE版本Delphi
- 在Ogre中加载自己的资源包
- vmware上不了网
- CSS入门
- red hat 5(cent os)裸机安装mysql,unixODBC
- 刚出茅庐的小道
- Ogre中的批次渲染技术(Batching)
- 没什么说的
- cacti监控squid的方法
- 浅谈C语言中的文件操作(一)