查看: 3580|回复: 6

[已经解决] 有判断按键按下 和 弹起 的吗

[复制链接]
梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
回帖
133
发表于 2014-7-29 15:21:23 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
有能判断按键按下时  和 按键弹起   代码吗  

#当按键按下 显示 " 显示窗口"  中时 如果按键还没弹起  就不在显示 显示窗口 了
只有按键弹起后 从新按下 才 显示窗口


  if  按键(Alt)按下时  and  按键(E)按下时 and $aa  !=   true   
     显示窗口
        $aa  !=   true  
   else #弹起时
        $aa = false
   end
我试过这方法  但是一直按着  窗口就 一直显示 后多的  
如果 加判断  if 窗口在显示 时   就释放   他就会  一直显示 然后 释放 循环


梦石
1
星屑
7574
在线时间
2650 小时
注册时间
2013-8-23
回帖
2152

开拓者

发表于 2014-7-29 16:00:29 | 显示全部楼层
本帖最后由 鑫晴 于 2014-7-29 16:01 编辑

好像只有这个



Input
处理游戏手柄和键盘输入信息的模块。

模块方法

Input.update
更新输入信息。原则上 1 帧调用 1 次。

Input.press?(num)
判断与编号 num 对应的按钮是否现在被按下。

如果按下返回 true,未按下则返回 false。

if Input.press?(Input::C)
  do_something
end

Input.trigger?(num)
判断与编号 num 对应的按钮是否重新被按下。

只有从未按下状态向按下状态变化的瞬间被认定是「重新被按下」。

如果按下返回 true,未按下则返回 false。

Input.repeat?(num)
判断与编号 num 对应的按钮是否重新被按下。

和 trigger? 不同的是,其考虑了连续按下按钮时的重复。

如果按下返回 true,未按下则返回 false。

Input.dir4
判断方向按钮的状态,是 4 方向输入的特殊形式,返回与数字键对应的整数(2,4,6,8)。

方向按钮未按下(或被看作与其相同)则返回 0。

Input.dir8
判断方向按钮的状态,是 8 方向输入的特殊形式,返回与数字键对应的整数(1,2,3,4,6,7,8,9)。

方向按钮未按下(或被看作与其相同)则返回 0。

常量

DOWN LEFT RIGHT UP
与方向按钮的下、左、右、上相对应的编号。

A B C X Y Z L R
与各按钮相对应的编号。

SHIFT CTRL ALT
与键盘的 SHIFT、CTRL、ALT 键直接相对应的编号。

F5 F6 F7 F8 F9
与键盘的各功能键相对应的编号。除此之外的功能键已被系统保留,不能取得。

回复

使用道具 举报

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
回帖
1643

开拓者

发表于 2014-7-29 17:25:49 | 显示全部楼层
语死早没看懂你要什么
[ 判定,       第一帧为true        | 2-------------∞帧只要不弹起都为true ]
[ Input.trigger?(Input::ALT)    | Input.repeat?(Input::ALT)               ]
Input.press?(Input::ALT) 只要按钮是按下的状态就为true, 弹起状态就为false

点评

我想LZ的意思应该是有没有这样的监控:某按键从【按下】状态到【非按下】状态的切换瞬间为true,其余情况为false,Input.trigger?和这个作用是相反的。  发表于 2014-7-29 18:31

  -fk: -azogi:
回复

使用道具 举报

梦石
0
星屑
50
在线时间
378 小时
注册时间
2013-10-14
回帖
213
发表于 2014-7-29 21:05:46 | 显示全部楼层
全键盘脚本是有这样的功能啊~~!!

if Kboard.press?($R_Key_D)
  self.guard # 按住的情况~
else
  self.remove_guard # 松开的情况
end

