博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x3.2中加入Android手机震动
阅读量:4878 次
发布时间:2019-06-11

本文共 3707 字,大约阅读时间需要 12 分钟。

       本人宣布从此博文发出后,我的cocos2dx的引擎从cocos2dx3.1.1跳到cocos2dx3.2,哈哈,事实上变化不大的,不碍事~~~

      以下来说说在cocos中加入Android手机震动的功能。亲身体验,网上的教程都是渣渣啊。坑比的非常,还要看了原帖,全英文的。蛋疼恼火了许久,才解决~~

      以下进入正题。相信看完本文,什么问题都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();

最后在中加上这个

Coco2dxHelper.java中

public static void vibrate(long time)

{
sCocos2dSound.vibrate(time);
}
public static void vibrateWithPattern(long[] pattern, int repeat) {
sCocos2dSound.vibrateWithPattern(pattern, repeat);
}
/**
* 取消震动

到这里就圆满完毕了,网上的教程没有最后一步。所以说最后一步尤其关键。

本人cocos2dx 2.x和3.x的源代码淘宝地址(欢迎大家光顾):https://shop141567464.taobao.com/?spm=a313o.7775905.1998679131.d0011.pzUIU4

不懂的能够加我的QQ群: 239982941(cocos2d-x 3.x学习群)欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~

转载于:https://www.cnblogs.com/zfyouxi/p/5157456.html

你可能感兴趣的文章
免费下载知网文献的方法 | sci-hub免费下载SCI论文方法
查看>>
测试用例,变量之间,相互调用的方法,和修改原来初始化变量的方法
查看>>
ASP.NET MVC中将控制器分离到类库的实现(转)
查看>>
Poj 2304 Combination Lock(模拟顺、逆时钟开组合锁)
查看>>
Palindrome Number
查看>>
H5上传功能
查看>>
three.js尝试(二)模拟游戏开发:3D人物在地图上行走
查看>>
PHP命名空间(Namespace)的使用详解
查看>>
java项目@override报错问题
查看>>
DataTable 和Json 字符串互转
查看>>
Django中Template does not exit
查看>>
Redis安装 java中的连接 序列化 反序列化
查看>>
hdu 1896 优先队列的应用
查看>>
递推和迭代的比较
查看>>
12306HTTP请求过程
查看>>
加快mysql数据库导入
查看>>
位运算
查看>>
有意思的网站
查看>>
HTML 常见代码整合;
查看>>
【php】文件系统
查看>>