cocos2dx 弹出 android 对话框

来源:互联网 发布:阿里旺旺国际版 mac 编辑:程序博客网 时间:2024/05/20 09:26

参考链接:  http://www.2cto.com/kf/201410/347637.html

1:  android端  proj.android/jni/hellocpp/ 下新建MyDialog类

//test.h#ifndef _MyDialog_H_#define _MyDialog_H_extern "C"{void showExitDialog(const char* title,const char* msg);}#endif
//MyDialog.cpp#include "MyDialog.h"#include "cocos2d.h"#include "platform/android/jni/JniHelper.h"//引擎提供的JniHelper类#include "../../../Classes/JNI/JniDialog.h"//相对路径,上一步在Xcode中创建的类#define CLASS_NAME "org/cocos2dx/cpp/JniDialogHelper"//这步的路径即是上面红线的路径,很重要using namespace cocos2d;extern "C"{//下面的函数通过Jni调用Java层的函数。//在HelloWorldScene中调用该处的此函数,此函数在通过Jni传到Java层    //调用Java层JniTestHelper.java中的showExitDialog函数void showExitDialog(const char* title,const char* msg){JniMethodInfo t;//该函数的意思就是,寻找org/cocos2dx/cpp/JniTestHelper类中有无静态函数showExitDialog,暂时还没有放出JniTestHelper的代码,稍后。if(JniHelper::getStaticMethodInfo(t,CLASS_NAME,"showExitDialog","(Ljava/lang/String;Ljava/lang/String;)V")){jstring jTitle = t.env->NewStringUTF(title);jstring jMsg   = t.env->NewStringUTF(msg);t.env->CallStaticVoidMethod(t.classID,t.methodID,jTitle,jMsg);t.env->DeleteLocalRef(jTitle);t.env->DeleteLocalRef(jMsg);}}//以下两个函数,是通过Jni调用C++层的setPackageName和exitApp,Java层的两个函数在JniTestHelper中定义,参数通过JNIEnv传入void Java_org_cocos2dx_cpp_JniDialogHelper_setPackageName(JNIEnv* env,jobject thiz,jstring packageName){//utf-8const char* pkgName = env->GetStringUTFChars(packageName,NULL);setPackageName(pkgName);//C++层代码env->ReleaseStringUTFChars(packageName,pkgName);}void Java_org_cocos2dx_cpp_JniDialogHelper_exitApp(JNIEnv* env,jobject thiz){exitApp();//C++层代码}}

2: cocos2dx目录 Classes/JNI/ 下新建JniDialog类
#pragma  once#ifndef __JniDialog__#define __JniDialog__#include "cocos2d.h"USING_NS_CC;/*退出对话框@date : 2016.09.26*/void setPackageName(const char* packageName)//从Java层传过来的包名在此处打印出来{log("packageName = %s", packageName);}void exitApp()//Java层调用C++层的该函数,关闭程序。{Director::getInstance()->end();}#endif
3: coocs端使用如下:

//头文件包含,判断平台
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "../../../proj.android/jni/hellocpp/MyDialog.h"  //一定是相对路径
#endif

void Game::onKeyReleased(EventKeyboard::KeyCode keycode, Event* event){auto dictionary = Dictionary::createWithContentsOfFile("xml/jni/ExitApp.xml");const char* title = ((CCString*)dictionary->objectForKey("dialog_title"))->getCString();const char* message = ((CCString*)dictionary->objectForKey("dialog_message"))->getCString();FileUtils::getInstance()->getWritablePath();switch (keycode){case EventKeyboard::KeyCode::KEY_BACK:{#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //showExitDialog("Exit", "Are you sure to Exit"); /* jni返回给java的字符串,c/c++首先应该负责把这个字符串变成UTF-8或者UTF-16格式, 然后通过NewStringUTF或者NewString来把它封装成jstring,返回给java就可以了。 */ showExitDialog(title, message);#endif#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif}break;default:break;}}


0 0
原创粉丝点击