附带全键盘脚本~!![pre lang="ruby" line="1"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#
#  全键盘
# ★、Kboard.press?(键位)  返回是否按下这个键的判断。
#     比如条件分歧:Kboard.keyboard($R_Key_H)
#                   则当按下键盘H键的时候条件分歧成立
#
# ★、Kboard.repeat?(键位) == 1 当连续按住某键返回真,否则为false
#     比如条件分歧:Kboard.keyb($R_Key_U) == 1
#                   则当持续按下键盘U的时候条件分歧成立
#
# ★、Kboard.trigger?(键位,1) 似乎可以做开关用。按下一次变为true,再按变false
#  修改:夏娜
#
#============================================================================

module Kboard
  #==========================================================================
  # 以下是全键盘按键列表
  #--------------------------------------------------------------------------
  $Rmouse_BUTTON_L = 0x01        # left mouse button
  $Rmouse_BUTTON_R = 0x02        # right mouse button
  $Rmouse_BUTTON_M = 0x04        # middle mouse button
  $Rmouse_BUTTON_4 = 0x05        # 4th mouse button
  $Rmouse_BUTTON_5 = 0x06        # 5th mouse button
  #--------------------------------------------------------------------------
  $R_Key_BACK      = 0x08        # BACKSPACE key
  $R_Key_TAB       = 0x09        # TAB key
  $R_Key_RETURN    = 0x0D        # ENTER key
  $R_Key_SHIFT     = 0x10        # SHIFT key
  $R_Key_CTLR      = 0x11        # CTLR key
  $R_Key_ALT       = 0x12        # ALT key
  $R_Key_PAUSE     = 0x13        # PAUSE key
  $R_Key_CAPITAL   = 0x14        # CAPS LOCK key
  $R_Key_ESCAPE    = 0x1B        # ESC key
  $R_Key_SPACE     = 0x20        # SPACEBAR
  $R_Key_PRIOR     = 0x21        # PAGE UP key
  $R_Key_NEXT      = 0x22        # PAGE DOWN key
  $R_Key_END       = 0x23        # END key
  $R_Key_HOME      = 0x24        # HOME key
  $R_Key_LEFT      = 0x25        # LEFT ARROW key
  $R_Key_UP        = 0x26        # UP ARROW key
  $R_Key_RIGHT     = 0x27        # RIGHT ARROW key
  $R_Key_DOWN      = 0x28        # DOWN ARROW key
  $R_Key_SELECT    = 0x29        # SELECT key
  $R_Key_PRINT     = 0x2A        # PRINT key
  $R_Key_SNAPSHOT  = 0x2C        # PRINT SCREEN key
  $R_Key_INSERT    = 0x2D        # INS key
  $R_Key_DELETE    = 0x2E        # DEL key
  #--------------------------------------------------------------------------
  $R_Key_0         = 0x30        # 0 key
  $R_Key_1         = 0x31        # 1 key
  $R_Key_2         = 0x32        # 2 key
  $R_Key_3         = 0x33        # 3 key
  $R_Key_4         = 0x34        # 4 key
  $R_Key_5         = 0x35        # 5 key
  $R_Key_6         = 0x36        # 6 key
  $R_Key_7         = 0x37        # 7 key
  $R_Key_8         = 0x38        # 8 key
  $R_Key_9         = 0x39        # 9 key
  #--------------------------------------------------------------------------
  $R_Key_A         = 0x41        # A key
  $R_Key_B         = 0x42        # B key
  $R_Key_C         = 0x43        # C key
  $R_Key_D         = 0x44        # D key
  $R_Key_E         = 0x45        # E key
  $R_Key_F         = 0x46        # F key
  $R_Key_G         = 0x47        # G key
  $R_Key_H         = 0x48        # H key
  $R_Key_I         = 0x49        # I key
  $R_Key_J         = 0x4A        # J key
  $R_Key_K         = 0x4B        # K key
  $R_Key_L         = 0x4C        # L key
  $R_Key_M         = 0x4D        # M key
  $R_Key_N         = 0x4E        # N key
  $R_Key_O         = 0x4F        # O key
  $R_Key_P         = 0x50        # P key
  $R_Key_Q         = 0x51        # Q key
  $R_Key_R         = 0x52        # R key
  $R_Key_S         = 0x53        # S key
  $R_Key_T         = 0x54        # T key
  $R_Key_U         = 0x55        # U key
  $R_Key_V         = 0x56        # V key
  $R_Key_W         = 0x57        # W key
  $R_Key_X         = 0x58        # X key
  $R_Key_Y         = 0x59        # Y key
  $R_Key_Z         = 0x5A        # Z key
  #--------------------------------------------------------------------------
  $R_Key_LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  $R_Key_RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  $R_Key_APPS      = 0x5D        # Applications key (Natural keyboard)
  #--------------------------------------------------------------------------
  $R_Key_NUMPAD0   = 0x60        # Numeric keypad 0 key
  $R_Key_NUMPAD1   = 0x61        # Numeric keypad 1 key
  $R_Key_NUMPAD2   = 0x62        # Numeric keypad 2 key
  $R_Key_NUMPAD3   = 0x63        # Numeric keypad 3 key
  $R_Key_NUMPAD4   = 0x64        # Numeric keypad 4 key
  $R_Key_NUMPAD5   = 0x65        # Numeric keypad 5 key
  $R_Key_NUMPAD6   = 0x66        # Numeric keypad 6 key
  $R_Key_NUMPAD7   = 0x67        # Numeric keypad 7 key
  $R_Key_NUMPAD8   = 0x68        # Numeric keypad 8 key
  $R_Key_NUMPAD9   = 0x69        # Numeric keypad 9 key
  $R_Key_MULTIPLY  = 0x6A        # Multiply key (*)
  $R_Key_ADD       = 0x6B        # Add key (+)
  $R_Key_SEPARATOR = 0x6C        # Separator key
  $R_Key_SUBTRACT  = 0x6D        # Subtract key (-)
  $R_Key_DECIMAL   = 0x6E        # Decimal key
  $R_Key_DIVIDE    = 0x6F        # Divide key (/)
  #--------------------------------------------------------------------------
  $R_Key_F1        = 0x70        # F1 key
  $R_Key_F2        = 0x71        # F2 key
  $R_Key_F3        = 0x72        # F3 key
  $R_Key_F4        = 0x73        # F4 key
  $R_Key_F5        = 0x74        # F5 key
  $R_Key_F6        = 0x75        # F6 key
  $R_Key_F7        = 0x76        # F7 key
  $R_Key_F8        = 0x77        # F8 key
  $R_Key_F9        = 0x78        # F9 key
  $R_Key_F10       = 0x79        # F10 key
  $R_Key_F11       = 0x7A        # F11 key
  $R_Key_F12       = 0x7B        # F12 key
  #--------------------------------------------------------------------------
  $R_Key_NUMLOCK   = 0x90        # NUM LOCK key
  $R_Key_SCROLL    = 0x91        # SCROLL LOCK key
  #--------------------------------------------------------------------------
  $R_Key_LSHIFT    = 0xA0        # Left SHIFT key
  $R_Key_RSHIFT    = 0xA1        # Right SHIFT key
  $R_Key_LCONTROL  = 0xA2        # Left CONTROL key
  $R_Key_RCONTROL  = 0xA3        # Right CONTROL key
  $R_Key_L_ALT     = 0xA4        # Left ALT key
  $R_Key_R_ALT     = 0xA5        # Right ALT key
  #--------------------------------------------------------------------------
  $R_Key_SEP       = 0xBC        # , key
  $R_Key_DASH      = 0xBD        # - key
  $R_Key_DOTT      = 0xBE        # . Key
  
  
  
module_function

@R_Key_Hash = {}
@R_Key_Repeat = {}

GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')

def press?(rkey)
   return GetKeyState.call(rkey) != 0
end

def repeat?(rkey)
   result = GetKeyState.call(rkey)
   if result != 0
     if @R_Key_Repeat[rkey].nil?
       @R_Key_Repeat[rkey] = 0
       return true
     end
     @R_Key_Repeat[rkey] += 1
   else
     @R_Key_Repeat[rkey] = nil
     @R_Key_Hash[rkey] = 0
   end
   if !@R_Key_Repeat[rkey].nil? and @R_Key_Repeat[rkey] > 4 # 4乃准确数字
     @R_Key_Repeat[rkey] = 0
     return true
   else
     return false
   end
end

def trigger?(rkey)
   result = GetKeyState.call(rkey)
   if @R_Key_Hash[rkey] == 1 and result != 0
     return false
   end
   if result != 0
     @R_Key_Hash[rkey] = 1
     return true
   else
     @R_Key_Hash[rkey] = 0
     return false
   end
end

end[/pre]

评分

参与人数 1星屑 +5 收起 理由
sblkhgm + 5

查看全部评分

最简单的学习方法就是努力回答别人的问题...
任何教程都没有实践来的重要...
XP小问题都能自己解决了,剩下的就是脚本了...
╰⋛⋋⊱⋋๑角⊱☠c色๑⋌⊰⋌⋚╯
回复

使用道具 举报

梦石
0
星屑
50
在线时间
322 小时
注册时间
2011-6-24
回帖
133
 楼主| 发表于 2014-7-29 22:08:02 | 显示全部楼层
batfjtn 发表于 2014-7-29 21:05
全键盘脚本是有这样的功能啊~~!!

if Kboard.press?($R_Key_D)

def press?(rkey)
def repeat?(rkey)
def trigger?(rkey)
麻烦说下有什么区别啊

点评

楼下有了回答~~!!  发表于 2014-7-29 23:00
回复

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-7-29 22:49:48 | 显示全部楼层
为了说明问题方便,按键用空格举例。

press?(rkey):判断某个按键是否被按住,意思就是说按住空格(不抬起),press?返回true,一旦空格抬起,press返回false。
trigger?(rkey):判断某个按键是否被按下,意思就是说空格键原来的状态是【非按下】的,从【非按下】到【按下】这一瞬间,trigger?返回true。除此以外,不按空格或者按住空格不放开,trigger?返回的都是false。
repeat(rkey):判断某个按键是否被重新按下,这个不太好解释,意思就是说,第一次由【非按下】变为【按下】,repeat?返回true,如果之后按住空格不放,则每过一段很短的时间,repeat?会返回true。其余情况返回false。这个多用在方向键移动窗口的光标上,比方说你一直按住【方向键:下】,你会看到光标一格一格往下走。这里用的就是repeat?,如果换成press?,那么光标移动特别快(大约是1格/帧),如果换成trigger?,你会发现光标往下动1格后就不动了。

很遗憾,没有LZ说的“判断按键抬起”,所谓判断按键抬起,就是当按键的状态由【按下】变为【非按下】的那一瞬间为true,其余情况为false,这个和trigger?相反,我们可以仿照trigger?的定义来定义出“判断按键抬起”。
以下脚本以4L的全键盘脚本为基础。
  1. # 判断按键抬起
  2. def release?(rkey)
  3.   result = GetKeyState.call(rkey)
  4.   if result != 0
  5.     @R_Key_Hash[rkey] = 1
  6.     return false
  7.   else
  8.     if @R_Key_Hash[rkey] == 0
  9.       return false
  10.     else
  11.       @R_Key_Hash[rkey] = 0
  12.       return true
  13.     end
  14.   end
  15. end
复制代码
未测试,有问题再找我。

评分

参与人数 1星屑 +10 收起 理由
batfjtn + 10 感谢帮我回答楼上的~!!

查看全部评分

回复

使用道具 举报

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
回帖
1223
发表于 2014-7-30 09:44:00 | 显示全部楼层
补充LS,press / repeat = 4  这是数学式子!!4乃准确数字。。。
所以 在菜单中press会很快。
按下弹起,应该就是按下的状态从true变为false的那一瞬间
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部