cocos2d-x与安卓混编实现“更换头像”
2016-02-09 11:22
501 查看
Cocos2dx与安卓混编实现“更换头像”
标签: cocos2d-x安卓2014-07-13 17:13 1601人阅读 评论(0) 收藏 举报
![](http://static.blog.csdn.net/images/category_icon.jpg)
分类:
Cocos2d-x学习笔记(30)
![](http://static.blog.csdn.net/images/arrow_triangle%20_down.jpg)
cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如:
比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取,裁剪图片,裁剪完成往服务器上传图片功能,从而达到换用户头像的操作的功能;
那么用JniHelper 去调用 andriod java里面的类和方法实现混编就能满足我们操作android系统的各种需求:获取本机MAC地址,获取本机名称,甚至还可去操作android后台服务的复杂操作了;
言归正传,我们需要去写好android 的Activity类,这个类主要功能就是 调用android本地图片,选取,裁剪,裁剪玩往服务器上传图片;先看一下我的目录结构:
![](http://images.cnitblog.com/blog/147686/201401/221616157726.png)
下面一个是我们游戏的入口主Cocos2dxActivity,上面一个UserInfoActivity.java则是我们真正需要去调用换头像功能的类;
他包含一个userinfo.xml layer 这方面是android开发的知识;
![](http://images.cnitblog.com/blog/147686/201401/221622151164.png)
userinfo.xml视图文件的界面内容是这样的:
![](http://images.cnitblog.com/blog/147686/201401/221625380697.png)
具体里面的代码我就不贴了,这里主要不是说怎么搞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
![](https://code.csdn.net/assets/CODE_ico.png)
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++类的头文件需要引入:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
#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++类具体调用时需要如下执行:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
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中添加如下代码:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
<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://images.cnitblog.com/blog/147686/201401/221706502722.png)
![](http://images.cnitblog.com/blog/147686/201401/221707140540.png)
![](http://images.cnitblog.com/blog/147686/201401/221707340381.png)
![](http://images.cnitblog.com/blog/147686/201401/221707580383.png)
相关图片资源,源码下载地址:
百度云:http://pan.baidu.com/share/link?shareid=1525180823&uk=4097703620&third=15
相关文章推荐
- cocos2d-x3.2 的UserDefault
- Cocos2d-x 3.2在mac下android的环境配置
- cocos2d-x 帧动画创建一
- cocos2dx3.2 异步加载和动态加载
- cocos2dx3.0 超级马里奥开发笔记(一)——loadingbar、TableView和pageview的使用
- 【Cocos2d-x源码分析】 UserDefault如何保存本地数据
- 【玩转cocos2d-x之四十】怎样在Cocos2d-x 3.0中使用opengl shader?
- cocos2d-x 3.1 集成 云风pbc
- Cocos2d-x 常用特效 Effect API
- Cocos2d-x常用动作 Action API
- cocos2dx 3.3 AssetsManager测试更新
- cocos2d-x 3.0 新特性样例
- CocosCreator你又从新燃起我对Cocos的激情!
- CocosCreator你又从新燃起我对Cocos的激情!
- 如何使用cygwin去编译cocos2dx项目中的C++文件
- 关于cocos2dx的C++调用创建项目
- 每天一点点----项目中關鍵字 “ collectgarbage”
- 【COCOS CREATOR 系列教程之四】基于0.7.1先简单制作一个PAGEVIEW
- 【COCOS CREATOR 系列教程之三】PREFAB讲解&CC项目如何多开与分享
- 【COCOS CREATOR 系列教程之三】PREFAB讲解&CC项目如何多开与分享