本人宣布从此博文发出后,我的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();

最后在中加上这个

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3hxX3d1eGluZ3F1YW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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学习群)欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~

cocos2d-x3.2中加入Android手机震动的更多相关文章

  1. 开发中,android手机WIFI无法使用,无SIM卡故障解决

    用eclipse 开发android中,突然出现,android手机WIFI无法使用,无SIM卡故障解决 发现故障后,想办法刷机(没有成功),触点清洁都搞了. 最后恢复出厂设置居然解决了,留资料给同行 ...

  2. android手机震动

    Vibrator是安卓提供的震动器,其没有构造器,通过getSystemService(Context.VIBRATOR_SERVICE)方法获取对象.但使用此类时需要在清单文件中添加访问权限andr ...

  3. Android 手机震动功能实现

    1首先在AndroidManifest.xml中添加震动权限 <uses-permission android:name="android.permission.VIBRATE&quo ...

  4. Cocos2d-x添加Android手机震动

    这个震动需要调用adnroid系统的方法,所以需要C++调用java,JNI这里就不多做介绍了,需要的可以自己去查找下相关资料,如果你只是需要实现这个功能,相信你看完本文,应该就OK了! 1.首先,修 ...

  5. Android 手机震动 设置震动时间

    开启震动,单次,5秒: Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); //震动5秒 vibrator.vibra ...

  6. Android 手机震动

    1.添加震动权限 <uses-permission android:name="android.permission.VIBRATE"/> 2.获取震动服务 Vibra ...

  7. Android中Chronometer 计时器和震动服务控件

    Chronometer 计时器控件 首先在布局文件中添加chronometer控件:然后在mainActivity中获取到该控件 4 然后通过Button时间监听器中开启计时操作 5 chronome ...

  8. [android] 手机卫士输入框抖动和手机震动

    查看apiDemos,找到View/Animation/shake找到对应的动画代码,直接拷贝过来 当导入一个项目的时候,报R文件不存在,很多情况是xml文件出错了 Animation shake = ...

  9. 【Android】Android如何实现手机震动

    实现手机震动其实很简单,手机震动使用是Vibrator类,然后震动也是需要权限的,在使用之前在AndroidManifest.xml文件中添加 <uses-permission android: ...

随机推荐

  1. 运行PHP

    /usr/local/php/bin/php /home/www/index.php

  2. C#调用Java方法

    C#调用Java方法(详细实例) 阅读目录 C#调用c++ C#调用JAVA方法 C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具 ...

  3. Qt探秘——谈ui文件的用法

    转载自:点击打开链接http://blog.csdn.net/luo_isaiah/article/details/5794973 相信用过Qt Designer的朋友,对Qt Project中的.u ...

  4. SiteMesh

    1.导入对SiteMesh.jar的依赖 <dependency>      <groupId>org.sitemesh</groupId>      <ar ...

  5. IT第十九天 - 继承、接口、多态、面向对象的编程思想

    IT第十九天 上午 继承 1.一般情况下,子类在继承父类时,会调用父类中的无参构造方法,即默认的构造方法:如果在父类中只写了有参的构造方法,这时如果在子类中继承时,就会出现报错,原因是子类继承父类时无 ...

  6. Java 如何判断一个字符是否是数字或字母

    在C++中, 可以用isdigit()判断一个字符是否是数字,可以用isalpha()判断一个字符是否是字母,还有很多,都在<cctype>头文件中 而类似的方法在JAVA中,则主要是Ch ...

  7. poj 2346 Lucky tickets(区间dp)

    题目链接:http://poj.org/problem?id=2346 思路分析:使用动态规划解法:设函数 d( n, x )代表长度为n且满足左边n/2位的和减去右边n/2位的和为x的数的数目. 将 ...

  8. 菜鸟系列之C/C++经典试题(七)

    找含单链表的环入口点 :怎样推断单链表中是否存在环(即下图中从结点E到结点R组成的环)? ,则在low进入环后继续绕环遍历一周之前fast必定能与low重合(且必定是第一次重合).于是函数可写例如以下 ...

  9. Performance Tuning guide 翻译 || Performance Tuning Guide 11G中新增特性

    CSDN 对格式支持比較弱.能够到http://user.qzone.qq.com/88285879/blog/1399382878 看一致的内容. Performance Tuning Guide  ...

  10. AJAX同步与异步

    今天来大概说说AJAX中的同步与异步.其实,就我的理解,同步与异步的区别就是程序执行过程中是否有等待. 同步:意思就是js代码加载到当前的 AJAX时候,会等待AJAX代码执行完毕后再开始加载其他代码 ...