上次写的蓝牙对战游戏先把c++ 调用的代码也贴上来

其实上次的就是核心代码,c++ 调用就是用jni通信
流程为 服务端打开蓝牙等待联机

客户端打开蓝牙,搜索蓝牙,选择指定服务端蓝牙,联机成功后通信

//打开服务端

JniMethodInfo info;jobject jobj;if(JniHelper::getStaticMethodInfo(info,"org/cocos2dx/cpp/AppActivity","getInstance","()Ljava/lang/Object;")){jobj = info.env->CallStaticObjectMethod(info.classID,info.methodID);}
<pre name="code" class="html">if(JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","openBlueToot","(I)Ljava/lang/String;")){jstring jstr = (jstring)info.env->CallObjectMethod(jobj,info.methodID,1);std::string text = JniHelper::jstring2string(jstr);   if (text != "0"){//Bluetooth is opened
<span style="white-space:pre">                  </span>//打开服务器if(JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","buildServerConnect","()V"));{info.env->CallVoidMethod(jobj,info.methodID);}                   }   }else{//Failed to open Bluetooth;               }

//打开客户端 ,连接服务器,搜索蓝牙设备

<pre name="code" class="html">JniMethodInfo info;jobject jobj;if(JniHelper::getStaticMethodInfo(info,"org/cocos2dx/cpp/AppActivity","getInstance","()Ljava/lang/Object;")){jobj = info.env->CallStaticObjectMethod(info.classID,info.methodID);}if(JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","openBlueToot","(I)Ljava/lang/String;")){jstring jstr = (jstring)info.env->CallObjectMethod(jobj,info.methodID,2);std::string text = JniHelper::jstring2string(jstr);   if (text != "0"){                if(JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","findBuleToots","()V")){info.env->CallVoidMethod(jobj,info.methodID);}                 }   }else{//open blue failed}

//服务端搜索到蓝牙向c++发送数据

<pre name="code" class="html">#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
extern "C"{void Java_org_cocos2dx_cpp_AppActivity_get(JNIEnv*  env, jobject thiz){}void Java_org_cocos2dx_cpp_AppActivity_set(JNIEnv*  env, jobject thiz,jint ji){i = ji+1;  }void Java_org_cocos2dx_cpp_AppActivity_StringFromJni(JNIEnv*  env, jobject thiz,jstring userList){int i;        jclass cls_arraylist = env->GetObjectClass(userList);           jmethodID arraylist_get = env->GetMethodID(cls_arraylist,"get","(I)Ljava/lang/Object;");  jmethodID arraylist_size = env->GetMethodID(cls_arraylist,"size","()I");  jint len = env->CallIntMethod(userList,arraylist_size);  for(i=0;i<len;i++){  jobject obj_user = env->CallObjectMethod(userList,arraylist_get,i);  jclass cls_user = env->GetObjectClass(obj_user);  jmethodID user_getName = env->GetMethodID(cls_user,"getName","()Ljava/lang/String;");  jmethodID user_getaddress = env->GetMethodID(cls_user,"getAddress","()Ljava/lang/String;");  jstring name = (jstring)env->CallObjectMethod(obj_user,user_getName);  jstring address = (jstring)env->CallObjectMethod(obj_user,user_getaddress);  jboolean b = true;  const char *nameStr = env->GetStringUTFChars(name,&b);  const char *addressStr = env->GetStringUTFChars(address,&b);  log("********************Name:%s; ",nameStr);  log("********************addres:%s; ",addressStr); }}//传递数据void Java_org_cocos2dx_cpp_AppActivity_SendTo(JNIEnv*  env, jobject thiz,jstring msg){const char *pkgName = env->GetStringUTFChars(msg, NULL);log("***************************************::Sendto ::%s",pkgName);env->ReleaseStringUTFChars(msg, pkgName);}}

//连接蓝牙设备

<pre name="code" class="html">JniMethodInfo info;jobject jobj;if(JniHelper::getStaticMethodInfo(info,"org/cocos2dx/cpp/AppActivity","getInstance","()Ljava/lang/Object;")){jobj = info.env->CallStaticObjectMethod(info.classID,info.methodID);if(JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","chooseBlueDevice","(Ljava/lang/String;)V"));{jobject para = info.env->NewStringUTF(address);info.env->CallVoidMethod(jobj,info.methodID,para);}}

//连接成功之后就可以通信传递数据用于游戏的的通信了

//java 向c++<span style="font-family: Arial, Helvetica, sans-serif;">通信</span>
<pre name="code" class="html">extern "C"{void Java_org_cocos2dx_cpp_AppActivity_SendMsgForServer(JNIEnv*  env, jobject thiz,jstring msg){const char *pkgName = env->GetStringUTFChars(msg, NULL);log("***************************************::SendMsgForServer ::%s",pkgName);
<span style="white-space:pre">      </span>std::vector<std::string> vv;
<span style="white-space:pre">      </span>//分割字符串HelloWorld::getInstance()->split(pkgName,"_",vv);if(vv.at(0).c_str() == std::string("ClientThread")){return;}else if(vv.at(0).c_str() == std::string("Connect")){//连接成功}
     env->ReleaseStringUTFChars(msg, pkgName);}
}
//c++ 向java通信
void ServerGame::sendToMsg(const char* str)
{#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) JniMethodInfo info;jobject jobj;if(JniHelper::getStaticMethodInfo(info,"org/cocos2dx/cpp/AppActivity","getInstance","()Ljava/lang/Object;")){jobj = info.env->CallStaticObjectMethod(info.classID,info.methodID);}if(JniHelper::getMethodInfo(info,"org/cocos2dx/cpp/AppActivity","sendMessageHandle","(Ljava/lang/String;)V"));{jobject para = info.env->NewStringUTF(str);info.env->CallVoidMethod(jobj,info.methodID,para);}#endif
}

//客户端和服务端通信的代码都一样的

cocos2dx - 安卓蓝牙游戏(c++调用)相关推荐

  1. 关于便携式打印机程序开发(一、原生安卓蓝牙调用)

    关于便携式打印机程序开发(一.原生安卓蓝牙调用) 综述 软硬件 SDK集成到项目 CPCL协议开发 综述 使用android程序,调用蓝牙,和打印机配对之后,可以连接打印机,通过(WIFI.蓝牙.US ...

  2. 用Cocos2dx开发棋牌游戏的观点解析

    众所周知,目前棋牌游戏特别的火.很多游戏公司都想在这一块赚钱,可是却不知用什么软件比较好的去开发棋牌游戏,对此,我列出了两款比较靠谱的软件去开发棋牌游戏,希望对大家有帮助! 第一款软件是cocos2d ...

  3. Cocos2d-x使用iOS游戏内付费IAP(C++篇)

    source file url: http://www.tairan.com/archives/5515 Cocos2d-x使用iOS游戏内付费IAP(C++篇) 前期准备 设备与账号 在开始编码之前 ...

  4. 1.cocos2dx记忆卡片游戏代码、并将游戏移植到“华为荣耀”手机上、移植中的问题总结

     1记忆卡片游戏代码 CardItem.h #pragmaonce #ifndef__CardItem_H__ #define__CardItem_H__ #include"cocos2 ...

  5. Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)...

    随着 Android 系统的应用和游戏越来越丰富,甚至有些比起Windows.Mac上的软件更加好用好玩,因此很多人都希望能在电脑上也能玩到安卓的游戏或APP. 我们曾推荐过 BlueStacks,而 ...

  6. 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...

  7. 用cocos2d-android开发android游戏时调用box2d中的native本地函数问题

    用cocos2d-android开发android游戏时调用box2d中的new World(Vector2,boolean)时,出现如下报错: "java.lang.Unsatisfied ...

  8. 基于cocos2d-x引擎的游戏框架设计【转载】

    http://www.cnblogs.com/lancidie/archive/2013/03/18/2965564.html 基于cocos2d-x引擎的游戏框架设计 移动互联网浪潮正在彻底改变人们 ...

  9. 安卓小游戏:飞机大战

    安卓小游戏:飞机大战 前言 前面写了十二篇自定义view的博客,说实话写的还是有点无聊了,最近调整了一下,觉得还是要对开发有热情,就写了点小游戏,现在抽时间把博客也写一写,希望读者喜欢. 需求 这里就 ...

最新文章

  1. BackboneFast
  2. sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题
  3. c# 获取所有的进程的cpu使用率_Linux CPU使用率很高,但为啥却找不到高CPU的进程
  4. python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹
  5. PostgreSQL学习手册(系统表)
  6. Python编码规范:IF中的多行条件
  7. hdu5126stars
  8. Android O 7.0 启动优化的一些思路
  9. idea安装行号快速定位行快捷键以及设置方法
  10. 基于java的作业管理系统_基于java的作业管理系统
  11. 自动安装 Java Access Bridge 2.0.2 的批处理脚本
  12. java中Date和DateFormat、SimpleDateFormat类
  13. CSS3 浮动与定位
  14. 根据[user]查找所有者为[user]的文件列表
  15. VMware之虚拟机迁移
  16. 引入ELK前需要知道的“坑”(上)
  17. Ubuntu U盘启动出现“Failed to load ldlinux.c32”解决
  18. MySQL Buffer Pool缓冲池总结
  19. Fusion360删除圆角,把圆角变回直角/Remove Fillets
  20. 性能监视器 Performance Monitor-对SQLSERVER进行性能监控

热门文章

  1. 集中合同管理与分散合同管理
  2. 基于STC89C52单片机的智能车控制系统设计
  3. 小程序里面,view button组件设置display为inline-block,会上下错开
  4. python爱心代码_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
  5. ZYNQ7035使用FDMA读写PL DDR
  6. jee mysql 驱动_eclipsejee怎么连接mysql数据库
  7. STM32F407高级定时器TIM8_CH1N输出PWM配置
  8. ros:如何获得地图坐标系中的某一点的像素坐标
  9. JavaWeb学习之HttpServletRequest
  10. 乐视三合一体感摄像头(Orbbec Astra Pro)在ROS下安装使用