標籤:android style blog http color io os 使用 ar
本人宣布從此博文發出後,我的cocos2dx的引擎從cocos2dx3.1.1跳到cocos2dx3.2,哈哈,其實變化不大的,不礙事~~~
下面來說說在cocos中添加Android手機震動的功能,親身體驗,網上的教程都是渣渣啊,坑比的很,還要看了原帖http://www.cocos2d-x.org/boards/6/topics/8179,全英文的,蛋疼惱火了許久,才解決~~
下面進入正題。相信看完本文,什麼問題都ok了!!!!
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();
最後在中加上這個
到這裡就圓滿完成了,網上的教程沒有最後一步,所以說最後一步尤其關鍵。
不懂的可以加我的QQ群: 239982941(cocos2d-x 3.x學習群)歡迎你的到來哦,看了博文給點腳印唄,謝謝啦~~
cocos2d-x3.2中添加Android手機震動