Cocos2d-x添加Android手机震动

前端之家收集整理的这篇文章主要介绍了Cocos2d-x添加Android手机震动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、在proj.android这个目录下


AndroidManifest.xml文件,给app增加震动权限

<uses-permission android:name="android.permission.VIBRATE"/>

2、修改android项目源文件src/org/cocos2dx/lib/Cocos2dxSound.java增加震动方法调用android底层振动器

/***@paramtime震动时间*/

publicvoidvibrate(longtime) {

Vibratorv = (Vibrator)mContext.getSystemService(Context.VIBRATOR_SERVICE);

v.vibrate(time);

}

/** *@parampattern震动时间数组EG:{500,200,500,300}*@paramrepeat重复次数*/

publicvoidvibrateWithPattern(long[] pattern,intrepeat) {

v.vibrate(pattern,repeat);

/***取消震动*/

publicvoidcancelVibrate() {

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)

int elements = sizeof(pattern);

jlongArrayjLongArray = methodInfo.env->NewLongArray(elements);

methodInfo.env->SetLongArrayRegion(jLongArray,elements,(jlong*) pattern);

void cancelVibrateJNI()

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[],sans-serif"> vibrateWithPatternJNI(pattern,sans-serif"> void SimpleAudioEngine::cancelVibrate()

cancelVibrateJNI();

4.至此,代码上的修改都OK啦,在游戏中需要使用震动的地方调用

CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrate(time);

CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrateWithPattern(pattern,sans-serif"> 取消震动用这个

CocosDenshion::SimpleAudioEngine::sharedEngine()->cancelVibrate();

原文链接:https://www.f2er.com/cocos2dx/344254.html

猜你在找的Cocos2d-x相关文章