Cocos2d-x调用Java最终实例代码

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

HelloWorldScene.cpp

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#endif

using namespace cocos2d;
using namespace CocosDenshion;

CCScene* HelloWorld::scene()
{
    // 'scene' is an autorelease object
    CCScene *scene = CCScene::create();
    
    // 'layer' is an autorelease object
    HelloWorld *layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it's an autorelease object
    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
                                        "CloseNormal.png",
                                        "CloseSelected.png",
                                        this,
                                        menu_selector(HelloWorld::menuCloseCallback) );
    pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );

    // create menu, it's an autorelease object
    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
    pMenu->setPosition( CCPointZero );
    this->addChild(pMenu, 1);

    /////////////////////////////
    // 3. add your codes below...

    // add a label shows "Hello World"
    // create and initialize a label
    CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Thonburi", 34);

    // ask director the window size
    CCSize size = CCDirector::sharedDirector()->getWinSize();

    // position the label on the center of the screen
    pLabel->setPosition( ccp(size.width / 2, size.height - 20) );

    // add the label as a child to this layer
    this->addChild(pLabel, 1);

    // add "HelloWorld" splash screen"
    CCSprite* pSprite = CCSprite::create("HelloWorld.png");

    // position the sprite on the center of the screen
    pSprite->setPosition( ccp(size.width/2, size.height/2) );

    // add the sprite as a child to this layer
    this->addChild(pSprite, 0);
    
    // JNI call test
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

	//////////////////////////////////////////////////////////////////
	// #1 : 静态,无参数,无返回值
	// #2 : 静态,有参数,无返回值
	// #3 : 静态,有参数,有返回值
	// #4 : 非静态,无参数,无返回值
	// #5 : 非静态,有参数,无返回值
	// #6 : 非静态,有参数,有返回值
	//////////////////////////////////////////////////////////////////
	
    JniMethodInfo minfo;
    
    // #1
	if (JniHelper::getStaticMethodInfo(minfo,"com/chen/FunctionTester",
		"TF_S_NP_NR", "()V"))
	{
        minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
    }
    
    // #2
    if(JniHelper::getStaticMethodInfo(minfo, "com/chen/FunctionTester",
		"TF_S_HP_NR","(I)V")) 
    {    
        minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,5);  
    }  
    
    // #3
    if (JniHelper::getStaticMethodInfo(minfo, "com/chen/FunctionTester",
		"TF_S_HP_HR","(I)I"))
	{
		jint __result;
		__result = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID, 5);
	}
	
	// 非静态方法的调用需要从一个静态方法中获得非静态方法所属的对象。也就是说,调用了一
	// 个返回值类型为java.lang.Object的静态方法
	jobject jobj;
	
	// #4
	if (JniHelper::getStaticMethodInfo(minfo, "com/chen/FunctionTester", 
		"getInstance", "()Ljava/lang/Object;"))
	{
		jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
		if (JniHelper::getMethodInfo(minfo, "com/chen/FunctionTester",
			"TF_US_NP_NR", "()V"))
		{
			 minfo.env->CallVoidMethod(jobj, minfo.methodID);
		}
	}
	                                           
#endif
    
    
    return true;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    CCDirector::sharedDirector()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

FunctionTester.java

package com.chen;

public class FunctionTester {
	
	// 在调用非静态方法的时候,需要获得方法属于哪一个对象,所以必须有一个静态的实例。
	// 而且,这个实例没有办法直接访问,所以必须定义一个静态方法来获得这个实例
	// 这个实例必须以Object类型进行输出
	public static FunctionTester tester = null;
	public static Object getInstance(){
		if (tester == null){
			tester = new FunctionTester();
		}
		return tester;
	}

	/////////////////////////////////////////////////////////////////////////
	// #1 : 静态,无参数,无返回值
	// #2 : 静态,有参数,无返回值
	// #3 : 静态,有参数,有返回值
	// #4 : 非静态,无参数,无返回值
	// #5 : 非静态,有参数,无返回值
	// #6 : 非静态,有参数,有返回值
	/////////////////////////////////////////////////////////////////////////
	
	// #1
	public static void TF_S_NP_NR(){
		System.out.println("CALLED: TF_S_NP_NR"); 
	}
	
	// #2
	public static void TF_S_HP_NR(int _para){
		System.out.println("CALLED: TF_S_HP_NR, PARA: " + _para);
	}
	
	// #3
	public static int TF_S_HP_HR(int _para){
		System.out.println("CALLED: TF_S_HP_HR, PARA: " + _para);
		return 0;
	}
	
	// #4
	public void TF_US_NP_NR(){
		System.out.println("CALLED: TF_US_NP_NR");
	}
	
	// #5
	public void TF_US_HP_NR(int _para){
		System.out.println("CALLED: TF_US_HP_NR, PARA: " + _para);
	}
	
	// #6
	public int TF_US_HP_HR(int _para){
		System.out.println("CALLED: TF_US_HP_HR, PARA: " + _para);
		return 0;
	}
}




cocos2d-x和android相互调用 1.准备环境工作,在项目目录下新建自己的MyApplication,MyActivity,MyAllSdk,MyBroadcastReceiver的java文件:在MyApplication.Java中添加代码:package com.OYHP; import android.app.Application; public class MyApplication extends Applica... 阅读详情

