关于cocos2d-x 和安卓之间的相互调用

近期在研究cocos2d游戏移植安卓须要调用非常多方法。所以在研究之中写下它们之间相互调用

首先,cocos2d调用安卓

在一个.h文件里加入头文件

#include <jni.h>

#include "platform\android\jni\JniHelper.h"

JniMethodInfo minfo;//定义Jni函数信息结构体

//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/zhangying/jni/applay", "testFunWithStringAndRtn", "(I)V");

com/zhangying/jni/applay參数为调用安卓中的类的全路径。

testFunWithStringAndRtn为类中要调用的方法

(I)V  返回值和传入參数的类型

jobject jobj;

if (!isHave) {

CCLog("不存在");

}

else{

CCLog("存在");

//调用此函数

jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID, this->choiceMoney);

// ReadData::setUserDefaultInt("RECHARGE", this->choiceMoney);

}

完毕以上步骤就能够測试cocos2d调用安卓中的代码了

然后安卓调用cocos2d

首先在项目中找到jni中的hellocpp中的main.cpp

在当中增加

#include <android/log.h>

#include "data/ReadData.h"

#define  LOG_TAG    "main"

#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

using namespace cocos2d;

void cocos_android_app_init (JNIEnv* env, jobject thiz) {

LOGD("cocos_android_app_init");

AppDelegate *pAppDelegate = new AppDelegate();

}

一下代码是自己增加的 上面的一些自带的不用改动

extern "C"

{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

void Java_com_yiqu_mobilesdk_iap_IAPOrder_callbackMobiles(JNIEnv *env, jobject thiz)

{

CCLog("測试是否进入");

}

#endif

}

注意:

Java_com_yiqu_mobilesdk_iap_IAPOrder_callbackMobiles这个名字不是随便定义的

Java是固定的com.yiqu.mobilesdk.iap是包名 IAPOrder是类名字,callbackMobiles是你要调用的方法名字

这样就写成了这种方法

在你要调用cocos2d的java类中写上要调用的方法名字 写法例如以下

public native static void callbackMobiles();  名字随便定义,可是native不能丢掉

然后在该类中直接调用callbackMobiles()

就能够直接进入到CCLog("測试是否进入");中了

哈哈 结束了,这是本人正在用的游戏中支付的一块代码调用,执行都正常,如有不好的地方望指出

也可进入群:252799892  大家一起交流

假设感觉对你有帮助给个评价

时间: 2024-10-10 21:53:08

关于cocos2d-x 和安卓之间的相互调用的相关文章

内部类和外部类之间的相互调用

内部类: ①静态内部类中可以有非静态的方法 ②当内部类中有静态方法或者静态成员变量时,一定是静态内部类 一般内部类在外部类的成员变量位置,像这样: 1 public class Outer { 2 class Inner{ 3 4 } 5 } 1.外部类访问内部类: 内部类被static修饰:可以直接new Inner in = new Inner(); 内部类没有被static修饰:得先new出来外部类的实例,再new内部类的 Inner in = new Outer().new Inner(

Iframe父页面与子页面之间的相互调用

iframe元素就是文档中的文档. window对象: 浏览器会在其打开一个HTML文档时创建一个对应的window对象.但是,如果一个文档定义了一个或者多个框架(即:包含一个或者多个frame或者iframe标签),浏览器就会为原始文档创建一个window对象,再为每个iframe创建额外的window对象,这些额外的window对象是原始窗口的子窗口. contentWindow: 是指指定的iframe或者iframe所在的window对象 Demo1 父页面fu.html: <!DOCT

uLua学习笔记(三):Unity3D和Lua之间的相互调用

这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可: 1 using LuaInterface; 2 using UnityEngine; 3 4 public class UnityCallLua : Mon

两个java工程之间的相互调用方法

如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种方式:①使用apache的HttpClient方式.②使用JDK自带的java.net包下的HttpURLConnection方式. 这次主要讲解HttpURLConnection方式:HttpURLConnection传递请求常用的有两种方式:POST和GET方式.使用setRequestMeth

Unity与iOS原生代码之间的相互调用

效果: 代码: [GitHub]Unity_iOS_Plugin_Demo 关键: 1.Unity调用iOS: 1.1.在Unity C#中: [ DllImport( "__Internal" )] private static extern int _showSelectTitleDialog ( string title, string msg); 1.2.在Xcode Objective-C中: extern "C" { int _showSelectTit

关于ifram之间的相互调用

window.iframeId.btnClose.click(); 父调子 window.parent.FatherFunciton(); 子调父

ADF12C 一个taskflow绑定了多个managedbean之间的相互调用

Python与Java之间的相互调用——Jython

概述: Jython 是一种可以把两种不同的编程语言结合在一起的工具.首先,它使Python 程序员介入到Java 开发环境并让他们能快速开发方案原型,以便无缝地集成到现有的Java 平台上.其次,它能在Java 中加入脚本语言,并以此来简化数计百万计的Java 程序员的工作.Java 程序员们,再也不用为他们刚写的一个类写一大堆的测试用例或驱动程序.Jython 提供了Python 的大部分功能,以及实例化Java 类并与Java 类交互的功能.Jython 代码被动态地编译成Java 字节码

js和angularjs之间的相互调用

方法一 var element = angular.element($document.getElementById("app")); var controller = element.controller(); var scope = element.scope(); //调用方法 scope.sub1(); //如果需要重新绑定 scope.$apply(); //调用字段 scope.field1; angular.element(domElement).scope() to g