Cocos2d-x3.1通过JniHelper类调用java中非静态函数

来源:互联网 发布:淘宝卖点卡 编辑:程序博客网 时间:2024/05/16 16:08

1、创建Cocos2d-x3.1工程

在调用静态函数文章中有详细介绍。

2、将工程导入XCode

在调用静态函数的文章中有详细介绍

3、将工程导入ADT

在调用静态函数的文章中有详细介绍,遇到的错误及解决办法都有描述。

4、在Xcode中添加如下代码

通过修改关闭按钮实现静态与非静态代码的调用。在voidHelloWorld::menuCloseCallback(Ref* pSender)添加如下代码:

void HelloWorld::menuCloseCallback(Ref* pSender){//平台判断#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)    JniMethodInfo info;    //判断org/cocos2dx/cpp/AppActivity.java中是否存在getObj静态函数    bool ret = JniHelper::getStaticMethodInfo(info,"org/cocos2dx/cpp/AppActivity","getObj","()Ljava/lang/Object;");    jobject jobj;//用于存放返回的对象    if(ret)    {        log("call void getObj() succeed");        jobj = info.env->CallStaticObjectMethod(info.classID,info.methodID);//调用getObj函数,返回一个对象    }    //判断org/cocos2dx/cpp/AppActivity.java中是否存在func1非静态函数    bool re = JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","func1","()V");    if(re)    {        log("call func1 succeed");        info.env->CallVoidMethod(jobj,info.methodID);//通过返回的对象调用非静态函数    }    #endif}

5、在ADT中的src/org.cocos2dx.cpp下AppActivity.java中添加如下代码

public static Object getObj(){Log.e("Static", "func");return instance;}private Intent i;public void func1(){Log.e("unStatic", "func1");i = new Intent(AppActivity.this,MyService.class);startService(i);}

6、编译运行

如有问题翻看前面关于在Java中调用静态函数的文章。
1 0