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 關注
- 124 瀏覽
添加回答
舉報