1 回答
TA贡献1859条经验 获得超6个赞
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 ) ;
- 1 回答
- 0 关注
- 104 浏览
添加回答
举报