由於資料保護的需要,一款遊戲一般都會有自己獨有的資源包,這樣做既有利於智財權的保護,又減少了磁碟碎片的產生。ogre本身是支援的zip包的,但zip包不具要資源保護的特性,隨便用個winrar就可以把資源開啟並匯出,這樣就失去了資料保護的意義。
現在假設你的操作資源包的api已經完成,下一步需要整合到ogre中去,那麼該怎麼做呢,
大致我機械式的列出下面幾步,照著做一般就不會錯。
1. 繼承ogre::archive 派生出新的,假設派生出 ogre::***archive
2. ogre::***archive 中實現下面的虛函式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::***datastream
4. ogre::***datastream 中實現下面的虛函式
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::***archivefactory
6. ogre::***archivefactory 中實現下面虛函式
const string& gettype(void) const
archive* createinstance( const string& name )
7. 在ogreroot.h 中註冊我們新的資源包的載入
在private成員中加入乙個新的變數
archivefactory *m***archivefactory;
代表你新的資源包的建立工廠
8. 在ogreroot.cpp 中加入相關**
在 mziparchivefactory = new ziparchivefactory();
archivemanager::getsingleton().addarchivefactory( mziparchivefactory );
兩句**的下面加上,註冊我們資源包的**
m***archivefactory = new ***archivefactory();
archivemanager::getsingleton().addarchivefactory( m***archivefactory );
關於***archive, 和 ***datastream 的編寫,可以參照 ziparchive 和 zipdatastream 照葫蘆畫瓢來做。
Java在jar包中載入so包dll包dylib等
使用ide為idea,lib libxyz.so位於resource下,通過動態設定jar路徑,然後載入。system.loadlibrary xyz 如果直接啟動idea系統正常載入。但將項打包為jar,啟動jar包執行確出現找不到jar載入異常,產生unsatisfied linked erro...
在cocos2d JS中載入動畫資源檔案
首先,我們應該把 running.plist 和 running.png 新增到 resource.js檔案中。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var res var g resources image res.hellobg png,res...
使用ClassLoader載入包內的資源
classloader可以把包 jar包,war包 內的class檔案載入到 jvm中,第一步就是將class檔案以stream的方式讀取出來。classloader也將這個載入資源的方法 getresourceasstream暴露了出來。程式設計時可以使用這個方法來載入包內的任何資源,比如prop...