Cocos2d-x3.2中添加Android手机震动
2015-08-11 11:36
691 查看
1、在proj.android这个目录下
AndroidManifest.xml 文件,给app 增加震动权限
<uses-permission android : name = "android.permission.VIBRATE" />
2、 修改android 项目源文件src/org/cocos2dx/lib/Cocos2dxSound.java增加震动方法,调用android底层振动器
/*** @param time 震动时间 */
public void vibrate( long time) {
Vibratorv = (Vibrator) mContext .getSystemService(Context. VIBRATOR_SERVICE);
v.vibrate(time);
}
/** * @param pattern 震动时间数组 EG:{500,200,500,300}* @param repeat 重复次数 */
public void vibrateWithPattern( long [] pattern, int repeat) {
Vibratorv = (Vibrator) mContext .getSystemService(Context. VIBRATOR_SERVICE);
v.vibrate(pattern,repeat);
}
/*** 取消震动 */
public void cancelVibrate() {
Vibratorv = (Vibrator) mContext .getSystemService(Context. VIBRATOR_SERVICE);
v.cancel();
}
3. 至此,java 项目中的修改就OK啦,下面就是在Cocos2d-x中增加JNI方法让C++去掉用Java的震动方法就OK啦!
3.1. 修改 libCocosDenshion 项目中cocos2d-x\CocosDenshion\android\jni文件夹下的SimpleAudioEngineJni.h和SimpleAudioEngineJni.cpp方法
在SimpleAudioEngineJni.h 中添加
#ifndef __SIMPLE_AUDIO_ENGINE_JNI__
#define __SIMPLE_AUDIO_ENGINE_JNI__
#include
extern "C"
{
......
// add thesementhod
extern void vibrateJNI(long long time);
extern void vibrateWithPatternJNI(long long pattern[], intrepeat);
extern void cancelVibrateJNI();
}
#endif // __SIMPLE_AUDIO_ENGINE_JNI__
在SimpleAudioEngineJni.cpp 中添加
// add these jni menthod
void vibrateJNI(long long time)
{
JniMethodInfomethodInfo;
if (! getStaticMethodInfo(methodInfo, "vibrate", "(J)V"))
{
return;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, time);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
void vibrateWithPatternJNI(long long pattern[], int repeat)
{
JniMethodInfomethodInfo;
if (! getStaticMethodInfo(methodInfo, "vibrateWithPattern", "([JI)V"))
{
return;
}
int elements = sizeof(pattern);
jlongArrayjLongArray = methodInfo.env->NewLongArray(elements);
methodInfo.env->SetLongArrayRegion(jLongArray, 0, elements, (jlong*) pattern);
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, jLongArray, repeat);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
void cancelVibrateJNI()
{
JniMethodInfomethodInfo;
if (! getStaticMethodInfo(methodInfo, "cancelVibrate", "()V"))
{
return;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
3.2 修改CocosDenshion/include/SimpleAudioEngine.h 增加如下方法.
void vibrate(long long time);
void vibrateWithPattern(long long pattern[], int repeat);
void cancelVibrate();
3.3 修改CocosDenshion/android/SimpleAudioEngine.cpp 增加调用JNI的如下方法。
void SimpleAudioEngine::vibrate(long long time)
{
vibrateJNI(time);
}
void SimpleAudioEngine::vibrateWithPattern(long long pattern[], int repeat)
{
vibrateWithPatternJNI(pattern, repeat);
}
void SimpleAudioEngine::cancelVibrate()
{
cancelVibrateJNI();
}
4. 至此,代码上的修改都OK 啦,在游戏中需要使用震动的地方调用。
CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrate(time);
CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrateWithPattern(pattern,repeat);
取消震动用这个
CocosDenshion :: SimpleAudioEngine :: sharedEngine () -> cancelVibrate ();
最后在 中加上这个
到这里就圆满完成了,网上的教程没有最后一步,所以说最后一步尤其关键。
源引:http://blog.csdn.net/wxq_wuxingquan/article/details/40054481
AndroidManifest.xml 文件,给app 增加震动权限
<uses-permission android : name = "android.permission.VIBRATE" />
2、 修改android 项目源文件src/org/cocos2dx/lib/Cocos2dxSound.java增加震动方法,调用android底层振动器
/*** @param time 震动时间 */
public void vibrate( long time) {
Vibratorv = (Vibrator) mContext .getSystemService(Context. VIBRATOR_SERVICE);
v.vibrate(time);
}
/** * @param pattern 震动时间数组 EG:{500,200,500,300}* @param repeat 重复次数 */
public void vibrateWithPattern( long [] pattern, int repeat) {
Vibratorv = (Vibrator) mContext .getSystemService(Context. VIBRATOR_SERVICE);
v.vibrate(pattern,repeat);
}
/*** 取消震动 */
public void cancelVibrate() {
Vibratorv = (Vibrator) mContext .getSystemService(Context. VIBRATOR_SERVICE);
v.cancel();
}
3. 至此,java 项目中的修改就OK啦,下面就是在Cocos2d-x中增加JNI方法让C++去掉用Java的震动方法就OK啦!
3.1. 修改 libCocosDenshion 项目中cocos2d-x\CocosDenshion\android\jni文件夹下的SimpleAudioEngineJni.h和SimpleAudioEngineJni.cpp方法
在SimpleAudioEngineJni.h 中添加
#ifndef __SIMPLE_AUDIO_ENGINE_JNI__
#define __SIMPLE_AUDIO_ENGINE_JNI__
#include
extern "C"
{
......
// add thesementhod
extern void vibrateJNI(long long time);
extern void vibrateWithPatternJNI(long long pattern[], intrepeat);
extern void cancelVibrateJNI();
}
#endif // __SIMPLE_AUDIO_ENGINE_JNI__
在SimpleAudioEngineJni.cpp 中添加
// add these jni menthod
void vibrateJNI(long long time)
{
JniMethodInfomethodInfo;
if (! getStaticMethodInfo(methodInfo, "vibrate", "(J)V"))
{
return;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, time);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
void vibrateWithPatternJNI(long long pattern[], int repeat)
{
JniMethodInfomethodInfo;
if (! getStaticMethodInfo(methodInfo, "vibrateWithPattern", "([JI)V"))
{
return;
}
int elements = sizeof(pattern);
jlongArrayjLongArray = methodInfo.env->NewLongArray(elements);
methodInfo.env->SetLongArrayRegion(jLongArray, 0, elements, (jlong*) pattern);
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID, jLongArray, repeat);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
void cancelVibrateJNI()
{
JniMethodInfomethodInfo;
if (! getStaticMethodInfo(methodInfo, "cancelVibrate", "()V"))
{
return;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
3.2 修改CocosDenshion/include/SimpleAudioEngine.h 增加如下方法.
void vibrate(long long time);
void vibrateWithPattern(long long pattern[], int repeat);
void cancelVibrate();
3.3 修改CocosDenshion/android/SimpleAudioEngine.cpp 增加调用JNI的如下方法。
void SimpleAudioEngine::vibrate(long long time)
{
vibrateJNI(time);
}
void SimpleAudioEngine::vibrateWithPattern(long long pattern[], int repeat)
{
vibrateWithPatternJNI(pattern, repeat);
}
void SimpleAudioEngine::cancelVibrate()
{
cancelVibrateJNI();
}
4. 至此,代码上的修改都OK 啦,在游戏中需要使用震动的地方调用。
CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrate(time);
CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrateWithPattern(pattern,repeat);
取消震动用这个
CocosDenshion :: SimpleAudioEngine :: sharedEngine () -> cancelVibrate ();
最后在 中加上这个
到这里就圆满完成了,网上的教程没有最后一步,所以说最后一步尤其关键。
源引:http://blog.csdn.net/wxq_wuxingquan/article/details/40054481
相关文章推荐
- cocos2dx 3.x android平台移植 apk打包教程
- Cocos2d-x实现简单的翻牌效果
- Cocos2d-x中,创建Animate的几种方法
- Cocos2d-x学习笔记(十)—— 缓存机制
- cocos2d-x手机游戏(IOS版本)接入分享shareSDK(新浪微博和微信分享)记录
- Cocos2d-js 3.0 颜色变换(调整sprite/图片的色调)
- Cocos2d-js 3.0 屏幕适配方案 分辨率适应
- 【Cocos2d入门教程四】Cocos2d-x菜单篇
- Cocos2d-x 3.2开发《大富翁》游戏配音
- Cocos2d-x中 SimpleAudioEngine的音频引擎
- cocos2dx 法线贴图编辑器spriteilluminator
- Cocos2d-x中,反转横板游戏里的主角
- 【cocos2d-x 报错异常集】error LNK2019: 无法解析的外部符号
- cocos2d-x 3.7 win7 32+Android 环境配置
- 基于cocos2d-x-3.2学习Box2D(一)
- cocos2dx xcoder 上传APP审核碰到的各种问题整理
- Cocos2d-x学习笔记(六)—— 事件处理
- 9秒学院Cocos2d-X学习之动作特效介绍
- 在mac环境下创建cocos2d-x工程出现"permission Denied"的解决方案
- cocos2dx添加文本的三种方法及适用情况CCLabelTTF,CCLabelBMFont,CCLabelAtlas