cocos2dx震动实现

【包教包会】CocosCreator极简实现屏幕震动 可以让任意节点振动指定次数、无限振动、缓慢停止、立即停止。 使用场景:屏幕振动,击中敌人让敌人振动等等 阅读详情

根据网上总结,自己亲自实现了的,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();


完成!

cocos2d-x 3.x(C++)屏幕震动的简单实现(代码,图片) 简单实现了屏幕震动的效果,留作日后借以备用,同时也希望对像我这样刚入行的小伙伴们有一点点儿的帮助。 立即下载

相关推荐

cocos2dx-3.10 C++实现滚动数字

本文实例为大家分享了cocos2dx-3.10 C++实现滚动数字的具体代码,供大家参考,具体内容如下 NumberScroller.h #ifndef _NUMBERSCROLLER_H_ #define _NUMBERSCROLLER_H_ #include "cocos2d.h" USING_NS_CC; /* 这是一个数字滚动切换控件 更新方向: 1.在规定时间运动完,速度在变化 2.能指定字体表 3.增加新的更新算法,确保运动到指定数时候可以及时完成 4.添加能够指定宽和高以及数字之间的间隔 */ class NumberColumn : public Node{ pr

cocos creator 实现手机震动的效果(最全说明)

Cocos Creator 调用Android手机震动(最全说明) 之前在做creator时打包需要调用安卓的震动总结的,看了许多其他博客的方法,虽然意思说明了但是东西不全,因此也被坑了一波。自己总结了套最全的傻瓜教程,有兴趣的可以看下。 1.将Cocos Creator项目打包发布形成build文件夹 用Android-studio打开如下目录(图中红色标记): */build/jsb-link...

weixin_43142073的博客 5947

论文理解【LLM-Clarification】—— 【QDrawer】Asking the Right Question at the Right Time: Human and Model Unce

本文基于 CoDraw 任务对 LLM 澄清提问的触发方式进行探索,发现模型内部不确定性与人类澄清决策相关性弱,使用不确定性阈值触发澄清提问相比模仿人类提问时机,性能和计算效率都更好

佚失的诗篇 769

2dx-lua游戏震屏效果&简单的lua-binding

