怎麼用 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;
進行提問,放心吧 ,我一定會耐心解答的!