在Ogre中加載本身的資源包

轉自:http://www.cnblogs.com/minggoddess/archive/2011/02/19/1958472.htmlhtml

因爲數據保護的須要,一款遊戲通常都會有本身獨有的資源包,這樣作既有利於知識產權的保護,又減小了磁盤碎片的產生。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 中實現下面的虛函數htm

 
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 中實現下面虛函數blog

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

兩句代碼的下面加上,註冊咱們資源包的代碼ip

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

關於XXXArchive, 和 XXXDataStream 的編寫,能夠參照 ZipArchive 和 ZipDataStream 照葫蘆畫瓢來作。資源

相關文章
相關標籤/搜索