--1.首先要说的是,我这里震屏功能是在c++代码里写的,然后用lua掉用c++代码。其实用lua完全可以实现功能,这里贴上代码:(想看lua掉用c++的,直接看--4.之后) -- -- Author: Evan -- local ScreenShaker = class("ScreenShaker") local scheduler = require("src.framewor

u010536615的专栏 3203

【FPGA】Robei EDA的使用(10)————如何更新EDA的使用license

#海卑而下,能聚众水;学问笃实,以生光辉。 有的时候,有些问题自己通过查找资料解决,宁愿磨难一下,走点弯路,但收获更深刻的认知;不过,有些问题,问一下别人,可能会避免自己耗费过多时间做无用工,这些问题问会的人是极好的。但是怎样把握这个问题的类型,大约只能靠经验了~ (问我为何出此感言,谁叫我纠结了两天的问题,被人家一句话解决,我这个恨啊) ————————————————————正文开始的分割线———————————————— Robei EDA在使用上会有一个注册码,这个license在获取之后,每一次的

Ninquelote的博客 1002

电源完整性仿真流程梳理

可根据仿真流程导图,一步一步的去设置完成仿真。仿真的关键,在于对电路回路的理解以及所放置的电压源与电流的合理性,对于去耦电容的选择,则需要根据谐振频率计算,从而选取有效滤波的容值。

csy17729158342的博客 3441

cocos2d-x添加android手机震动

cocos2d-x添加android手机震动 [导读]修改cocos2dx\platform\android\java\src\org\cocos2dx\lib下的java文件。首先打开Cocos2dxHelper.java添加一个静态函数 1、实现C++代码   在cocos2dx\platform\android\jni\Java_org_cocos2dx_lib_Coc

枫月紫恋的专栏 826

5G NR协议栈及功能1 - 总体架构与物理层

  备注:本文所有图片均来自3GPP标准,包括3GPP TS 38.300 V15.0.0 (2017-12)和3GPP TS 38.202 V15.0.0 (2017-12)等。本文主要介绍截止目前(2018年1月25日),3GPP 5G NR相关的协议内容,后期可能会有更新。   本系列共分为两部分:   1. 5G NR协议栈及功能1 - 总体架构与物理层 http://blog...

Wei Xingguang 11万+

cocos2dx 玩转震动

实现Android震动其实很简单,只需在一个.java文件中添加两个方法即可。 首先新建一个工程(已建好的跳过),然后用eclipse打开Android工程,具体方法不再赘述。 用eclipse打开libcocos2dx根目录下的\src\org.cocos2dx.lib\Cocos2dxHelper.java 文件 在Cocos2dxHelper类中添加静态方法 pub

DAo_1990的博客 1201

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5460

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

【AI智能体】Codex 浏览器操作自动化任务实战操作详解

congge 4058

cocos2dx-3.6在android下实现手机震动功能

参考链接:  http://blog.youkuaiyun.com/u013007305/article/details/49251451 1.首先你需要建一个Coco2dx的项目,确保当前项目能打包到Android手机上,并没有错误 2.建立一个Vibrator的类 #pragma once #ifndef _Vibrator_h_ #define _Vibrator_h_ #include #i

dearsir的博客 1544

国科大学习资料--计算机视觉(胡占义、董秋雷)--2018-2019第二学期期末试卷

国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 国科大学习资料–计算机视觉(胡占义、董秋雷)–2018-2019第二学期期末试卷 ...

无名何许人的博客 2165

Cocos2d-x 新版本中android震动

百度cocos2dx安卓手机震动,发现基本都是移植或者自己添加。我照着网上的方法试了下,发现Cocos2dxHelper.java已经写入了震动功能,无需再自己移植。 下面是C++调用代码 // 加入头文件 #include "android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.h" ...... ...... // 在你想要的地方调用 #if (C...

a543658883的博客 296

从源码编译CesiumForUnreal

从源码编译CesiumForUnreal插件

专注GIS开发 5643

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

cocos2dx 3.7添加手机震动

这个震动需要调用adnroid系统的方法,所以需要C++调用java,JNI这里就不多做介绍了,需要的可以自己去查找下相关资料 用eclipse打开libcocos2dx根目录下的\src\org.cocos2dx.lib\Cocos2dxHelper.java 文件  在Cocos2dxHelper类中添加静态方法          public static void vibrat

tzjvon的博客 453

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

关于cocos2dx中屏幕的震动

季夏右一 611

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

CocosCreator系列——与Java原生交互获取手机震动

CocosCreator系列教程——如何通过js代码与Java原生交互获取手机震动 首先是客户端代码 // 此方法可以绑定在一个按钮上或者某个方法里面调用 onDoVibrate() { jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "DoVibrate", "()V"); },...

@LPX的博客 2459

Cocos2d-x添加Android手机震动

1、在proj.android这个目录下 AndroidManifest.xml 文件,给app 增加震动权限    2、 修改android 项目源文件src/org/cocos2dx/lib/Cocos2dxSound.java增加震动方法,调用android底层振动器  /*** @param time 震动时间 */ public void vibrate

Cocos2d-x,Android,IOS,游戏,开发/交流/学习/资源 刘文超 841

cocos2d-x获取android手机震动

1.添加手机权限,打开:项目目录\proj.android\AndroidManifest.xml添加以下代码:        &lt;uses-permission android:name="android.permission.VIBRATE"/&gt;2. 添加java代码,打开:项目目录\cocos2d\cocos\platform\android\java\src\org\cocos2...

qq_33663319的博客 598

cocos2d-x 3.x(C++)实现屏幕震动效果

在游戏过程中,总是看到随着爆炸(粒子特效)的同时,总是伴随着屏幕震动的效果。感觉挺酷的,就琢磨着实现一下。路途漫漫,作为刚入行逐行的一员,不求快,只求像花一般在合适的时间发芽,生枝,开放,败落红泥。生活亦应如此!

freshstraw的博客 2598

cocos2d项目获取手机网络以及设置手机震动

                                            cocos2d项目获取手机网络以及设置手机震动获取网络状态首先说明一下流程,c++通过jni调用java方法获取网络状态。 获取网络方法:/*添加获取当前网络状态方法 (返回参数说明:netType,-1:没有网络,1:wifi,2:手机网络。netLevel,1: None 2:poor  3:moderat...

pyf_914406232的博客 3853

Cocos2dx2.2.1中单选按钮的实现

Cocos2dx2.2.1中单选按钮的实现

mmrx的博客 787

cocos2dx3.x网格特效

//震动效果 auto shaky = Shaky3D::create(6,Size(2,1),5,false); gridNode->runAction(shaky); //翻转效果 auto flipx = FlipX3D::create(2); auto reflipx = flipx->reverse(); auto dely = DelayTime::create(2); gridNode->runAction(Sequence::create(flipx,dely,refli.

qq_41620823的博客 319

最新Cocos2d-x3.x播放音效与背景音乐以及手机游戏震动特效

cocos2d-x中振动的实现其实和SimpleAudioEngine声音的播放等类似: 先包含头文件: #include "SimpleAudioEngine.h" 然后在需要的地方调用: SimpleAudioEngine::sharedEngine()->playEffect("effect_bullet.mp3"); 但是SimpleAudioEngine默认没有振动函数vib

Mr_厚厚的博客 2592
上一篇: Android 手机震动功能实现
下一篇: freopen重定向
mincheat
博客等级 码龄17年 46粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值