cocos2d-x与安卓混编实现“更换头像”
Cocos2dx与安卓混编实现“更换头像”
cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如:
比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取,裁剪图片,裁剪完成往服务器上传图片功能,从而达到换用户头像的操作的功能;
那么用JniHelper 去调用 andriod java里面的类和方法实现混编就能满足我们操作android系统的各种需求:获取本机MAC地址,获取本机名称,甚至还可去操作android后台服务的复杂操作了;
言归正传,我们需要去写好android 的Activity类,这个类主要功能就是 调用android本地图片,选取,裁剪,裁剪玩往服务器上传图片;先看一下我的目录结构:
下面一个是我们游戏的入口主Cocos2dxActivity,上面一个UserInfoActivity.java则是我们真正需要去调用换头像功能的类;
他包含一个userinfo.xml layer 这方面是android开发的知识;
userinfo.xml视图文件的界面内容是这样的:
具体里面的代码我就不贴了,这里主要不是说怎么搞android开发,整个工程需要的文件图片,我都会上传,大家自取;
以上的UserInfoActivity.java类已经完全实现了上述功能,只需要在工程导入类就行;
ok,功能类实现了,那怎么进行C++调用java呢?,原理是在C++类里面用JniHelper去调用JAVA类里面的某个方法;
现在我想在我C++类里面去调用我游戏入口Cocos2dxActivity(zha_jin_hua.java)里面的一个方法,这个方法主要是执行android的页面跳转,跳转的我的功能类UserInfoActivity.java;
zha_jin_hua.java类方法如下:
- public static Object gotoActivity()
- {
- Intent in = new Intent(zha_jin_hua.getContext(),
- UserInfoActivity.class);
- zha_jin_hua.getContext().startActivity(in);
- return null;
- }
这是一个静态类;返回类型为Object,但是我不需要返回值,因为我执行页面跳转,那如果我的需求是获取android模块代码的值,就可以填写对应的返回类型,就可以进行java和c++的相互传值;
在C++类的头文件需要引入:
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
- #include <jni.h>
- #include "platform/android/jni/JniHelper.h"
- #include <android/log.h>
- #if 1
- #define LOG_TAG "JniHelper"
- #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
- #else
- #define LOGD(...)
- #endif
- #endif
在c++类具体调用时需要如下执行:
- void PersonLayer::onHeadTouched()
- {
- CCLog("玩家点击头像换头像了");
- BaseSoundControl::PlayEffectMusic(EFFECT_CLICK);
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
- JniMethodInfo minfo;
- jobject jobj;
- //getStaticMethodInfo方法是调用静态类的,也可以不用调用静态类的getMethodInfo
- bool b = JniHelper::getStaticMethodInfo(minfo,
- "com.dcgame.zhajinhua.zha_jin_hua", //类路径
- "gotoActivity", //静态方法名
- "()Ljava/lang/Object;");//括号里的是参数,后面的是返回值。
- if(!b){
- CCLog("JniHelper::getMethodInfo error...");
- }else{
- CCLog("ready to invoke method...");
- jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
- }
- #endif
- }
是这样就可以调用Java代码了,去执行了gotoActivity方法,这个方法是静态的,所以用了getStaticMethodInfo,如果不是则用getMethodInfo;
完成以上操作还没完,因为我们调用的是android系统头像,需要用到照相功能,所以还的开启这个功能权限;
在AndroidManifest.xml中添加如下代码:
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-feature android:name="android.hardware.camera" />
- <uses-feature android:name="android.hardware.camera.autofocus" />
- <uses-permission android:name="android.permission.READ_LOGS"/>
还有一个类,的activity的配置:
<activity android:name="com.xxx.xxxxx.UserInfoActivity"></activity>
ok,配置完成,就可以在android实现换头像操作了,效果如下:
相关图片资源,源码下载地址:
百度云:http://pan.baidu.com/share/link?shareid=1525180823&uk=4097703620&third=15
cocos2d-x与安卓混编实现“更换头像”相关推荐
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;...
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/478.html ...
- 明日之后android和ios,明日之后安卓ios互通区有哪些?ios安卓混服区详细介绍
原标题:明日之后安卓ios互通区有哪些?ios安卓混服区详细介绍 明日之后安卓ios是有互通区的,但是昨天安卓平台上线之后,很多安卓玩家找不到互通区服务器,所以今天小编给大家说说游戏中具体的互通服务器 ...
- matlab振动频谱分析是不是要,VB和Matlab混编实现振动信号的频谱分析
VB和Matlab混编实现振动信号的频谱分析 3 0 物理测试 2 O O 4年第 2期 V B和 Ma t l a b混编实现振动信号的频谱分析 谭轶平, 王振清 ( 北京航空航天大学材料学院,北京 ...
- Swift 与 Objective-C混编xxx-Swift.h File not found
在iOS 开发中,由于苹果14年发布了Swift语言,具备简单实用.高效等诸多优点,越来越受开发者青睐.另外,由于Objective-C多年发展和稳定性,有很多框架(特别是商业SDK)采用Object ...
- PIC单片机入门_汇编/混编/C编比较
1.问题描述: 对RAM中从30h开始的50个单元清零. 2.汇编方法 <span style="font-size:18px;">COUNT EQU 20H ;指定2 ...
- 百度App Objective-C/Swift 组件化混编之路(一)
作者丨郭金.陈佳 来源丨百度App技术 一. 背景 1.1 Swift 发展历史 2010 年 7 月,克里斯(Chris Lattner)开始设计 Swift.完成基础架构后,克里斯带领开发小组陆续 ...
- 百度App Objective-C/Swift 组件化混编之路(二)- 工程化
作者丨张渝.郭金 来源丨百度App技术 前文<百度App Objective-C/Swift 组件化混编之路>已经介绍了百度App 引入 Swift 的影响面评估以及落地的实施步骤,本文主 ...
- dart和python混编,Flutter与iOS混编(一)
前言 Flutter和iOS支持两种形式的混编,一种是某一些页面全是用flutter去绘制,另外一只是flutter页面作为iOS某个控制器页面的一部分去展示,后面会逐步去介绍这两种方式的实现 本篇文 ...
- 混编ObjectiveC++
混编ObjectiveC++ http://awhisper.github.io/2016/05/01/%E6%B7%B7%E7%BC%96ObjectiveC/ 转载于:https://www.cn ...
最新文章
- ET001 不可不掌握的 Logstash 使用技巧
- CentOS 6.0 X86_64 下 vsftp 配置过程
- 使用 dotnet watch 开发 ASP.NET Core 应用程序
- Microsoft word 表格居中对齐方法
- qq微信趣味测试小程序源码
- python神器_牛逼啊!一个可以随时随地写Python代码的神器
- 南澳大学计算机科学专业学费,2020年南澳大学学费(本科及研究生)及学费支付方式解析!...
- ps切图技巧、基础工具,使用方法总结
- 童星养成系统的文推荐_戏骨、童星、实力派,《隐秘的角落》全员数据图鉴
- matlab遗传算法外卖配送优化(新的约束条件)【matlab优化算法十六】
- opencv-python将两个文件夹下的照片拼接一起,然后保存
- JavaScript之封装Math函数
- 友元函数,友元类,类模板
- Windows远程桌面(RDP)密码凭证获取 (゚益゚メ) 渗透测试
- Redis第二讲【Redis基本命令和五大数据结构】
- 计算机flash ram是什么意思,ROM、RAM、CPU、CACHE、FLASH的区别
- 计算机内存die,你们说的美光E-DIE其实非常强(C9BJZ)
- 闲谈IPv6-IPv6对移动性的天然支持
- 【EduCoder答案】Scrapy爬虫(二)热门网站数据爬取
- About Orientation
热门文章
- MyBatis注解sql及映射
- pycharm注释快捷键(多行注释快捷键,三引号注释快捷键...)
- 【VBA】数据透视表刷新
- 农业农村部:继续推进“互联网+”现代农业 大力发展农村电商
- centos6部署sock5代理软件dante
- 华为云 云速邮箱教学第一步
- 您认为博士期间最重要的事情是什么?
- IPv6 静态路由及路由汇总 配置与详解
- php authorize,php – Laravel中Request类中authorize方法的目的是什么?
- 电脑开机屏幕闪烁后变成蓝屏无法启动怎么办?