cocos2dx - 安卓蓝牙游戏(c++调用)
上次写的蓝牙对战游戏先把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++调用)相关推荐
- 关于便携式打印机程序开发(一、原生安卓蓝牙调用)
关于便携式打印机程序开发(一.原生安卓蓝牙调用) 综述 软硬件 SDK集成到项目 CPCL协议开发 综述 使用android程序,调用蓝牙,和打印机配对之后,可以连接打印机,通过(WIFI.蓝牙.US ...
- 用Cocos2dx开发棋牌游戏的观点解析
众所周知,目前棋牌游戏特别的火.很多游戏公司都想在这一块赚钱,可是却不知用什么软件比较好的去开发棋牌游戏,对此,我列出了两款比较靠谱的软件去开发棋牌游戏,希望对大家有帮助! 第一款软件是cocos2d ...
- Cocos2d-x使用iOS游戏内付费IAP(C++篇)
source file url: http://www.tairan.com/archives/5515 Cocos2d-x使用iOS游戏内付费IAP(C++篇) 前期准备 设备与账号 在开始编码之前 ...
- 1.cocos2dx记忆卡片游戏代码、并将游戏移植到“华为荣耀”手机上、移植中的问题总结
1记忆卡片游戏代码 CardItem.h #pragmaonce #ifndef__CardItem_H__ #define__CardItem_H__ #include"cocos2 ...
- Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)...
随着 Android 系统的应用和游戏越来越丰富,甚至有些比起Windows.Mac上的软件更加好用好玩,因此很多人都希望能在电脑上也能玩到安卓的游戏或APP. 我们曾推荐过 BlueStacks,而 ...
- 7、Cocos2dx 3.0游戏开发找小三之3.0版本号的代码风格
重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27691337 Cocos2d-x代码风格 前面我们已 ...
- 用cocos2d-android开发android游戏时调用box2d中的native本地函数问题
用cocos2d-android开发android游戏时调用box2d中的new World(Vector2,boolean)时,出现如下报错: "java.lang.Unsatisfied ...
- 基于cocos2d-x引擎的游戏框架设计【转载】
http://www.cnblogs.com/lancidie/archive/2013/03/18/2965564.html 基于cocos2d-x引擎的游戏框架设计 移动互联网浪潮正在彻底改变人们 ...
- 安卓小游戏:飞机大战
安卓小游戏:飞机大战 前言 前面写了十二篇自定义view的博客,说实话写的还是有点无聊了,最近调整了一下,觉得还是要对开发有热情,就写了点小游戏,现在抽时间把博客也写一写,希望读者喜欢. 需求 这里就 ...
最新文章
- BackboneFast
- sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题
- c# 获取所有的进程的cpu使用率_Linux CPU使用率很高,但为啥却找不到高CPU的进程
- python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹
- PostgreSQL学习手册(系统表)
- Python编码规范:IF中的多行条件
- hdu5126stars
- Android O 7.0 启动优化的一些思路
- idea安装行号快速定位行快捷键以及设置方法
- 基于java的作业管理系统_基于java的作业管理系统
- 自动安装 Java Access Bridge 2.0.2 的批处理脚本
- java中Date和DateFormat、SimpleDateFormat类
- CSS3 浮动与定位
- 根据[user]查找所有者为[user]的文件列表
- VMware之虚拟机迁移
- 引入ELK前需要知道的“坑”(上)
- Ubuntu U盘启动出现“Failed to load ldlinux.c32”解决
- MySQL Buffer Pool缓冲池总结
- Fusion360删除圆角,把圆角变回直角/Remove Fillets
- 性能监视器 Performance Monitor-对SQLSERVER进行性能监控
热门文章
- 集中合同管理与分散合同管理
- 基于STC89C52单片机的智能车控制系统设计
- 小程序里面,view button组件设置display为inline-block,会上下错开
- python爱心代码_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
- ZYNQ7035使用FDMA读写PL DDR
- jee mysql 驱动_eclipsejee怎么连接mysql数据库
- STM32F407高级定时器TIM8_CH1N输出PWM配置
- ros:如何获得地图坐标系中的某一点的像素坐标
- JavaWeb学习之HttpServletRequest
- 乐视三合一体感摄像头(Orbbec Astra Pro)在ROS下安装使用