cocos2dx震动实现

根据网上总结,自己亲自实现了的,90%靠谱率

一:c++端

1,修改CocosDenshion\android\jni目录下的两个文件SimpleAudioEngineJni.cpp,SimpleAudioEngineJni.h

SimpleAudioEngineJni.h

增加内容

<span style="white-space:pre">	</span>extern void vibrateJNI(long long time);
	extern void vibrateWithPatternJNI(long long pattern[], int repeat);
	extern void cancelVibrateJNI();

SimpleAudioEngineJni.cpp

增加内容(实现)

<span style="white-space:pre">	</span>void vibrateJNI(long long time)

	{
		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 long pattern[], 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, 0, 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);

	}

2,在\CocosDenshion\include下SimpleAudioEngine.h增加如下内容(就是声明,你懂的)

<span style="white-space:pre">	</span>void vibrate(long long time);

	void vibrateWithPattern(long long pattern[], int repeat);

	void cancelVibrate();

3    到这里其实有效的部分已经完成了,但是还要增加win32相应地方,因为我们的代码毕竟是在windows平台上编译,所以调用还是会调用CocosDenshion\win32下的方法,所以还要在目录CocosDenshion\win32下增加如下代码

void SimpleAudioEngine::vibrate(long long time)

{

}

void SimpleAudioEngine::vibrateWithPattern(long long pattern[], int repeat)

{

}

void SimpleAudioEngine::cancelVibrate()

{

}

空函数就可以了,不需要实现,这里只是为了之后可以编译链接(其实是链接)的时候可以通过,找到函数而已。    当然也可以不写这些东西,那么在调用震动方法的代码地方加上平台判断也可以#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)  也可以。

二、 android端

AndroidManifest.xml中加震动权限

<uses-permission android:name="android.permission.VIBRATE" />

编辑org.cocos2dx.lib下的Cocos2dxSound.java文件,增加如下内容

/*** @param time 震动时间*/

	public void vibrate(long time) {
		Vibrator v = (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) {
		Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
		v.vibrate(pattern,repeat);
	}

	/*** 取消震动 */

	public void cancelVibrate() {
		Vibrator v = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE);
		v.cancel();
	}

在文件Cocos2dxHelper.java中增加如下内容

//vibrate 相关
	public static void vibrate(long time){
		Cocos2dxSound cocos2dxsound = new Cocos2dxSound(sContext);
		cocos2dxsound.vibrate(time);
	}

	public static void vibrateWithPattern(long[] pattern, int repeat){
		Cocos2dxSound cocos2dxsound = new Cocos2dxSound(sContext);
		cocos2dxsound.vibrateWithPattern(pattern,repeat);
	}

	public static void cancelVibrate() {
		Cocos2dxSound cocos2dxsound = new Cocos2dxSound(sContext);
		cocos2dxsound.cancelVibrate();
	}
	

OK了,准备代码完成了

调用,就用下面的了

CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrate(time);

CocosDenshion::SimpleAudioEngine::sharedEngine()->vibrateWithPattern(pattern,
repeat);

CocosDenshion::SimpleAudioEngine::sharedEngine()->cancelVibrate();

完成!

时间: 2024-11-13 07:56:58

cocos2dx震动实现的相关文章

Cocos2d-x移植android加入震动效果

cpp部分通过jni调用java静态函数 头文件: #include <jni.h> #include "cocos2d.h" #include "platform/android/jni/JniHelper.h" 在cpp类中定义方法去调用Cocos2dxSound.java中vibrate方法: static void vibrateJNI(long longtime) { JniMethodInfo methodInfo; if(!JniHelpe

购买李宁Cocos2d-x套餐,送最新出的《Cocos2d-x游戏实战指南》签名书一本

活动时间:2016-10-18至2016-11-30 通过本套餐,可完全了解Cocos2d-x 3.x的相关技术,以及掌握C++语言,并具有一定的项目实战经验. Cocos2d-x游戏开发套餐:http://edu.51cto.com/pack/view/id-114.html <Cocos2d-x游戏实战指南>封面 本书月底出版,触控科技副总裁Jane.微软开放体验和合作事业部开发技术顾问梅颖广.51CTO学院运营总监曹亚莉.哈尔滨工业大学  王峥  联袂推荐 目录 第1章     初识CO

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这个目录下 AndroidMan

手机游戏开安卓手机震动

近日正好要在手游中添加手机震动功能.没搞过啊,上网找了下,结果相关文章还是不少的,讲得也挺详细的,但我找到的都要去改cocos2dx的底层代码.我看了下,完全没必要啊.在自己的Java文件中定义一个静态方法就行了. Java需添加内容: 随便找个自己的Java类(游戏主入口类也行),在类中定义如下静态方法: public static void vibrate(int vibrateTime) { Vibrator vib = (Vibrator)MainClass.returnContent(

cocos2dx 打包问题

Cocos2dx-3.4 打包成apx 1. 要注意pro.android\jni\Android.mk 添加自己不是cocos2dx自己生成的ccp\ 或者修改Android.mk FILE_LIST := hellocpp/main.cpp FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%) 2. 要修改pro.android\

Cocos2d-x能够实现的效果总结

动作(Actions) move移动:moveto/moveby 从一个位置移动到另外一个位置 从一个位置移动多少数量级 rotate旋转:rotateto/rotateby 从一个角度旋转到另外一个角度 旋转多少个数量级 scale缩放:scaleto/scaleby 放大缩小到什么程度 skew倾斜:skewto/skewby 倾斜到什么程度 rotationalskew旋转着倾斜:rotationalskewto/rotationalskewby 旋转着倾斜 Skew+scale+rota

Cocos2d-x山西推倒胡+扣点房卡麻将下载架设教程

1.数据库还原修改后台数据库jeefwtwo 表:sys_user8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 密码(123456)修改游戏数据库 QPPlatformDB表:DataBaseInfo  SQL的地址端口账号密码表:GameRoomInfo  修改服务器的机器标示 PS,搭建的源码必须完整,本文测试源码来自 Cocos2d-x山西推倒胡+扣点房卡麻将maliwl.com 2.执行脚本每个脚本都要执

Cocos2d-x 基础元素

 Cocos2d-x  基础元素 看过本章,然后实践之后,应该会掌握以下的认识: 1.Cocos2d-x引擎的基本运转过程 2.Cocos2d-x引擎的一些初始设置 3.对导演及图层及现实对象的认识 4.如何定义自己的显示对象 1.引擎的运转 游戏设计的问题: 在游戏设计之初,我们就需要设置游戏是横屏的还是竖屏的. 展示图像的清晰度是多少? 帧数? 适配哪些屏幕? 在处理以上问题之前,我们需要了解引擎的运转是怎么样的? (以后补充) 关于XCode设置游戏屏幕竖屏的方式: 2.显示对象 每一个节

android 之实现手机震动功能

界面:利用weight属性,能比较好得移植到平板上.      布局代码: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:la