在Ogre中加载自己的资源包

由于数据保护的需要,一款游戏一般都会有自己独有的资源包,这样做既有利于知识产权的保护,又减少了磁盘碎片的产生。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)

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);

5. 继承 Ogre::ArchiveFactory 派生出新的, 假设派生出 Ogre::XXXArchiveFactory

6. Ogre::XXXArchiveFactory 中实现下面虚函数

const String& getType(void) const
Archive* createInstance( const String& name )

7. 在OgreRoot.h 中注册我们新的资源包的加载
在private成员中加入一个新的变量

ArchiveFactory *mXXXArchiveFactory;

代表你新的资源包的创建工厂

8. 在OgreRoot.cpp 中加入相关代码

mZipArchiveFactory = new ZipArchiveFactory();
ArchiveManager::getSingleton().addArchiveFactory( mZipArchiveFactory );

两句代码的下面加上,注册我们资源包的代码

mXXXArchiveFactory = new XXXArchiveFactory();
ArchiveManager::getSingleton().addArchiveFactory( mXXXArchiveFactory );

关于XXXArchive, 和 XXXDataStream 的编写,可以参照 ZipArchive 和 ZipDataStream 照葫芦画瓢来做。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值