展会信息港展会大全

Cocos2d-x通过Jni实现Cocos2d-x界面跳转到新的Activity
来源:互联网   发布日期:2015-09-27 15:27:13   浏览:1930次  

导读: 废话不多说,直接上源码 1、Java层 1)首先在org.cocos2dx.cpp目录下添加新类UserInfoActivity.java,该类自行定义即可,代码如下: package ...

废话不多说,直接上源码

1、Java层

1)首先在org.cocos2dx.cpp目录下添加新类UserInfoActivity.java,该类自行定义即可,代码如下:

package org.cocos2dx.cpp;

import com.pactera.jni.R;//注意路径

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView;

import android.content.Intent;

public class UserInfoActivity extends Activity

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.userinfo);

Intent intent = getIntent();

String string = intent.getStringExtra("name");

TextView textView = new TextView(this);

textView.setTextSize(40);

textView.setText(string);

setContentView(textView);

}

}2)AppActivity.java类

package org.cocos2dx.cpp;

import org.cocos2dx.lib.Cocos2dxActivity;

import org.cocos2dx.lib.Cocos2dxGLSurfaceView;

import android.content.Intent;

import android.os.Bundle;

public class AppActivity extends Cocos2dxActivity{

public static final int SHOW_DIALOG = 0x0001;

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

}

//设置OpenGL的相关信息

public Cocos2dxGLSurfaceView onCreateView() {

Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);

// GuideLayer should create stencil buffer

glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);

return glSurfaceView;

}

//加载Cocos2d-x的库

static {

System.loadLibrary("cocos2dcpp");

}

public static void Share(){//Jni的Java层nativa代码,在Jni目录下的test.cpp实现,并被C++调用

Intent intent = new Intent();

intent.setClass(AppActivity.getContext(), UserInfoActivity.class);

intent.putExtra("name", "Hello World");

AppActivity.getContext().startActivity(intent);

}

}

2、Jni层

jni目录下添加test类的.h和.cpp

test.h

#ifndef TEST_H_

#define TEST_H_

extern "C"

{

//C++调Java的函数接口,该方法在HelloWorldScene中menuCallback函数中使用。

void Share();

}

#endiftest.cpp

#include "test.h"

#include "cocos2d.h"

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

#include "../../../Classes/JniTest.h"

#include

//#define CLASS_NAME "org/cocos2dx/cpp/JniTestHelper"

#define CLASS_NAMENEW "org/cocos2dx/cpp/AppActivity"

using namespace cocos2d;

extern "C"

{

void Share()

{

bool hasMethod;

JniMethodInfo t;

hasMethod = JniHelper::getStaticMethodInfo(t,CLASS_NAMENEW,"Share","()V");

if(hasMethod)

{

log("Share function");

if(t.methodID)

{

t.env->CallStaticVoidMethod(t.classID,t.methodID);

log("function share() was called");

}else{

log("function share was not called");

}

}else

{

log("function share was not found");

}

}

}

3、C++层

void HelloWorld::menuCloseCallback(Ref* pSender)

{

#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

Share();

#endif

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

exit(0);

#endif

}

4、注意事项

添加平台判断头文件#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include "../proj.android/jni/hellocpp/test.h"

#endif

5、运行结果

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港