2010-02-17 43 views
20

我正在創建一個遊戲使用irrlicht c + + 3D圖形引擎端口到android平臺。圖形引擎是用C++編寫的。我需要能夠從C++代碼加載網格和紋理等。我目前的計劃是將所有遊戲資源文件放在res/raw目錄或資產目錄中,然後在啓動時將這些文件複製到SD卡中,以便它們可以從irrlicht C++代碼訪問。 這是使遊戲媒體文件可從C++訪問的最佳方式嗎?Android:如何使遊戲資產文件可讀取使用ndk

回答

9

有幾種方法可以做到這一點...他們每個人都有自己的限制,所以如果不瞭解更多關於您的情況,我不能給出好的建議。這裏有一些鏈接,與一些建議的討論,可以幫助您解決:

http://groups.google.com/group/android-ndk/browse_thread/thread/842ca9d7d82995b0

http://groups.google.com/group/android-ndk/browse_thread/thread/4e25a5dfd46f8fea/1269bcd10bdb066d?lnk=gst&q=apk+compressed#1269bcd10bdb066d

我可以給你更具體的建議,如果我知道一)有多少資源需要訪問B)您將遇到的最大資源的大小,更具體地說,是您的所有資源<未壓縮的大小爲1MB?

+0

那些是我以前沒有找到的好線索。這裏是另一個我發現有用http://thedevelopersinfo.com/2010/01/13/working-with-sdcards-filesystem-in-android/ 遊戲還沒有很好的定義,但這裏有一些appoximations 的文件,我會需要訪問C++ 約8個約400k大小的網格(3.2MB) 約8個大約50k大小的紋理(0.4MB) 約20個大小約爲20K的紋理(0.4MB) 1個質感193K(0.193MB) 總計大約4.2MB 另外一個視頻249K和一些聲音效果306K,但這些將在res/raw文件夾中並在Android媒體播放器中播放 – slytron 2010-02-18 01:46:27

+1

好的,我問的原因是似乎有1MB的未壓縮文件大小限制每個資源,並且似乎也有一個最大資源數爲512.因爲它看起來像你是聯合國對於這兩者,您可以將所有資源放在「/ assets」文件夾中,然後使用AssetManager類訪問它們。如果您的APK是zipaligned,那麼AssetManager會爲您提供內存映射文件,這將大大提高速度。 – cjserio 2010-02-18 13:18:09

+0

謝謝。我相信我有我需要做的。 – slytron 2010-02-18 13:29:15

1

理論上,您可以將InputStream傳遞給本機C++代碼並讓它調用它的方法。你甚至可以在這些之上實現一個istream。不過,我認爲這不是你想要的。

請記住,APK中的資產文件不會作爲文件存儲。他們被壓縮並存檔 - APK實際上是一個重命名的ZIP文件。所以我建議將資源從Java內部複製到數據文件夾中,然後將該副本的文件名傳遞給C++。

順便說一句,這完全排除了寫入這些資產。

相關問題