在Ogre中載入自己的資源套件

來源:互聯網
上載者:User

由於資料保護的需要,一款遊戲一般都會有自己專屬的資源套件,這樣做既有利於智慧財產權的保護,又減少了磁碟片段的產生。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 照葫蘆畫瓢來做。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.