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-xCocosDenshionandroidjni文件夹下的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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |