Cocos2d-x添加Android手机震动
这个震动需要调用adnroid系统的方法,所以需要C++调用java,JNI这里就不多做介绍了,需要的可以自己去查找下相关资料,如果你只是需要实现这个功能,相信你看完本文,应该就OK了!
1.首先,修改你的android项目的AndroidManifest.xml文件,给app增加震动权限
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.cocos2dx.application"
android:versionCode=""
android:versionName="1.0">
<uses-sdk android:minSdkVersion=""android:targetSdkVersion=""/>
<!--....-->
<!--add line-->
<uses-permission android:name="android.permission.VIBRATE" />
</manifest>
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项目中CocosDenshionandroidjni文件夹下的SimpleAudioEngineJni.h和SimpleAudioEngineJni.cpp方法
#ifndef __SIMPLE_AUDIO_ENGINE_JNI__
#define __SIMPLE_AUDIO_ENGINE_JNI__
#include
extern"C"
{
......
// add these menthod
externvoidvibrateJNI(longlongtime);
externvoidvibrateWithPatternJNI(longlongpattern[],intrepeat);
externvoidcancelVibrateJNI();
}
#endif // __SIMPLE_AUDIO_ENGINE_JNI__
// add these jni menthod
void vibrateJNI(long longtime)
{
JniMethodInfo methodInfo;
if(!getStaticMethodInfo(methodInfo,"vibrate","(J)V"))
{
return;
}
methodInfo.env->CallStaticVoidMethod(methodInfo.classID,methodInfo.methodID,time);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
} void vibrateWithPatternJNI(long longpattern[], int repeat)
{
JniMethodInfo methodInfo;
if(!getStaticMethodInfo(methodInfo,"vibrateWithPattern","([JI)V"))
{
return;
}
int elements=sizeof(pattern);
jlongArray jLongArray=methodInfo.env->NewLongArray(elements);
methodInfo.env->SetLongArrayRegion(jLongArray,,elements,(jlong*)pattern);
methodInfo.env->CallStaticVoidMethod(methodInfo.classID,methodInfo.methodID,jLongArray,repeat);
methodInfo.env->DeleteLocalRef(methodInfo.classID);
}
void cancelVibrateJNI()
{
JniMethodInfo methodInfo;
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 longtime);
void vibrateWithPattern(long longpattern[],int repeat);
void cancelVibrate();
3.3修改CocosDenshion/android/SimpleAudioEngine.cpp增加调用JNI的如下方法。
void SimpleAudioEngine::vibrate(long longtime)
{
vibrateJNI(time);
}
void SimpleAudioEngine::vibrateWithPattern(long longpattern[],intrepeat)
{
vibrateWithPatternJNI(pattern, repeat);
}
void SimpleAudioEngine::cancelVibrate()
{
cancelVibrateJNI();
}
4.至此,代码上的修改都OK啦,在游戏中需要使用震动的地方调用。
CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrate(time);
CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrateWithPattern(pattern, repeat);
Cancle Vibrate Using this!
CocosDenshion::SimpleAudioEngine::sharedEngine()->cancelVibrate();
5.如果需要修改后的代码,请移步原帖。
Cocos2d-x添加Android手机震动的更多相关文章
- cocos2d-x3.2中加入Android手机震动
本人宣布从此博文发出后,我的cocos2dx的引擎从cocos2dx3.1.1跳到cocos2dx3.2,哈哈,事实上变化不大的,不碍事~~~ 以下来说说在cocos中加入Android手机震动的功能 ...
- android手机震动
Vibrator是安卓提供的震动器,其没有构造器,通过getSystemService(Context.VIBRATOR_SERVICE)方法获取对象.但使用此类时需要在清单文件中添加访问权限andr ...
- Android 手机震动
1.添加震动权限 <uses-permission android:name="android.permission.VIBRATE"/> 2.获取震动服务 Vibra ...
- Android 手机震动功能实现
1首先在AndroidManifest.xml中添加震动权限 <uses-permission android:name="android.permission.VIBRATE&quo ...
- Android 手机震动 设置震动时间
开启震动,单次,5秒: Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); //震动5秒 vibrator.vibra ...
- [android] 手机卫士输入框抖动和手机震动
查看apiDemos,找到View/Animation/shake找到对应的动画代码,直接拷贝过来 当导入一个项目的时候,报R文件不存在,很多情况是xml文件出错了 Animation shake = ...
- 【Android】Android如何实现手机震动
实现手机震动其实很简单,手机震动使用是Vibrator类,然后震动也是需要权限的,在使用之前在AndroidManifest.xml文件中添加 <uses-permission android: ...
- Vibrator控制手机震动
Vibrator控制手机震动 效果图 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q4878802/9049755 添加权限 & ...
- 如何在Android手机上进行自动化测试(上)
版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 前言 通过阅读本节教程,你将了解到以下内容: 如何在脚本代码中.运行脚本时指定手机 如何填写--device Android:/// ...
随机推荐
- PACS系统简易
PACS系统 http://baike.baidu.com/link?url=prHBMbyu5W98ET1UGQ0PXXxLebxAeljckFH0pfO_2aODe1UgsrWgRd4Unbopt ...
- 算法笔记_212:第七届蓝桥杯软件类决赛真题(Java语言B组)
目录 1 愤怒小鸟 2 反幻方 3 打靶 4 路径之谜 5 碱基 6 圆圈舞 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 愤怒小鸟 愤怒小鸟 X星球愤怒的小鸟喜欢撞火车! 一根平直的铁轨上两火车 ...
- MySQL_Oracle_事物的隔离级别
数据库会话的设置: 1:脏读 情景:A事物读取B事物修改了但是未提交的数据 问题:若B回滚了事物,A就读到了错误数据. 2:不可重复读 情景:A事物查询数据,B修改了数据,A又查询数据 问题:A事物前 ...
- angular.foEach
1.针对对象循环(key,value) 官方示例: var values = {name: 'misko', gender: 'male'}; var log = []; angular.forEac ...
- OpenERP7.0安装后提示“not supported" ,如何去掉此提示
转自:http://blog.csdn.net/vnsoft/article/details/17581831 下载了新版本的OpenERP7.0安装测试,发现在登录后会提示如图的内容. 经过测试发现 ...
- jsp页面获取集合的长度
createTime--2016年10月12日16:20:02Author:Marydonjsp页面获取集合的长度 在jsp页面与js中不能通过${list.size}取列表长度,而是引入jstl ...
- 26、线性表(List)
1.List List接口是Collection的子接口,List是一个可重复集合 2.ArrayList和LinkedList ArrayList和LinkedList是List接口最常见的两个实现 ...
- Centos7安装Openresty
通过yum安装 在 /etc/yum.repos.d/ 下新建 OpenResty.repo 内容 [openresty] name=Official OpenResty Repository bas ...
- Apache Hadoop 3.0新版本介绍及未来发展方向
过去十年,Apache Hadoop从无到有,从理论概念演变到如今支撑起若干全球最大的生产集群.接下来的十年,Hadoop将继续壮大,并发展支撑新一轮的更大规模.高效和稳定的集群. 我们此次将向大家全 ...
- Linux命令行上执行操作,不退回命令行的解决方法
问题描述: 如果你现在登录Centos执行了某个操作,但是操作一直占用命令行,命令行显示的也都是这个命令相关的操作,我想做其它事情 ,该怎么办呢 ? 解决方法: 根据<Linux命令行与Shel ...