cocos2dx震动实现
发布时间:2020-12-14 20:48:36 所属栏目:百科 来源:网络整理
导读:根据网上总结,自己亲自实现了的,90%靠谱率 一:c++端 1,修改CocosDenshionandroidjni目录下的两个文件SimpleAudioEngineJni.cpp,SimpleAudioEngineJni.h SimpleAudioEngineJni.h 增加内容 span style="white-space:pre"/spanextern void vibrateJNI(lo
根据网上总结,自己亲自实现了的,90%靠谱率 一:c++端 1,修改CocosDenshionandroidjni目录下的两个文件SimpleAudioEngineJni.cpp,SimpleAudioEngineJni.h SimpleAudioEngineJni.h 增加内容 <span style="white-space:pre"> </span>extern void vibrateJNI(long long time); extern void vibrateWithPatternJNI(long long pattern[],int repeat); extern void cancelVibrateJNI();SimpleAudioEngineJni.cpp 增加内容(实现) <span style="white-space:pre"> </span>void vibrateJNI(long long time) { JniMethodInfo methodInfo; 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) { JniMethodInfo methodInfo; if (! getStaticMethodInfo(methodInfo,"vibrateWithPattern","([JI)V")) { return; } int elements = sizeof(pattern); jlongArray jLongArray = methodInfo.env->NewLongArray(elements); methodInfo.env->SetLongArrayRegion(jLongArray,elements,(jlong*) pattern); methodInfo.env->CallStaticVoidMethod(methodInfo.classID,jLongArray,repeat); methodInfo.env->DeleteLocalRef(methodInfo.classID); } void cancelVibrateJNI() { JniMethodInfo methodInfo; if (! getStaticMethodInfo(methodInfo,"cancelVibrate","()V")) { return; } methodInfo.env->CallStaticVoidMethod(methodInfo.classID,methodInfo.methodID); methodInfo.env->DeleteLocalRef(methodInfo.classID); }2,在CocosDenshioninclude下SimpleAudioEngine.h增加如下内容(就是声明,你懂的)
<span style="white-space:pre"> </span>void vibrate(long long time); void vibrateWithPattern(long long pattern[],int repeat); void cancelVibrate();3 到这里其实有效的部分已经完成了,但是还要增加win32相应地方,因为我们的代码毕竟是在windows平台上编译,所以调用还是会调用CocosDenshionwin32下的方法,所以还要在目录CocosDenshionwin32下增加如下代码 void SimpleAudioEngine::vibrate(long long time) { } void SimpleAudioEngine::vibrateWithPattern(long long pattern[],int repeat) { } void SimpleAudioEngine::cancelVibrate() { } 空函数就可以了,不需要实现,这里只是为了之后可以编译链接(其实是链接)的时候可以通过,找到函数而已。 当然也可以不写这些东西,那么在调用震动方法的代码地方加上平台判断也可以#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 也可以。 二、 android端 AndroidManifest.xml中加震动权限 <uses-permission android:name="android.permission.VIBRATE" />
编辑org.cocos2dx.lib下的Cocos2dxSound.java文件,增加如下内容
/*** @param time 震动时间*/ public void vibrate(long time) { Vibrator v = (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) { Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); v.vibrate(pattern,repeat); } /*** 取消震动 */ public void cancelVibrate() { Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); v.cancel(); }在文件Cocos2dxHelper.java中增加如下内容
//vibrate 相关 public static void vibrate(long time){ Cocos2dxSound cocos2dxsound = new Cocos2dxSound(sContext); cocos2dxsound.vibrate(time); } public static void vibrateWithPattern(long[] pattern,int repeat){ Cocos2dxSound cocos2dxsound = new Cocos2dxSound(sContext); cocos2dxsound.vibrateWithPattern(pattern,repeat); } public static void cancelVibrate() { Cocos2dxSound cocos2dxsound = new Cocos2dxSound(sContext); cocos2dxsound.cancelVibrate(); }OK了,准备代码完成了 调用,就用下面的了
CocosDenshion
::
SimpleAudioEngine
::
sharedEngine
(
)
->
vibrate
(
time
)
;
vibrateWithPattern
pattern
,
repeat
;
CocosDenshion
::
SimpleAudioEngine
::
sharedEngine
(
)
->
cancelVibrate
)
;
完成! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |