作者TonyQ (骨头)
看板java
标题Re: [问题] 请问有办法延迟KeyEvent的读取速度吗?
时间Sun Dec 9 16:16:56 2007
※ 引述《TonyQ (骨头)》之铭言:
: 标题: Re: [问题] 请问有办法延迟KeyEvent的读取速度吗?
: 时间: Sat Dec 8 20:26:41 2007
:
: ※ 引述《TonyQ (骨头)》之铭言:
: : 推 yorjing:第一个是counter%base=n吗? 12/08 19:18
:
: 举个最简单的SAMPLE
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 220.132.59.247
: 推 yorjing:Thread.sleep(num)是放/*do something*/这边吗? 12/09 00:22
: 推 yorjing:可是如果用sleep delay的是运算而不是读取............ 12/09 00:28
: 推 yorjing:好像只要是加sleep在KeyOnDown之下就会造成运算延迟 12/09 00:34
你应该把你的问题在讲清楚点才对,
如果你是要用sleep ,sleep是"延後执行"这个key的动作,
而不是"忽略这个key"的动作,所以并不会减少"整体key的数量"。
在这个情况下,你应该要选择的是queue法,
透过一个独立的thread去进行key的行为,并且透过固定时间来执行。
他的事件模型大概长这样
Delaytime =1000 (ms)
┌─key listener────┐ ┌ Excute queue ─────┐
│ listening...←┐ │ │list ┌────┐ │
│ ↓ │ │
(add key) │
↑ ┌──┘ sleep │
│ onKeyDown
→→→→→→→→→→→→→→┘ │ (delaytime) │
│ ↓ │ │ │ ↓ yes ↑ │
│ └─────┘ │ │ isEmpty? ─→──┤ │
│ │ │ │no │ │
└───────────┘ │ ↓ │ │
│ Get key │ │
│ delete key in list │ │
│ ↓ │ │
│ do something │ │
│ └→──────┘ │
└─────────────┘
────────────────────────────────
另一个 我所谓log法的东西,则是 "我delay期间的事件我都不要"
比方说,我按住空白键假设两秒会发十次,
但是实际上只有间隔一秒的两次是实际有效的 。
那我就设一个时间,上一次按键到这次按键时,
必须要到一定的时间才列入有效的执行,否则我就当作没看到。
这个可以减少/过滤多余的按键事件。
他的大概模型是很单纯也很简单,如下面所述
假设delaytime(int) 为1000 (单位:ms)
↓
纪录起始(lasttime)
↓
┌─────── key action ─────────────┐
│listening for key... ←───────┐ │
│ ↓ │ │
│ onKeydown │ │
│ ↓ │ │
│ 取得时间(nowtime) ↑ │
│ ↓ no │ │
│ (nowtime-lasttime) > delaytime ──┤ │
│ │yes │ │
│ ↓ │ │
│ lasttime=nowtime │ │
│ do action ↑ │
│ └─────────────┘ │
└──────────────────────────┘
ps.虽然说应该是我多心,不过还是提醒一下,
lasttime要作为listener的成员,不然每次onKeydown会无法保留纪录。
--
这些是我过去在做小游戏的经验啦,
不是甚麽很专业的东西,但应该堪用就是了...
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 语 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼
*◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂
~telnet://tony1223.no-ip.info
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.59.247
※ 编辑: TonyQ 来自: 220.132.59.247 (12/09 16:21)
※ 编辑: TonyQ 来自: 220.132.59.247 (12/09 16:35)
1F:推 PsMonkey:打那麽多,要收也不是,不收也不是... 12/09 17:43
2F:→ TonyQ:相信我 我跟你的心情是差不多的...XD 12/09 18:26
3F:推 linjack:推专业流程图 XDDDD 12/09 19:00
4F:推 psalter:推+1 12/10 09:42