1. 程式人生 > >怎麼用 Cocos2d- 3.x 實現 手機震動

怎麼用 Cocos2d- 3.x 實現 手機震動

在很多時候,我們都看到很多遊戲裡面有手機震動的這種效果,今天給大家分享一下怎麼用Cocos2d-3.x實現手機震動。

廢話不多說,直接進入主題,請看

1、首先你需要建一個Coco2dx的專案,確保當前專案能打包到Android手機上,並沒有錯誤

2、建立一個Vibrator的類,然後在.hpp裡面實現:

#ifndef Vibrator_hpp

#define Vibrator_hpp

#include <stdio.h>

#include "cocos2d.h"

USING_NS_CC;

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include <jni.h>

#include <android/log.h>

#include "platform/android/jni/JniHelper.h"

#define  CLASS_NAME "org/cocos2dx/lib/Cocos2dxHelper"

#endif

class Vibrator

{

public:

    //震動時間

staticvoid vibrate(int time);

   /***取消震動*/

staticvoid cancelVibrate();

};

#endif /* Vibrator_hpp */


在這裡面主要是定義這兩個靜態方法

2、vibrator.cpp裡面實現該方法:

#include "Vibrator.hpp"

voidVibrator::vibrate(int time)

{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    JniMethodInfo t;

if (JniHelper::getStaticMethodInfo(t, CLASS_NAME,"vibrate","(I)V"))

    {

        t.env->CallStaticVoidMethod(t.classID, t.methodID, time);

        t.env->DeleteLocalRef(t.classID);

    }

#endif

}

voidVibrator::cancelVibrate()

{

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

    JniMethodInfo t;

if (JniHelper::getStaticMethodInfo(t, CLASS_NAME,"cancelVibrate","()V"))

    {

        t.env->CallStaticVoidMethod(t.classID, t.methodID);

        t.env->DeleteLocalRef(t.classID);

    }

#endif

}

4、我專門寫了一個按鈕來呼叫該方法進行測試,然後回撥的時候呼叫:

不過前提條件肯定是得先引用它的標頭檔案 "Vibrator.hpp";

然後如圖:

4、把專案匯入eclipse以後,在編譯的過程中,需要把該檔案也進行編譯,如圖:



5、我們需要在Android手機中新增以下許可權,需要在專案的AndroidManifest.xml檔案中新增以下程式碼:

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

圖:


6、雖然上面的這些都完成了,但是我們還需要在java中去呼叫這些方法,那麼我們應該怎麼去呼叫呢?

首先我們開啟專案下/ src / org.coco2dx.lib /檔案下的Cocos2dxHelper.java檔案,在這類中我們需要新增以下程式碼:

import android.os.Vibrator;毋庸置疑,這個是必須要匯入的;

然後新增:

    public static void vibrate(int vibrateTime) {

    Vibrator vib = (Vibrator) sActivity.getSystemService(Service.VIBRATOR_SERVICE);

vib.vibrate(vibrateTime);

}

public staticvoid cancelVibrate() {

Vibrator vib = (Vibrator) sActivity.getSystemService(Service.VIBRATOR_SERVICE);

vib.cancel();

這兩個方法在該類中進行呼叫,如圖:



如果這些都操作完成以後,那麼如果操作沒有任何的錯誤,現在就可以正常的運行了。

7、把該專案進行編譯,然後用手機除錯,恭喜你,到這一步,證明你已經成功了。

如果在以上有任何的問題或者是沒有實現的,可以加我QQ,或者加群:83459374;

進行提問,放心吧  ,我一定會耐心解答的!