cocos2d-x3.2中加入Android手机震动
本人宣布从此博文发出后,我的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手机震动的更多相关文章
- 开发中,android手机WIFI无法使用,无SIM卡故障解决
用eclipse 开发android中,突然出现,android手机WIFI无法使用,无SIM卡故障解决 发现故障后,想办法刷机(没有成功),触点清洁都搞了. 最后恢复出厂设置居然解决了,留资料给同行 ...
- android手机震动
Vibrator是安卓提供的震动器,其没有构造器,通过getSystemService(Context.VIBRATOR_SERVICE)方法获取对象.但使用此类时需要在清单文件中添加访问权限andr ...
- Android 手机震动功能实现
1首先在AndroidManifest.xml中添加震动权限 <uses-permission android:name="android.permission.VIBRATE&quo ...
- Cocos2d-x添加Android手机震动
这个震动需要调用adnroid系统的方法,所以需要C++调用java,JNI这里就不多做介绍了,需要的可以自己去查找下相关资料,如果你只是需要实现这个功能,相信你看完本文,应该就OK了! 1.首先,修 ...
- Android 手机震动 设置震动时间
开启震动,单次,5秒: Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); //震动5秒 vibrator.vibra ...
- Android 手机震动
1.添加震动权限 <uses-permission android:name="android.permission.VIBRATE"/> 2.获取震动服务 Vibra ...
- Android中Chronometer 计时器和震动服务控件
Chronometer 计时器控件 首先在布局文件中添加chronometer控件:然后在mainActivity中获取到该控件 4 然后通过Button时间监听器中开启计时操作 5 chronome ...
- [android] 手机卫士输入框抖动和手机震动
查看apiDemos,找到View/Animation/shake找到对应的动画代码,直接拷贝过来 当导入一个项目的时候,报R文件不存在,很多情况是xml文件出错了 Animation shake = ...
- 【Android】Android如何实现手机震动
实现手机震动其实很简单,手机震动使用是Vibrator类,然后震动也是需要权限的,在使用之前在AndroidManifest.xml文件中添加 <uses-permission android: ...
随机推荐
- Android之判断设备网络连接状态,并判断连接方式
在Android开发过程中,对于一个需要连接网络的Android设备,对设备的网络状态检测是很有必要的!有很多的App都需要连接网络.判断设备是否已经连接网络,并且在连接网络的状态下判断是wifi无线 ...
- Django forms 关于select和checkbox设置初始选中值及让前端选中指定值
Django的forms和models一样很牛逼.他有两种功能,一是生成form表单,还有就是form表单的验证. 这里主要说一下生成form表单时经常用到的需要设置 初始值 / 默认值 的情况. 1 ...
- [移动网关]2G环境下资源下载有一定概率失败,客户端日志显示收到403错误
2G环境下资源下载有一定概率失败,客户端日志显示收到403错误 问题现象: 测试同学在使用联通号码在移动网络环境下,访问连接得到的response_code出现是403,导致资源读取失败表情显示异常. ...
- java学习之线程的操作方法
package com.gh.thread; /** * 线程实现的两种方法 * 1.继承thread类 * 2.实现Runnable接口 * @author ganhang * */ public ...
- android FragmentPagerAdapter的“标准”配置
private class ImagePagerAdapter extends FragmentPagerAdapter { public List<ImageItem> ...
- [计算机网络] vsftpd的安装与使用
简单介绍: vsftpd是一个能够执行在类UNIX操作系统上的FTPserver软件,它能够执行在Linux.BSD.Solaris.HP-UX等系统上. 1 vsftpd的安装 在ubuntu系统上 ...
- vim插件配置(一)
vim代码自动显示提示代码插件:AutoComplPop: 代码(普通变量函数) c/c++代码(类的 . , ->, :: 操作符)的自动补全插件: OmniCppComplete
- JavaScript 高级程序设计(第3版)笔记——chapter3:基本概念(函数部分)
3.7函数 3.7.1 理解参数 ECMAScript 函数不介意传递进来多个参数,也不在乎传递进来的参数是什么数据类型.因为在 ECMAScript 中的参数在内部是用一个数组来表示的.在函数体内可 ...
- js面向对象继承
前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...
- c,c++,java格式总结
c语言 java