Project1

标题: 如何判断按键的按下而不按住 [打印本页]

作者: 水镜风生    时间: 2009-3-29 23:33
标题: 如何判断按键的按下而不按住
呃……本意是想做一个蓄力攻击,按下C键攻击,按住C键蓄力,因此写了这样的脚本:
if Input.trigger?(Input::C)
  攻击
elsif Input.press?(Input::C)
  蓄力
end

但是这样有一个问题,就是每次蓄力前都要先攻击一次,因此我就改成:

count = 0       # 在别的地方赋初值,只执行一次
if Input.press?(Input::C)               
  count += 1                               # 计算按住C键的时间
  蓄力 if count > 10
elsif !Input.press?(Input::C)              # 放下C键时
  if count <= 10                           # 按住时间低于10就攻击
    攻击
  else
    畜力效果                           
  end
  count = 0
end
  
但是这样有个问题,就是!Input.press?在放开键后才判断为true,而Input.trigger?在按下时就判断为true,因此第二种方案的攻击与第一种方案相比有明显的滞后性,现在没想出更好的办法,因此来请教各位。

PS:不知道Input.repeat?的效果,可能用上这个么?
作者: zh99998    时间: 2009-3-30 01:02
以下引用水镜风生于2009-3-29 15:33:34的发言:
但是这样有个问题,就是!Input.press?在放开键后才判断为true,而Input.trigger?在按下时就判断为true,因此第二种方案的攻击与第一种方案相比有明显的滞后性

一定会这样的,因为在10帧的时间之内,根本无法判断玩家是要攻击还是要蓄力
(从逻辑的角度想一想)
所以只能等10帧过后,如果松开了就判定为攻击,否则判定为蓄力
作者: 雪流星    时间: 2009-3-31 13:38
试试看把条件反过来:

if Input.press?(Input::C)
蓄力
elsif Input.trigger?(Input::C)
攻击
end


[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: wy29    时间: 2009-4-2 07:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2009-4-4 18:40
像这种即时性这么强的东西最好别用trigger或者repeat吧,感觉纯press?()比较好,帧数好控制一些 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 水镜风生    时间: 2009-4-5 05:15
仔细一想,好像真的不可能实现,因为按下C键的时间是不确定的。
(按一下然后立即放开,看上去是很短的时间,实际上却是已经持续了4~20帧左右)

没办法,只好换一种模式,还是谢谢各位了。
作者: zh99998    时间: 2009-4-5 05:16
其实我已经练成了按一帧某键的本领
(PIA飞)

可以这样,无论按键长短,都视为蓄力,松开的时候攻击
作者: 沉影不器    时间: 2009-4-5 06:08
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1