`
donnki
  • 浏览: 45771 次
  • 性别: Icon_minigender_1
  • 来自: 火星
文章分类
社区版块
存档分类
最新评论

在cocos2dx里访问/互调android里的activity方法/变量

 
阅读更多
不得不感叹下COCOS2DX的强大。。同一份游戏代码不加改动的可以放到android和iphone上面。

而最近在往ANDROID上放的时候,需要集成其它非官方运营渠道的API,而对方提供的API是jar包。所以需要在cocos2dx C++源文件中调用JAVA的API,因此有了以下DEMO代码:

activity里有如下定义:
public void cppCall_nonStatic_logsth(){
//非静态方法
		Log.i("cppCall_nonStatic", "test2~~~~!!!");
	}

	public static Object cppCall_logsth(){
//静态方法
		Log.i("cppCall", "test~~~~!!!");
		return activity;
	}


AppDelegate.cpp里:
加上预定义(for android)
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include <JniHelper.h>
#include <android/log.h>

#if 1
#define  LOG_TAG    "JniHelper"
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#else
#define  LOGD(...) 
#endif

#endif


关键代码片段:
JniMethodInfo minfo;
    jobject jobj;
    bool b = JniHelper::getStaticMethodInfo(minfo, 
        "com/loy/puzzles/Puzzles",  //类路径
        "cppCall_logsth",   //静态方法名
        "()Ljava/lang/Object;");   //括号里的是参数,后面的是返回值。
    if (!b) {
        LOGD("JniHelper::getStaticMethodInfo error...");
    }else{
        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
    }
    
    JniHelper::getMethodInfo(minfo,
        "com/loy/puzzles/Puzzles", 
        "cppCall_nonStatic_logsth", 
        "()V");
    if(!b){
        LOGD("JniHelper::getMethodInfo error...");
    }else{
        LOGD("ready to invoke method...");
        minfo.env->CallVoidMethod(jobj, minfo.methodID);
    }


最终LOGCAT打印日志如下:

12-29 12:46:33.891: D/JniHelper(2008): testing~~~
12-29 12:46:33.891: I/cppCall(2008): test~~~~!!!
12-29 12:46:33.891: D/JniHelper(2008): ready to invoke method...
12-29 12:46:33.891: I/cppCall_nonStatic(2008): test2~~~~!!!
12-29 12:46:33.891: D/JniHelper(2008): testing over~~~

即表示调用成功。
分享到:
评论

相关推荐

    Android和Cocos2dx间互调的方法

    标题所述的知识点为在Cocos2dx环境下如何实现与Android平台的交互,即Cocos2dx与Android间如何互调。Cocos2dx是一个开源的游戏开发引擎,它提供了多种编程语言的接口,其中C++是其主要支持语言。而Android平台上的...

    android项目中嵌入cocos2dx项目demo

    在Android项目中嵌入Cocos2dx项目是一个常见的需求,特别是在开发混合式游戏或应用时。Cocos2dx是一款高效的游戏开发框架,它基于C++,同时提供了Java、Objective-C和Swift的接口,使得开发者可以方便地在Android和...

    cocos2dx 2.x 开发 示例游戏合集_C++_代码_下载

    cocos2dx 2.x 开发示例游戏合集 效果展示: https://github.com/pdpdds/cocos2dx-dev/blob/master/img/snap0215.jpg https://github.com/pdpdds/cocos2dx-dev/blob/master/img/snap0216.jpg ...

    将Cocos2dx从win32移植到android平台 不用cygwin

    2. 配置环境变量:确保你的系统路径中包含了Android SDK和NDK的路径,这样命令行工具可以访问它们。 **第二步:设置Cocos2d-x** 1. 获取Cocos2d-x源码:从Cocos2d-x官方网站或者GitHub仓库下载最新版本的源码,并...

    cocos2dx 编译到 android

    cocos2dx 编译到 android cocos2dx 是一个跨平台的游戏引擎,它支持多种平台,包括 Android、iOS、Windows 等。为了将 cocos2dx 编译到 Android 平台,需要进行以下步骤: 首先,需要安装 Eclipse、SDK 和 NDK。...

    cocos2dx环境变量设置脚本

    cocos2dx编译运行环境变量设置脚本,使用需要注意将脚本放在cocos/android_sdk/ndk/ant相关目录的同级目录,并且需要修改脚本中对应资源的文件名

    cocos2dx-2.x播放mp4

    在Cocos2dx 2.x版本中播放MP4格式的视频文件是一项常见的需求,尤其是在开发游戏或者多媒体应用时。Cocos2dx是一个基于C++的游戏开发框架,它提供了丰富的功能来帮助开发者创建2D和3D游戏。在这个场景中,我们将深入...

    cocos2dx android编译java文件

    Cocos2dx的Java层通常会继承自`org.cocos2dx.lib.Cocos2dxActivity`,这个基类已经实现了大部分Android Activity的生命周期回调,如`onCreate()`, `onResume()`等,开发者可以根据需要覆盖这些方法。 - **资源管理*...

    cocos2dx 游戏开发系列之三 源码

    通过这样的示例,你可以学习如何在Windows环境下构建和运行Android游戏,了解cocos2dx在不同平台上的兼容性和调试技巧。 总的来说,cocos2dx提供的源码和Android工程创建能力,使得开发者能够轻松地进行跨平台游戏...

    cocos2dx 工具之CocosBuilder

    Cocos2dx是一个广泛使用的开源游戏开发框架,基于C++,支持跨平台的游戏开发,适用于iOS、Android、Windows等多个平台。在Cocos2dx的生态系统中,有一系列强大的辅助工具,大大提升了开发效率,其中CocosBuilder就是...

    Cocos2dx中UIWebView替换为WKWebView

    在iOS开发中,Cocos2dx是一个广泛使用的游戏开发框架,它允许开发者创建跨平台的2D和3D游戏。然而,随着Apple对App Store审核政策的调整,使用UIWebView的App将不再被接受,因为Apple已经将其列为弃用API。在2020年...

    基于cocos2dx的一个小例子

    《基于Cocos2dx的游戏开发实例解析》 Cocos2dx是一个开源的游戏开发框架,它基于C++,并提供对多种编程语言的支持,包括Lua和JavaScript。本实例以"基于cocos2dx的一个小例子"为主题,展示了如何利用Cocos2dx进行...

    cocos2dx3.x游戏开发之旅电子版

    在Cocos2dx 3.x版本中,框架进行了诸多优化和改进,提高了性能,简化了API,使得开发者能够更高效地创建2D游戏。这本书将带你深入理解Cocos2dx 3.x的核心概念,包括场景(Scene)、层(Layer)、节点(Node)、精灵...

    cocos2dx斗地主服务端,客户端在我的资源列表中

    在游戏开发领域,Cocos2dx是一款广泛使用的开源游戏引擎,它基于C++,并提供了对多种平台的支持,包括iOS。本资源包含了斗地主游戏的服务端和客户端代码,这为我们提供了一个深入理解如何构建一款跨平台游戏的机会。...

    iconv cocos2dx android 库

    在Android平台上开发Cocos2dx游戏时,经常会遇到字符编码问题,特别是在处理中文字符时。"iconv cocos2dx android 库"就是为了解决这个问题而存在的,它提供了一个跨平台的字符编码转换工具,使得在UTF-8和GBK之间...

    SublimeText启动cocos2dx3.0项目

    在开始配置之前,你需要确保已经按照`README.txt`的说明正确设置你的环境变量,包括Cocos2dx的安装路径和Lua解释器的路径。这些配置对于`run.py`的正确执行至关重要。`README.txt`通常会详细说明如何修改这些路径,...

    cocoscreator嵌入原生Android1

    在 Android 项目中添加 libcocos2dx 依赖模板,首先需要在 `File` 菜单中选择 `New` &gt; `Import Module`,然后选择 CocosCreator 项目中的 `cocos2d-x\cocos\platform\android\java` 目录下的 `libcocos2dx` 模板。...

    cocos2dx集成protobuf android版

    在Android平台上集成Cocos2dx与Protobuf,可以实现高效的数据交换和序列化,提升游戏性能。 首先,让我们详细了解一下如何在Cocos2dx项目中集成protobuf。这通常包括以下几个步骤: 1. **下载与安装protobuf**:你...

    cocos2dx下可用的,验证文件MD5代码及使用方法

    下面将详细介绍如何在Cocos2dx环境下实现文件MD5校验的代码及其使用方法。 首先,`MD5ChecksumDefines.cpp` 和 `MD5ChecksumDefines.h` 文件可能包含了用于计算MD5校验和的相关定义和宏。例如,它们可能包含了计算...

    cocos2dx 2048

    “cocos2dx 2048”是一个基于cocos2dx框架开发的流行数字拼图游戏,它仿照了2048游戏的玩法,通过编程技术将2D图形、动画和逻辑控制融合在一起,为玩家提供了趣味且富有挑战性的游戏体验。cocos2dx是一款开源的游戏...

Global site tag (gtag.js) - Google Analytics