Cocos2dx与安卓混编实现“更换头像”

标签: cocos2d-x安卓
2014-07-13 17:13  1601人阅读  评论(0)  收藏  举报
  分类:
Cocos2d-x学习笔记(30) 

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类方法如下:

[java]  view plain  copy  
  1. public static Object gotoActivity()
  2. {
  3. Intent in = new Intent(zha_jin_hua.getContext(),
  4. UserInfoActivity.class);
  5. zha_jin_hua.getContext().startActivity(in);
  6. return null;
  7. }

这是一个静态类;返回类型为Object,但是我不需要返回值,因为我执行页面跳转,那如果我的需求是获取android模块代码的值,就可以填写对应的返回类型,就可以进行java和c++的相互传值;

在C++类的头文件需要引入:

[java]  view plain  copy  
  1. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
  2. #include <jni.h>
  3. #include "platform/android/jni/JniHelper.h"
  4. #include <android/log.h>
  5. #if 1
  6. #define  LOG_TAG    "JniHelper"
  7. #define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
  8. #else
  9. #define  LOGD(...)
  10. #endif
  11. #endif

在c++类具体调用时需要如下执行:

[java]  view plain  copy  
  1. void PersonLayer::onHeadTouched()
  2. {
  3. CCLog("玩家点击头像换头像了");
  4. BaseSoundControl::PlayEffectMusic(EFFECT_CLICK);
  5. #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
  6. JniMethodInfo minfo;
  7. jobject jobj;
  8. //getStaticMethodInfo方法是调用静态类的,也可以不用调用静态类的getMethodInfo
  9. bool b = JniHelper::getStaticMethodInfo(minfo,
  10. "com.dcgame.zhajinhua.zha_jin_hua", //类路径
  11. "gotoActivity", //静态方法名
  12. "()Ljava/lang/Object;");//括号里的是参数,后面的是返回值。
  13. if(!b){
  14. CCLog("JniHelper::getMethodInfo error...");
  15. }else{
  16. CCLog("ready to invoke method...");
  17. jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
  18. }
  19. #endif
  20. }

是这样就可以调用Java代码了,去执行了gotoActivity方法,这个方法是静态的,所以用了getStaticMethodInfo,如果不是则用getMethodInfo;

完成以上操作还没完,因为我们调用的是android系统头像,需要用到照相功能,所以还的开启这个功能权限;

在AndroidManifest.xml中添加如下代码:

[java]  view plain  copy  
  1. <uses-permission android:name="android.permission.CAMERA" />
  2. <uses-feature android:name="android.hardware.camera" />
  3. <uses-feature android:name="android.hardware.camera.autofocus" />
  4. <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与安卓混编实现“更换头像”相关推荐

  1. 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/478.html ...

  2. 明日之后android和ios,明日之后安卓ios互通区有哪些?ios安卓混服区详细介绍

    原标题:明日之后安卓ios互通区有哪些?ios安卓混服区详细介绍 明日之后安卓ios是有互通区的,但是昨天安卓平台上线之后,很多安卓玩家找不到互通区服务器,所以今天小编给大家说说游戏中具体的互通服务器 ...

  3. matlab振动频谱分析是不是要,VB和Matlab混编实现振动信号的频谱分析

    VB和Matlab混编实现振动信号的频谱分析 3 0 物理测试 2 O O 4年第 2期 V B和 Ma t l a b混编实现振动信号的频谱分析 谭轶平, 王振清 ( 北京航空航天大学材料学院,北京 ...

  4. Swift 与 Objective-C混编xxx-Swift.h File not found

    在iOS 开发中,由于苹果14年发布了Swift语言,具备简单实用.高效等诸多优点,越来越受开发者青睐.另外,由于Objective-C多年发展和稳定性,有很多框架(特别是商业SDK)采用Object ...

  5. PIC单片机入门_汇编/混编/C编比较

    1.问题描述: 对RAM中从30h开始的50个单元清零. 2.汇编方法 <span style="font-size:18px;">COUNT EQU 20H ;指定2 ...

  6. 百度App Objective-C/Swift 组件化混编之路(一)

    作者丨郭金.陈佳 来源丨百度App技术 一. 背景 1.1 Swift 发展历史 2010 年 7 月,克里斯(Chris Lattner)开始设计 Swift.完成基础架构后,克里斯带领开发小组陆续 ...

  7. 百度App Objective-C/Swift 组件化混编之路(二)- 工程化

    作者丨张渝.郭金 来源丨百度App技术 前文<百度App Objective-C/Swift 组件化混编之路>已经介绍了百度App 引入 Swift 的影响面评估以及落地的实施步骤,本文主 ...

  8. dart和python混编,Flutter与iOS混编(一)

    前言 Flutter和iOS支持两种形式的混编,一种是某一些页面全是用flutter去绘制,另外一只是flutter页面作为iOS某个控制器页面的一部分去展示,后面会逐步去介绍这两种方式的实现 本篇文 ...

  9. 混编ObjectiveC++

    混编ObjectiveC++ http://awhisper.github.io/2016/05/01/%E6%B7%B7%E7%BC%96ObjectiveC/ 转载于:https://www.cn ...

最新文章

  1. ET001 不可不掌握的 Logstash 使用技巧
  2. CentOS 6.0 X86_64 下 vsftp 配置过程
  3. 使用 dotnet watch 开发 ASP.NET Core 应用程序
  4. Microsoft word 表格居中对齐方法
  5. qq微信趣味测试小程序源码
  6. python神器_牛逼啊!一个可以随时随地写Python代码的神器
  7. 南澳大学计算机科学专业学费,2020年南澳大学学费(本科及研究生)及学费支付方式解析!...
  8. ps切图技巧、基础工具,使用方法总结
  9. 童星养成系统的文推荐_戏骨、童星、实力派,《隐秘的角落》全员数据图鉴
  10. matlab遗传算法外卖配送优化(新的约束条件)【matlab优化算法十六】
  11. opencv-python将两个文件夹下的照片拼接一起,然后保存
  12. JavaScript之封装Math函数
  13. 友元函数,友元类,类模板
  14. Windows远程桌面(RDP)密码凭证获取 (゚益゚メ) 渗透测试
  15. Redis第二讲【Redis基本命令和五大数据结构】
  16. 计算机flash ram是什么意思,ROM、RAM、CPU、CACHE、FLASH的区别
  17. 计算机内存die,你们说的美光E-DIE其实非常强(C9BJZ)
  18. 闲谈IPv6-IPv6对移动性的天然支持
  19. 【EduCoder答案】Scrapy爬虫(二)热门网站数据爬取
  20. About Orientation

热门文章

  1. MyBatis注解sql及映射
  2. pycharm注释快捷键(多行注释快捷键,三引号注释快捷键...)
  3. 【VBA】数据透视表刷新
  4. 农业农村部:继续推进“互联网+”现代农业 大力发展农村电商
  5. centos6部署sock5代理软件dante
  6. 华为云 云速邮箱教学第一步
  7. 您认为博士期间最重要的事情是什么?
  8. IPv6 静态路由及路由汇总 配置与详解
  9. php authorize,php – Laravel中Request类中authorize方法的目的是什么?
  10. 电脑开机屏幕闪烁后变成蓝屏无法启动怎么办?