cocos2d-x3.2中添加Android手機震動

來源:互聯網
上載者:User

標籤: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手機震動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.