前言:

本日志是记录在开发我们的基于安卓平台的文字冒险游戏《UP住模拟器》过程中遇到的一些技术上的问题。在游戏开发过程中,我们需要设计一个“”闹钟app:让玩家实现控制游戏角色的作息和查看数据统计等功能。其中需要对设置时间的滚轮震动体验进行调试,以达到准APP级别的是用体验,给用户身临其境的游戏体验。为此,我特地查阅了华为官方对于震动马达的介绍文档,以进行游戏实机体验的优化。

项目需要的环境/依赖:

build.gradle(项目的)

buildscript {repositories {google()jcenter()maven { url 'https://developer.huawei.com/repo/' }}dependencies {classpath 'com.android.tools.build:gradle:3.4.2'// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
}allprojects {repositories {google()jcenter()maven { url 'https://developer.huawei.com/repo/' }}
}

build.gradle(app):

    implementation 'com.huawei.devices:hapticskit:1.0.0.400'

这里的HapticsKitConstant.CameraTypeEnum.MODE_SWITCH.getType()种类有很多,下列代码中第二个参数都是种类,可以选择自己喜欢的震动模式:

addData("Camera_enum.CLICK", HapticsKitConstant.CameraTypeEnum.CLICK.getType());addData("Camera_enum.CLICK_UP", HapticsKitConstant.CameraTypeEnum.CLICK_UP.getType());addData("Camera_enum.FOCUS", HapticsKitConstant.CameraTypeEnum.FOCUS.getType());addData("Camera_enum.GEAR_SLIP", HapticsKitConstant.CameraTypeEnum.GEAR_SLIP.getType());addData("Camera_enum.LONG_PRESS", HapticsKitConstant.CameraTypeEnum.LONG_PRESS.getType());addData("Camera_enum.MODE_SWITCH", HapticsKitConstant.CameraTypeEnum.MODE_SWITCH.getType());addData("Camera_enum.PORTAIT_SWITH", HapticsKitConstant.CameraTypeEnum.PORTAIT_SWITH.getType());addData("Battery.CHARGING", HapticsKitConstant.BatteryTypeEnum.CHARGING.getType());addData("Calculator.DELETE", HapticsKitConstant.CalculatorTypeEnum.DELETE_LONG_PRESS.getType());addData("Calculator.VITUAL_TASK", HapticsKitConstant.CalculatorTypeEnum.VITUAL_TASK.getType());addData("Clock.STOPWATCH", HapticsKitConstant.ClockTypeEnum.STOPWATCH.getType());addData("Clock.Timer", HapticsKitConstant.ClockTypeEnum.TIMER.getType());addData("Contact.DELTE", HapticsKitConstant.DiallerTypeEnum.DELTE.getType());addData("Contact.LETTERS_INDEX", HapticsKitConstant.DiallerTypeEnum.LETTERS_INDEX.getType());addData("Contact.LONGPRESS", HapticsKitConstant.DiallerTypeEnum.LONGPRESS.getType());addData("Contact.CLICK", HapticsKitConstant.DiallerTypeEnum.CLICK.getType());addData("Control.SEARCH_LONG_PRESS", HapticsKitConstant.ControlTypeEnum.SEARCH_LONG_PRESS.getType());addData("Control.TEXT_CHOSE", HapticsKitConstant.ControlTypeEnum.TEXT_CHOSE_CURSOR_MOVE.getType());addData("Control.TEXT_EDIT", HapticsKitConstant.ControlTypeEnum.TEXT_EDIT.getType());addData("Control.WIDGET", HapticsKitConstant.ControlTypeEnum.WIDGET_OPERATION.getType());addData("Desktop.LONG_PRESS", HapticsKitConstant.DesktopTypeEnum.LONG_PRESS.getType());addData("FingerPrint.INPUT", HapticsKitConstant.FingerPrintTypeEnum.INPUT_LONG_PRESS.getType());addData("FingerPrint.UNLOCK_FAILE", HapticsKitConstant.FingerPrintTypeEnum.UNLOCK_FAILE.getType());addData("Gallery.ALBUMS", HapticsKitConstant.GalleryTypeEnum.ALBUMS_LONG_PRESS.getType());addData("Gallery.PHOTO", HapticsKitConstant.GalleryTypeEnum.PHOTOS_LONG_PRESS.getType());addData("Gallery.UPGLIDES", HapticsKitConstant.GalleryTypeEnum.UPGLIDE_RELATED.getType());addData("Home.CLICK_BACK.", HapticsKitConstant.NavigationTypeEnum.CLICK_BACK.getType());addData("Home.CLICK_HOME.", HapticsKitConstant.NavigationTypeEnum.CLICK_HOME.getType());addData("Home.CLICK_MULTITASK.", HapticsKitConstant.NavigationTypeEnum.CLICK_MULTITASK.getType());addData("LockScreen.FACE_UNLOCK_FAIL.", HapticsKitConstant.LockScreenTypeEnum.FACE_UNLOCK_FAIL.getType());addData("LockScreen.FACE_UNLOCK_RETRY.", HapticsKitConstant.LockScreenTypeEnum.FACE_UNLOCK_RETRY.getType());addData("LockScreen.NUMBER_UNLOCK_FAIL.", HapticsKitConstant.LockScreenTypeEnum.NUMBER_UNLOCK_FAIL.getType());addData("LockScreen.UNLOCK_CLICK.", HapticsKitConstant.LockScreenTypeEnum.UNLOCK_CLICK.getType());addData("LockScreen.ONEHAND.", HapticsKitConstant.LockScreenTypeEnum.ONEHAND_KEYBOARD_SWITCH.getType());addData("LockScreen.UNLOCK_SLIP.", HapticsKitConstant.LockScreenTypeEnum.UNLOCK_SLIP.getType());addData("LockScreen.UPGLIDE_SWITCH.", HapticsKitConstant.LockScreenTypeEnum.UPGLIDE_SWITCH.getType());addData("SystemUI.EXPAND.", HapticsKitConstant.SystemuiTypeEnum.EXPAND.getType());addData("SystemUI.MOVE.", HapticsKitConstant.SystemuiTypeEnum.MOVE.getType());addData("SystemUI.NO_LONG_PRESS.", HapticsKitConstant.SystemuiTypeEnum.NOTIFICATIONS_LONG_PRESS.getType());addData("SystemUI.SCREEN_RECORD.", HapticsKitConstant.SystemuiTypeEnum.SCREEN_RECORD_STOP.getType());addData("SystemUI.SWITCH_PRESS.", HapticsKitConstant.SystemuiTypeEnum.SWITCH_LONG_PRESS.getType());addData("SystemUI.SWITCH_SORT_PRESS.", HapticsKitConstant.SystemuiTypeEnum.SWITCH_SORT_LONG_PRESS.getType());addData("Wallet.TIME_SCROLL.", HapticsKitConstant.WalletTypeEnum.TIME_SCROLL.getType());addData("Keyboard input strength 1", HapticsKitConstant.HW_HAPTIC_TYPE_GRADE_STRENGTH1);addData("Keyboard input strength 2", HapticsKitConstant.HW_HAPTIC_TYPE_GRADE_STRENGTH2);addData("Keyboard input strength 3", HapticsKitConstant.HW_HAPTIC_TYPE_GRADE_STRENGTH3);addData("Keyboard input strength 4", HapticsKitConstant.HW_HAPTIC_TYPE_GRADE_STRENGTH4);addData("Keyboard input strength 5", HapticsKitConstant.HW_HAPTIC_TYPE_GRADE_STRENGTH5);

华为官方对于Haptics Engine的介绍:Haptics Engine –线性马达能力

华为官方Github实例:https://github.com/huaweicodelabs/HapticsEngine

对于其他的安卓手机,可以直接调用vibrator类来实现马达的震动,但是马达的震动效果完全取决于手机本身的马达性能以及手机厂商对于手机的底层优化策略。以下是一个利用vibrator类实现手机马达调用的示例:

震动需要获得权限的,在使用之前在AndroidManifest.xml文件中添加:

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

示例的代码是使用点击按钮的时候可以实现马达的震动,在按钮的点击事件的函数中添加这样几行代码:

Vibrator vibrator = (Vibrator)this.getSystemService(this.VIBRATOR_SERVICE);
vibrator.vibrate(1000);

这里的this代表的当前的Context,然后最后一行代码设置的是震动的时间,这里的单位是ms。

作者:王竞浛

Android游戏《UP住模拟器》开发日志:手机线性马达的调教相关推荐

  1. Android Studio与夜神模拟器开发调试

    什么是夜神模拟器? 夜神模拟器是北京多点在线科技有限公司开发的一款Android手机游戏模拟器, 运行速度快,使用方便,是一款PC平台玩手游,助攻Android开发的利器 使用Android Stud ...

  2. android 游戏引擎 排行_4月旗舰手机性能排行榜:小米10 Pro第四,OPPO Ace2第五

    近日,根据多家科技媒体的消息,在五一小长假之后,国内手机评测机构安兔兔根据后台统计到的数据,发布了2020年4月份Android手机性能榜单.和以往一样,本次榜单依然分为旗舰榜单和中端榜单.按照安兔兔 ...

  3. 星系模拟器开发日志(一) 如何科学地用C++画图

    代码下载地址: http://pan.baidu.com/s/1eQjiETc 2015.8.11更新: 最近突然有一个想法:写一个程序,用来模拟太阳系的行星运动,甚至是任意星球的运动.感觉这个想法非 ...

  4. android 游戏 锁屏界面开发,android 锁屏程序开发

    参考http://blog.csdn.net/wdaming1986/article/details/8837023 锁屏程序的步骤如下: 1.替换系统锁屏 2.屏蔽Home键,back键.menu键 ...

  5. [原创] CPS1模拟器开发日志

    这份文档里面详细地说明了我第一次开发的一个街机模拟器 CPS1 Debugger所经历的工作思路.开发次序及详细时间表,大致正好1个月,每天工作8小时.虽然工作已经暂告一段落了,但这份文档我一直留着, ...

  6. java小组坦克大战游戏开发文档开发日志_java实现坦克大战游戏

    本文实例为大家分享了java实现坦克大战游戏的具体代码,供大家参考,具体内容如下 一.实现的功能 1.游戏玩法介绍 2.自定义游戏(选择游戏难度.关卡等) 3.自定义玩家姓名 4.数据的动态显示 二. ...

  7. 手机android游戏制作工具,主题制作工具手机下载_主题制作工具安卓版下载v1.0.4_3DM手游...

    <主题制作工具>不是一款常规的主题类手机软件,它的功能主要是能够让用户进行自己的DIY.用户通过<主题制作工具>可以发挥自己的想象力,创造出拥有自己个性的手机主题,喜欢的朋友不 ...

  8. rk3288 Android 8,RK3288W Android8.1开发日志(一)

    1.板子是参考官方公版设计,SDK版本是RK3288_ANDROID8.1_SDK_20180512: 2.解压SDK,直接执行source build.sh,再执行./mkimage.sh,烧录进板 ...

  9. android aar项目_一文了解Android游戏SDK开发

    去年从平安离职之后,加入了一家游戏公司,负责游戏SDK相关的业务开发和维护工作,经过半年来的摸索,对于游戏SDK的开发有了一定的理解,下面就对游戏SDK开发涉及到的知识点进行简单的梳理. SDK SD ...

最新文章

  1. XAMPP 相关设置(linux下的)
  2. html标记表示超链接,HTML常见标签学习
  3. DataGridView数据导入到Excel 中
  4. LeetCode 1568. 使陆地分离的最少天数(DFS)
  5. 服务器上有涉密文件,涉密文件保密管理规定
  6. 数据结构之二叉树的创建
  7. async/await处理异步
  8. Linux如何切换图形界面和命令行界面
  9. 如何快速入手 Shell 脚本编程
  10. vscode 打开函数表_效率倍增!10个超级好用的VScode使用技巧!
  11. 安装MYSql Windows7下MySQL5.5.20免安装版的配置
  12. 畅销书热榜html网页制作,黑色简洁形式pc+wap畅销书作者介绍网页模板代码
  13. Directx11学习笔记【十】 画一个简单的三角形
  14. 在普通maven项目应用中使用MQ
  15. python包和库的区别_python中模块、包、库的区别和使用
  16. Echarts地图自定义图标Symbol同时动态更改图标进行切换显示
  17. 淘宝店到底哪些数据值得我们去分析?
  18. 一般情况下的椭圆方程
  19. Unity有哪些适合拿来练手的游戏项目?
  20. code epi 光场_光场相机视觉测量误差分析

热门文章

  1. 基于Halcon提取图像外轮廓并提取保存轮廓相关数据
  2. 输入阴历日期转化为华夏农历日期
  3. 图记2007年北京国际马拉松比赛
  4. ae教程 (三)三维空间合成(三)
  5. 相机多视角极线约束-小白必备
  6. 求阶乘N!末尾0的个数
  7. sping boot集成多数据源的时候会出现 unsatisfied dependency expressed through method
  8. 假设检验是单侧还是双侧
  9. 怎样从视频中提取字幕?推荐三个视频转文字提取方法
  10. 用LaTeX给女友写情诗集(1)