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:/// ...
随机推荐
- linux常见题目
1. 把一个文件里面所有包含 abc 的行里面的 abc 替换成 def,然后输出第一列和第三列 cat abc.txt | grep abc | sed 's/abc/def/g' | awk '{ ...
- Java Web开发基础(3)-JSTL
在DRP项目中接触到了JSTL标签库,对我这样的比較懒的人来说,第一感觉就是"惊艳". JSTL标签库的使用.能够消除大量复杂.繁复的工作.工作量降低的不是一点半点.是降低了一大半 ...
- AFN同步异步请求
异步请求: -(BOOL)getOnlyKey1 { NSString *myUUIDStr = [[[UIDevice currentDevice] identifierForVendor] UUI ...
- OA项目实战学习(7)——初始化数据&权限配置显示
详细有哪些功能: 初始化数据 权限数据. 超级管理员. Installer.java package cn.xbmu.oa.install; import javax.annotation.Resou ...
- JS禁止后退键(backspace)使浏览器后退
背景说明: 今天项目测试中,同事发现一个Bug,当键盘敲下后退键(Backspace)后,浏览器自动后退,不符合需求,故建议禁止浏览器后退键. 提出需求: 当键盘敲下后退键(Backspace)后 1 ...
- SAP接口设计的扩展性考虑
由于现在的系统和SAP的接口出现了几次变更,因此需要对系统进行设计改造.由于系统中和SAP交互的接口不止一处,而且也是在不同的时间段进行开发,并由不同的人员来完成的,因此我在维护升级的 ...
- OpenCV245之SURF源代码分析
一.fastHessianDetector函数分析 (1)參数 const Mat& sum 积分图片 const Mat& mask_sum vecto ...
- STL应用之set
之前在解决一道算法题的时候,应用到set,特意对这个stl的容器类做了一些了解.在我的印象中,set就是一个元素不重复的集合,而事实上也正是这样的.无论从MSDN还是任何其它地方,都会告诉我们set的 ...
- starUML破解方法(Windows10 & MAC)
安装好,打开安装目录,依次找到[www\license\node],找到名为[LicenseManagerDomain]的js文件,打开它,在第25行位置插入以下几句代码: return { name ...
- jenkins 执行远程linux命令
在Jenkins中进行构建时,可能需要首先SSH登录到一个远程服务器以执行必要的脚本,然后再执行构建.这时,需要安装SSH Plugin,并进行如下配置.1.在Jenkins界面,系统管理->管 ...