Cocos2d-x添加一个按钮弹出一个android对话框

Cocos2d-x中提供了一个JniHelper类来让我们对Jni进行操作。

(PS:弄了一天想自己写代码操作Jni的,但是总是出错,技术差不得不使用Cocos2d-x现成的了)。


我们有一个Android工程 :CocosDemoAndroid

还有一个Win32工程:Cocos2dDemo.win32

这个是必备的。。。

在C++ Win32工程中有一个Scene,点击按钮调用Jni函数。

  1. voidCallJni::getInputCallBack(CCObject*pSender)
  2. {
  3. g_AndroidPlatform.showDialog();
  4. }

这个 g_AndroidPlatform.showDialog(); 在这个函数里面 使用JniHelper类来使用Jni


  1. voidAndroidPlatform::showDialog()
  2. {
  3. CCLog("showDialog");
  4. #ifdefANDROID
  5. //下面是利用jnihelper类来调用AndroidStatic
  6. JniMethodInfomethodInfo;//jni函数信息结构体
  7. /*getStaticMethodInfo获取到MethodId和ClassId,ClassID通过穿进去的Activity即类名获取,MethodId通过函数名获取*/
  8. boolisHave=JniHelper::getStaticMethodInfo(methodInfo,"com/example/cocosdemoandroid/MainActivity","showMessage","()V");
  9. if(isHave)
  10. {
  11. /*调用这个函数*/
  12. methodInfo.env->CallStaticVoidMethod(methodInfo.classID,methodInfo.methodID);
  13. }
  14. #endif
  15. }

C++层关键的代码就是这两个了,在使用JniHelper的时候不要忘记加上头文件

copy
    #include<jni.h>
  1. #include"platform/android/jni/J


下面来看Android层代码了。

从上面的C++代码中也能看得出来

工程包名 : com.example.cocosdemoandroid

Activity:MainActivity

  1. publicclassMainActivityextendsCocos2dxActivity{
  2. staticContextmContext;
  3. /*****消息类型****/
  4. privatestaticfinalintSHOW_MESSAGE=0;
  5. staticHandlerhandler=newHandler()
  6. {
  7. @Override
  8. voidhandleMessage(Messagemsg)
  9. //接受消息然后去做相应的事情
  10. if(msg.what==SHOW_MESSAGE)
  11. Log.d("CocosDemoAndroid",String.valueOf(msg.obj));//获取到Handler传递的参数数据
  12. AlertDialog.Builderbuilder=newBuilder(mContext);
  13. builder.setTitle("C++调用Android");
  14. builder.setMessage("C++调用Android显示弹出框");
  15. builder.show();
  16. }
  17. super.handleMessage(msg);
  18. };
  19. protectedvoidonCreate(BundlesavedInstanceState){
  20. super.onCreate(savedInstanceState);
  21. mContext=MainActivity.this;
  22. }
  23. booleanonCreateOptionsMenu(Menumenu){
  24. //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
  25. getMenuInflater().inflate(R.menu.main,menu);
  26. returntrue;
  27. voidshowMessage()
  28. Log.d("showMessage","showMessage");
  29. Messagemsg=newMessage();
  30. msg.what=SHOW_MESSAGE;
  31. msg.obj="showmessagedemos";//可以传递参数
  32. handler.sendMessage(msg);
  33. nativeintInitJni();
  34. static
  35. System.loadLibrary("CocosDemo");
  36. }

对于Android:

为什么要使用Handle sendMessage()??

因为如果直接在showMessage中弹出提示框,会崩溃提示Can'tcreatehandleinsidethreadthathasnotcalledLooper.prepare()

最后上效果图


转载来自:http://blog.csdn.net/huutu/article/details/11726675

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...