方向键长按延迟的解决(游戏开发)

本文探讨了游戏开发中遇到的长按方向键导致的动画延迟问题,提出了通过存储按键状态并定时检查的解决方案,使用JavaFX进行了具体实现。
摘要由CSDN通过智能技术生成

0.前言

在游戏开发的精灵动画中,在长按方向键时候,往往在按下方向键的时候,第一次消息回调会来的特别快,在第一次方向键与第二次方向键之间往往会相隔一点时间,虽然时间只有一点点,但是在游戏开发中是不能够忍受的。

1.解决思路

这个解决思路在一个大神的GitHub上面找到的,具体的地址我找不到了,等我找到了再贴上去。
原文如下:

 /**
   * <ul>
   * 判断方向的基本原则:每当用户按下一个方向键,就把它的keyCode存进数组(数组里不可以有重复);每当一个方向键弹起,则把keyCode从数组里清除。
   * <li>若数组里只有一个键,那就是轴方向运动;</li>
   * <li>两个键,两种情况:如果是复合键,就是斜方向运动;如果是一个A一个D这样一组相反键,则只响应先按的那个,物体只做轴方向运动;</li>
   * <li>三个或四个键只响应数组里最先按的那一组复合键,做斜方向运动.</li>
   * </ul>
   * <p>
   * 使用数组的好处在于可以处理复杂的多按键情况(无论是玩家有意乱按还是无意多按的),大大提高手感。
   * </p>
   * <p>
   * 例如这样一组输入:先后按下A、W、D再释放A,之后按下S并释放W、D。玩家最可能的意图是,先左上走,然后改为右上,最后改为下。
   * 这样的按键手感方便但是就造成一般的if ...else判断方法很难响应。
   * </p>
   * <p>
   * 因为Javafx里始终只不断给出最后一个键按下的消息.
   * 新的按键消息会不断把以前的按键消息“冲”掉。而且同时按3个或4个键在if...else里判断很麻烦,
   * 即使建立了类似Ctrl+Shift这样的变量来追踪以前的按键。 而使用有序且不重复的数组则可以完美解决这些问题。
   * </p>
   */

2.具体实现

根据上文的解决思路,一般足以解决这个问题了。
我下面给出在我实际的项目中的具体的实现:
用的是JavaFX实现的

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的电源键按事件可以通过监听Intent.ACTION_CLOSE_SYSTEM_DIALOGS的通知来触发。具体来说,当用户按电源键时,系统会发送一个带有reason参数的广播通知,其中reason参数的值为"globalscreen",用于区分电源键按事件。\[1\] 在Android的框架中,PhoneWindowManager类负责处理电源按键和Home键的事件。我们可以通过修改PhoneWindowManager类的源码来处理按电源键的一系列事件。该类的源码路径为frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java。\[2\] 此外,Android中还有一个GlobalActions类,其中定义了一系列操作的Action接口,包括关机、重启、截屏等功能。我们可以通过继承Action接口的子类来实现自定义的操作。例如,可以通过实现一个RebootAction类来处理重启操作,该类需要继承SinglePressAction和LongPressAction接口,并重写相应的方法来实现按事件的处理逻辑。\[3\] #### 引用[.reference_title] - *1* [Android中监听"电源键按"、"Home键"、"Home键按](https://blog.csdn.net/weixin_33555586/article/details/117596786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [分析Android按电源键事件并定制按电源dialog](https://blog.csdn.net/unclePomelo/article/details/78375350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值