相关推荐

Cocos2d-x与Android利用JNI相互调用

Cocos与Android利用JNI相互调用

sgn132的专栏 4558

cocos2dx 3.3工程,C++通过JNI与Java相互调用

最近游戏中要接入移动MM的SDK,研究了下c++与Java的相互调用cocos2dx3.3的工程。新建一个工程,把class和proj.android覆盖可以导入eclipse下跑了。

cocos2d-x 7】介绍两本关于cocos2d-x开发的书籍

从学习cocos2d-x以来,买了几本书 1  Cocos2d-x 3.X手游开发实例详解 http://product.dangdang.com/23563764.html 2 Cocos2d-x高级开发教程:制作自己的《捕鱼达人》 http://product.dangdang.com/snapshot.php?product_id=23253529&version=3:6-2:1

HongHuer的专栏 5631

cocos2dx android编译java文件

cocos2dx android编译用java文件

cocos2d-x调用java接口详解

cocos2d-x调用java接口 1. jni.h , F:\cocos2d-x-3.2\cocos\platform\android\jni\jni\JniHelper.h 2. 如果jni.h没有,去C:\Program Files\Java\jdk1.7.0_05\include\jni.h and C:\Program Files\Java\jdk1.7.0_05\include\win32\jni_md.h copy to VS setup path VC/include 3. 4.

翻肚鱼儿的博客 688

Cocos2d-x调用Java

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】原文链接: http://www.himigame.com/android-game/725.html 很多看过之前Himi的【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可! 博

StupidCodeGenerator的专栏 5810

Cocos2d-x利用jni调用java代码

jni的意思是java本地调用,通过jni可以实现java代码和其他语言写得代码进行交互。在cocos2d-x中,如果想要在c++层调用java层的代码,就是通过jni技术。通过调用java层的代码,我们就可以在Android平台下实现一些引擎没有提供给我们的功能,或者做一些其他的功能。比如加个广告,加个分享,调用Android原生的对话框等等吧。Cocos2d-x比较人性化的是为我们封装了jn

Future Of Magic 9801

cocos2dx java混编_cocos2dx java调用c++

搜索热词在做支付接入时,大都采用cocos2d-x 的jnihelper调用java实现接入,但光c++调java是不够的, 如第三方写的支付接口 支付成功了他们有一个onSuccess事件,可是这个方法是写在java端的AppActivity.java里的,但实际给用户加钱是写在cocos2d-x c++工程里的,java怎么通知c++工程支付成功了?发消息显然不可能,sdk没提供这个接口,只好...

weixin_36185512的博客 359

cocos 调用java_cocos2dx 调用java代码

1.导入头文件#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include #include "android/log.h"#include "platform/android/jni/JniHelper.h"#endif2.详尽代码JniMethodInfo minfo;//JniHelper/* 测试用方法 *//*bool isHave = J...

weixin_39766910的博客 300

cocos-java实例_Cocos2d-x调用Java最终实例代码

HelloWorldScene.cpp#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include #include "platform/android/jni/JniHelper.h"#include #endifusing nam...

weixin_35183690的博客 319

C++ 调用 Java Cocos2d-x利用jni调用java代码

JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)所以我们需要引用JNI头文件。(引入前做一下平台判断) #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include #include "platform/android/jni/JniHelper.h"

zhanghow的博客 601

cocos2dx与java之间的相互调用

cocos2dx接移动sdk的时候 常常要处理回调函数 需要相互调用

cocos2d-x 通过JNI实现c/c++和Android的java层函数互调-源码

cocos2d-x 通过JNI实现c/c++和Android的java层函数互调-源码 详情请移步到:http://codingnow.cn/program/992.html

Cocos2d-Java跨平台游戏引擎

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

cocos2d-x 中多线程的c/c++代码通过JNI调用java代码

Cocos2dx 的多线程c/c++通过JNI调用java代码

wu4long的专栏 4481

cocos2d-x c 调用java_cocos2d-x中使用JNI的调用JAVA方法

cocos2d-x发布Android项目时,都应该知道要用JAVA与C/C++进行交互时会涉及到JNI的操作(Java Native Interface)。JNI是JAVA的一个通用接口,旨在本地化语言(如CC++)与JAVA语言进行交互,在交互过程成中,JAVA调用的是已编译好的本地化语言的二进制代码(如Windows下的dll,Linux下的so文件),所以在交叉编译时看到Eclipse的控...

weixin_35049095的博客 284

cocos java调用c_cocos2d-x 中java调用c/c++函数

cocos2d-x 中java调用c/c++函数这个是在JniHelper的基础上添加的,可以对比者看,java中的函数是backAction,主要调用的函数JNIEXPORT void JNICALL Java_org_cocos2dx_Game_JavaHelper_backAction(JNIEnv *env, jobject thiz, jstring key, jstring messa...

weixin_30305727的博客 200
上一篇: 开始编写Cocosd-x对Java进行调用的测试代码
下一篇: Dialog not displaying when calling from JNI
垃圾桶
博客等级 码龄14年 20粉丝 18原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值