使用cocos2dx在Android上进行游戏开发时,遇到了奇怪的事情。 任何代码都无法读取资源文件。 不要要求更新版本的Api。
在Android ndk api第9级之后,提供了一组称为资产管理器的API。
这个api的工作原理是
- Java通过JNI将getAssets中得到的资产管理器传递给JNI的c函数。
- JNI的c函数通过AAssetManager_fromJava检索此AssetManager对象。
-通过一系列资产管理器的api操作资产。
c的jni函数如下
saticaassetmanager * gassetmgr=null;
extern'C '
{
void Java _ org _ cocos2d x _ lib _ cocos2d x activity _ nativesetassetmanager (JNI env * env,jclasscls,jobjectassetasetetmanation manager
{
gassetmgr=aassetmanager _ from Java (env,asset manager );
}
(;
读取资源的方法如下
do{
asset * passet=aasset manager _ open (gassetmgr,pszFileName,AASSET_MODE_UNKNOWN );
if(passet==null ) break;
size _ tsize=aasset _ getlength (passet );
是if(size0)
{
pData=newunsignedchar[size];
intiret=aasset_read(passet,pData,size );
if(iret=0) )
{
delete[]pData;
pdata=空;
}
}
asset_close(passet;
if(passet==null ) size=0;
是if(psize )
*pSize=size;
(while ) 0;
这里修改的是cocos2dx的CCFileUtils_Android.cpp中的getFileData函数。
最后,在编译libgame.so时,请注意通过将-landroid添加到Android.mk的LOCAL_LDLIBS选项中来链接相关库。