`
abc20899
  • 浏览: 908986 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cocos2dx中利用xcode 调用java中的函数

阅读更多
1.
先把cocos2dx根目录中的
/Users/zhaoshun/cocos2dx/cocos2d-2.0-x-2.0.4/cocos2dx/platform/android 目录
拷贝到 xcode项目的
工程根目录/libs/cocos2dx/platform 目录下

2.
在xcode工程中
文件开头加入 预编译
//使用预编译,对当前平台为Android时才会导入如下头文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>

。。。。。。代码
#endif


3.
在cocos2dx方法中 调用java方法
比如
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    ////静态函数示例1.无参数,无返回值
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
    JniMethodInfo minfo;//定义Jni函数信息结构体
    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
    bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFun", "()V");
    
    if (!isHave) {
        CCLog("jni:此函数不存在");
    }else{
        CCLog("jni:此函数存在");
        //调用此函数
        minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
    }
    CCLog("jni-java函数执行完毕");
#endif
}


函数的签名可以使用如下命令获取
javap -s 包名 类名  可以显示函数的签名 到bin的classes目录


4. JniHelper.h文件 讲解
此文件在 cocos2dx跟目录/cocos2dx/cocos2dx/platform/android/jni/JniHelper.h
内容
#ifndef __ANDROID_JNI_HELPER_H__
#define __ANDROID_JNI_HELPER_H__

#include <jni.h>
#include <string>
#include "platform/CCPlatformMacros.h"

NS_CC_BEGIN

typedef struct JniMethodInfo_
{
    JNIEnv *    env;
    jclass      classID;
    jmethodID   methodID;
} JniMethodInfo;

class CC_DLL JniHelper
{
public:
    static JavaVM* getJavaVM();
    static void setJavaVM(JavaVM *javaVM);
    static const char* getExternalAssetPath();
    static void setExternalAssetPath(const char* externalAssetPath);
    static jclass getClassID(const char *className, JNIEnv *env=0);
    static bool getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
    static bool getMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
    static std::string jstring2string(jstring str);

private:
    static JavaVM *m_psJavaVM;
    static std::string m_externalAssetPath;
};

NS_CC_END

#endif // __ANDROID_JNI_HELPER_H__












// 静态函数示例1.无参数,无返回值
	public static void testFun() {
	    Log.e("Himi", "静态函数示例1.无参数,无返回值");
	}
	
	// 静态函数示例2.有参数,无返回值
	public static void testFunWithInt(int _int) {
	    Log.e("Himi", "静态函数示例1.有参数,无返回值;传入的参数int=" + _int);
	}
	
	// 静态函数示例3.有参数,有返回值
	public static int testFunWithIntAndRtn(int _int) {
	    Log.e("Himi", "静态函数示例1.有参数,有返回值;传入的参数int=" + _int);
	    return _int+1000;
	}
	
	// 静态函数示例4.有参数,有返回值(String类型)
	public static String testFunWithStringAndRtn(int _int) {
	    Log.e("Himi", "静态函数示例4.有参数,有返回值(String类型);int=" + _int);
	    return "yes,return 'String' is OK --by Himi";
	}
	
	//---- 函数示例之非静态函数调用
	//(先获取个对象)
	public static Activity actInstance;//定义单例
	public static Object rtnActivity() {
	    return actInstance;
	}
	//使用此对象进行调用非静态函数
	public void nostaticFun() {
	    Log.e("Himi", "no static Function is OK - By Himi");
	}









  
 ////静态函数示例1.无参数,无返回值
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
//    JniMethodInfo minfo;//定义Jni函数信息结构体
//    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
//    bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFun", "()V");
//    
//    if (!isHave) {
//        CCLog("jni:此函数不存在");
//    }else{
//        CCLog("jni:此函数存在");
//        //调用此函数
//        minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
//    }
//    CCLog("jni-java函数执行完毕");
//#endif
  
    
    
    ////静态函数示例2.有参数,无返回值
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
//    JniMethodInfo minfo;//定义Jni函数信息结构体
//    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
//    bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFunWithInt", "(I)V");
//    
//    if (!isHave) {
//        CCLog("jni:此函数不存在");
//    }else{
//        CCLog("jni:此函数存在");
//        //调用此函数 第三个参数为 传入的值
//        minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,888);
//    }
//    CCLog("jni-java函数执行完毕");
//#endif

    
//    //静态函数示例3.有参数,有返回值--------------------------------$$$$$$$--------------------------------
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
//    JniMethodInfo minfo;//定义Jni函数信息结构体
//    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
//    
//    bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFunWithIntAndRtn","(I)I");
//    jint _int;
//    if (!isHave) {
//        CCLog("jni:此函数不存在");
//    }else{
//        CCLog("jni:此函数存在");
//        //调用此函数
//        _int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID,823);
//        
//        //尝试jint是否能正常接收返回的int值
//        JniMethodInfo minfo_ty;
//        bool isHave = JniHelper::getStaticMethodInfo(minfo_ty, "com/example/testGame/testGame", "testFunWithInt",  "(I)V");
//        if (isHave) {
//            minfo_ty.env->CallStaticVoidMethod(minfo_ty.classID, minfo_ty.methodID,_int);
//        }
//        
//    }
//    CCLog("jni-java函数执行完毕");
//#endif

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
//    JniMethodInfo minfo;//定义Jni函数信息结构体
//    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
//    bool isHave = JniHelper::getStaticMethodInfo(minfo,  "com/example/testGame/testGame","testFunWithStringAndRtn","(I)Ljava/lang/String;");
//    jobject jobj;
//    if (!isHave) {
//        CCLog("jni:此函数不存在");
//    }else{
//        CCLog("jni:此函数存在");
//        //调用此函数
//        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,823);
//    }
//    CCLog("jni-java函数执行完毕");
//#endif

    
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
//    JniMethodInfo minfo;//定义Jni函数信息结构体
//    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
//    bool isHave = JniHelper::getStaticMethodInfo(minfo,
//                                                 "com/example/testGame/testGame",  //类的路径
//                                                 "rtnActivity",   //方法名
//                                                 "()Ljava/lang/Object;");   //括号里的是参数,后面的是返回值。
//    jobject jobj;
//    if (isHave) {
//        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
//    }
//    CCLog("正确获取到 jobj");
//    
//    //
//    isHave = JniHelper::getMethodInfo(minfo,
//                                      "com/example/testGame/testGame",  //类的路径
//                                      "nostaticFun",   //方法名
//                                      "()V");   //括号里的是参数,后面的是返回值。
//    
//    if (isHave) {
//        minfo.env->CallVoidMethod(jobj, minfo.methodID);
//    }
//    CCLog("jni-java函数执行完毕");
//#endif

分享到:
评论

相关推荐

    cocos2d-x xcode 魔塔 mota

    cocos2d-x xcode 魔塔 mota 可运行

    xcode cocos2d工具包

    xcode cocos2d开发集成工具包,在xcode开发工具中添加cocos2d模块

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-Java跨平台游戏引擎

    Cocos2d-Java是基于Cocos2d-X,使用Java语言来开发Cocos2d跨平台游戏的引擎, 和-lua,-js 的api风格相近,方便快捷,便于习惯Java的开发者开发跨平台游戏;

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    cocos2d入门cocos2d入门

    cocos2d入门 cocos2d入门 cocos2d入门 cocos2d入门 cocos2d入门 cocos2d入门

    cocos2d-x json字符串与cocos2d::Value转换工具

    该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...

    cocos2d-x魔塔源码Xcode版

    cocos2d-x魔塔源码Xcode版 绝对能编译通过

    Cocos2D权威指南

    第1章 开始前的准备工作 1 第2章 你的第一款iPhone游戏:垂直射击游戏 38 第3章 Cocos2D核心类 69 第4章 Cocos2D中的动作、特效与动画 152 第5章 Cocos2D中的文本渲染系统 229 共19章

    Cocos2d-x高级开发教程

    书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...

    Cocos2D Installer 3.1.0.app

    cocos2d-x 3.x版本,为xcode提供的自动集成安装的应用程序,直接点击安装即可。

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    iOS Game Programming with Xcode and Cocos2d(完整版)

    iOS Game Programming with Xcode and Cocos2d(完整版) 自己收集的

    Cocos2d基础和基本函数

    本文档介绍了cocos2d的基本函数和一些基本概念

    cocos2d 官方 参考手册

    cocos2d 官方 手册 iPhone 下载 非常好的一本学习cocos2d 的手册

    cocos2d-iphone 2.1 第一部分

    继续输入cd Cocos2d-iPhone-0.99.5(cd Cocos2d-iPhone-0.99.5为解压的cocos2d文件夹名称)进入cocos2d文件夹中。 4。继续输入./install-templates.sh则打开你文件夹下面的install-templates.sh进行cocos2d的安装。...

    cocos2d-js游戏源码+AppStore发布流程(一)

    引擎版本:cocos2d-js-v3.6.1 js代码开发工具:Cocos Code IDE 1.2.0 xcode版本:Xcode-6.3.1 MAC:OS XYosemite 10.10.2 == 该游戏已经成功通过AppStore的审核上线并开始获得广告收入! == 除了源码之外,还附带...

    cocos2d-x中文显示

    cocos2d-x中文显示 cocos2d-x v2.2.0

    cocos2d粒子编辑器 particle_builder -windows

    windows环境,一款很好用cocos2d粒子特效编辑器,里面有不少例子

    cocos2d初级教程-Cocos2d SimpleGame源码

    Ray Wenderlich的《Cocos2d SimpleGame》,被认为是cocos2d的初学者最好的教程,这本书被Cocos2D-X团队从objective-c转化到了c++版,并发布在了github上。在此感谢Ray Wenderlich的慷慨相助。 源代码是在cocos2d-x ...

Global site tag (gtag.js) - Google Analytics