怎么用 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" void Vibrator::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 }
void Vibrator::cancelVibrate() { #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) JniMethodInfo t; if (JniHelper::getStaticMethodInfo(t,"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; 进行提问,放心吧 ,我一定会耐心解答的! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |