原文轉自:http://blog.sina.com.cn/s/blog_62b2318d0101eozt.html
cocos2dx在不同平台上讀取資源文件時的處理方式是不同的。
在ios下,程序調用
CCSprite
::
create
(
"HelloWorld.png"
)
,函數最終會到
mainBundle
下查找文件。
而在android下,函數會查找apk文件,然后從apk中讀取資源文件。
差異的原因是ios下資源是放在程序Bundle目錄下的,而android的apk文件是zip包,資源都
被壓縮了,所以要從zip中抽取文件。
結合實際,如果項目中要自己讀取某文件,比如數據庫文件test.db,在ios下把其放在Resource下就行了;
而在android下要直接調用
CCFileUtils
::
sharedFileUtils
()->
getFileData
函數,函數返回值是文件內容指針,
操作完畢記得要將指針delete。
跨平台不是一件容易事啊~~
1. 資源讀取
ios的ipa的資源打包結構和實際結構是一致的,比如,在Resource目錄下有一個client.cfg文本文件,我們是直接用fread或者ofstream讀取出來的,處理的。
android的資源,打包的時候會全部拷貝到assets目下,壓縮了一下,分兩種情況:
CCSprite::create()之類的,可以讀取出來;
自己的配置文件,xml之類的,不能直接讀,必錯。
cocos2dx支持統一的方法: CCFileUtils::fullPathForFilename(), 獲取正確路徑; CCFileUtils::getFileData(),解壓,將文件讀出到內存,程序直接處理這個返回值。
2. android ndk, 也定義了__linux__宏,其他代碼用到這個宏的小心,不要在ANDROID前面,把ANDROID的一些預定義給覆蓋了。
3. android涉及到的網絡的, 在AndroidManifest.xml 加上:<uses-permission android:name="android.permission.INTERNET" />