设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3545|回复: 21
打印 上一主题 下一主题

[已经解决] 全键盘按键判断的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4890
在线时间
915 小时
注册时间
2015-7-1
帖子
362
跳转到指定楼层
1
发表于 2018-10-13 16:00:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
全键盘


我在游戏中设置了很多个键位,
现在我想要的是判断是不是按下Q键,
如果不是按下Q键就另外处理(就是直接判断除了Q的其他键)
因为设置了很多键位,设置很不方便,
所以想问下能不能直接判断按下除了Q之外的按键分歧
【四季】已上架steam!欢迎大家来玩!

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22437
在线时间
2335 小时
注册时间
2005-10-15
帖子
1160

开拓者

2
发表于 2018-10-13 17:04:28 | 只看该作者
本帖最后由 SailCat 于 2018-10-13 17:06 编辑

换我的全键盘脚本
https://rpg.blue/thread-405036-1-1.html

判断用
Keyboard.trigger?(Keyboard::ANY_KEY - [Keyboard::Q])
就是按下除了Q之外的任意键(当然这里任意键的定义和windows系统一样,像ctrl/alt什么的控制键是不认的)

如果要处理是Q,不是Q两种情况,用两层分歧
外面是Keyboard.trigger?(Keyboard::ANY_KEY)

里面是Keyboard.trigger?(Keyboard::Q),并勾上“条件不满足的分歧”

点评

谢谢,不过我不想换脚本...不换脚本能不能实现呢? 你那个有点难懂,我也用这个脚本写了挺多判断的,换有点麻烦...  发表于 2018-10-13 18:28

评分

参与人数 1+1 收起 理由
L7-wind + 1 塞糖

查看全部评分

SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33173
在线时间
10489 小时
注册时间
2009-3-15
帖子
4756
3
发表于 2018-10-13 20:57:16 | 只看该作者
本帖最后由 soulsaga 于 2018-10-13 21:37 编辑

发一下你用的全键盘脚本..

点评

等..下次来个更闪的..  发表于 2018-10-13 22:46
你的簽名档閃閃下太障眼了能不能刪掉  发表于 2018-10-13 22:12
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14048
在线时间
2070 小时
注册时间
2016-9-20
帖子
844
4
发表于 2018-10-13 22:11:21 | 只看该作者
for i in 8..190 檢測全部鍵
      if Kboard.press?(i)
if i != $R_Key_Q
$QQQQ = good #除Q以外
else
$QQQQ = bad #按了Q
end
end   
      end
    end
然后你就得到 $QQQQ = good

条件分歧:腳本:$QQQQ = good
内容仅供参考,
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33173
在线时间
10489 小时
注册时间
2009-3-15
帖子
4756
5
发表于 2018-10-13 22:42:17 | 只看该作者
本帖最后由 soulsaga 于 2018-10-13 22:45 编辑

RUBY 代码复制
  1. def 任意键?(rkey)
  2.    for i in 8..190
  3.      if !rkey.nil? and Kboard.press?(i) and i != rkey and !Kboard.press?(rkey)
  4.    return GetKeyState.call(i)
  5.    break
  6.    end
  7.    end
  8.  
  9.  
  10.    return
  11. end


按住Q以外的按键都通过..

Kboard.任意键?($R_Key_Q)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4890
在线时间
915 小时
注册时间
2015-7-1
帖子
362
6
 楼主| 发表于 2018-10-14 15:26:56 | 只看该作者
soulsaga 发表于 2018-10-13 22:42
def 任意键?(rkey)
   for i in 8..190
     if !rkey.nil? and Kboard.press?(i) and i != rkey and !Kboa ...




我直接放到脚本最后了,
然后使用报错了
【四季】已上架steam!欢迎大家来玩!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4890
在线时间
915 小时
注册时间
2015-7-1
帖子
362
7
 楼主| 发表于 2018-10-14 15:30:26 | 只看该作者
ppspssss 发表于 2018-10-13 22:11
for i in 8..190 檢測全部鍵
      if Kboard.press?(i)
if i != $R_Key_Q


我把代码放脚本最后和直接在事件插入脚本都报错了

点评

肯定不是直接用啊,我那个只是第一时間想出的方案  发表于 2018-10-14 15:45
【四季】已上架steam!欢迎大家来玩!
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33173
在线时间
10489 小时
注册时间
2009-3-15
帖子
4756
8
发表于 2018-10-14 15:56:20 | 只看该作者
本帖最后由 soulsaga 于 2018-10-14 21:07 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4.  
  5. #============================================================================
  6. # ■ Keyboard Script
  7. #----------------------------------------------------------------------------
  8. #  By: Cybersam
  9. #   Date: 25/05/05
  10. #   Version 4
  11. #============================================================================
  12. # 66对此脚本使用方法的说明(可能不是很准确,反正大体能用):
  13. #
  14. # ★、Kboard.keyboard(键位)  返回是否按下这个键的判断。
  15. #     比如条件分歧:Kboard.keyboard($R_Key_H)
  16. #                   则当按下键盘H键的时候条件分歧成立
  17. #Kboard.press?
  18. # ★、Kboard.keyb(键位) == 1 当连续按住某键返回真,否则为false
  19. #     比如条件分歧:Kboard.keyb($R_Key_U) == 1
  20. #                   则当持续按下键盘U的时候条件分歧成立
  21. #
  22. # ★、Kboard.key(键位,1) 似乎可以做开关用。按下一次变为true,再按变false
  23. #============================================================================
  24.  
  25. module Kboard
  26.   #==========================================================================
  27.   # 以下是全键盘按键列表
  28.   #--------------------------------------------------------------------------
  29.   $Rmouse_BUTTON_L = 0x01        # left mouse button
  30.   $Rmouse_BUTTON_R = 0x02        # right mouse button
  31.   $Rmouse_BUTTON_M = 0x04        # middle mouse button
  32.   $Rmouse_BUTTON_4 = 0x05        # 4th mouse button
  33.   $Rmouse_BUTTON_5 = 0x06        # 5th mouse button
  34.   #--------------------------------------------------------------------------
  35.   $R_Key_BACK      = 0x08        # BACKSPACE key
  36.   $R_Key_TAB       = 0x09        # TAB key
  37.   $R_Key_RETURN    = 0x0D        # ENTER key
  38.   $R_Key_SHIFT     = 0x10        # SHIFT key
  39.   $R_Key_CTLR      = 0x11        # CTLR key
  40.   $R_Key_ALT       = 0x12        # ALT key
  41.   $R_Key_PAUSE     = 0x13        # PAUSE key
  42.   $R_Key_CAPITAL   = 0x14        # CAPS LOCK key
  43.   $R_Key_ESCAPE    = 0x1B        # ESC key
  44.   $R_Key_SPACE     = 0x20        # SPACEBAR
  45.   $R_Key_PRIOR     = 0x21        # PAGE UP key
  46.   $R_Key_NEXT      = 0x22        # PAGE DOWN key
  47.   $R_Key_END       = 0x23        # END key
  48.   $R_Key_HOME      = 0x24        # HOME key
  49.   $R_Key_LEFT      = 0x25        # LEFT ARROW key
  50.   $R_Key_UP        = 0x26        # UP ARROW key
  51.   $R_Key_RIGHT     = 0x27        # RIGHT ARROW key
  52.   $R_Key_DOWN      = 0x28        # DOWN ARROW key
  53.   $R_Key_SELECT    = 0x29        # SELECT key
  54.   $R_Key_PRINT     = 0x2A        # PRINT key
  55.   $R_Key_SNAPSHOT  = 0x2C        # PRINT SCREEN key
  56.   $R_Key_INSERT    = 0x2D        # INS key
  57.   $R_Key_DELETE    = 0x2E        # DEL key
  58.   #--------------------------------------------------------------------------
  59.   $R_Key_0         = 0x30        # 0 key
  60.   $R_Key_1         = 0x31        # 1 key
  61.   $R_Key_2         = 0x32        # 2 key
  62.   $R_Key_3         = 0x33        # 3 key
  63.   $R_Key_4         = 0x34        # 4 key
  64.   $R_Key_5         = 0x35        # 5 key
  65.   $R_Key_6         = 0x36        # 6 key
  66.   $R_Key_7         = 0x37        # 7 key
  67.   $R_Key_8         = 0x38        # 8 key
  68.   $R_Key_9         = 0x39        # 9 key
  69.   #--------------------------------------------------------------------------
  70.   $R_Key_A         = 0x41        # A key
  71.   $R_Key_B         = 0x42        # B key
  72.   $R_Key_C         = 0x43        # C key
  73.   $R_Key_D         = 0x44        # D key
  74.   $R_Key_E         = 0x45        # E key
  75.   $R_Key_F         = 0x46        # F key
  76.   $R_Key_G         = 0x47        # G key
  77.   $R_Key_H         = 0x48        # H key
  78.   $R_Key_I         = 0x49        # I key
  79.   $R_Key_J         = 0x4A        # J key
  80.   $R_Key_K         = 0x4B        # K key
  81.   $R_Key_L         = 0x4C        # L key
  82.   $R_Key_M         = 0x4D        # M key
  83.   $R_Key_N         = 0x4E        # N key
  84.   $R_Key_O         = 0x4F        # O key
  85.   $R_Key_P         = 0x50        # P key
  86.   $R_Key_Q         = 0x51        # Q key
  87.   $R_Key_R         = 0x52        # R key
  88.   $R_Key_S         = 0x53        # S key
  89.   $R_Key_T         = 0x54        # T key
  90.   $R_Key_U         = 0x55        # U key
  91.   $R_Key_V         = 0x56        # V key
  92.   $R_Key_W         = 0x57        # W key
  93.   $R_Key_X         = 0x58        # X key
  94.   $R_Key_Y         = 0x59        # Y key
  95.   $R_Key_Z         = 0x5A        # Z key
  96.   #--------------------------------------------------------------------------
  97.   $R_Key_LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  98.   $R_Key_RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  99.   $R_Key_APPS      = 0x5D        # Applications key (Natural keyboard)
  100.   #--------------------------------------------------------------------------
  101.   $R_Key_NUMPAD0   = 0x60        # Numeric keypad 0 key
  102.   $R_Key_NUMPAD1   = 0x61        # Numeric keypad 1 key
  103.   $R_Key_NUMPAD2   = 0x62        # Numeric keypad 2 key
  104.   $R_Key_NUMPAD3   = 0x63        # Numeric keypad 3 key
  105.   $R_Key_NUMPAD4   = 0x64        # Numeric keypad 4 key
  106.   $R_Key_NUMPAD5   = 0x65        # Numeric keypad 5 key
  107.   $R_Key_NUMPAD6   = 0x66        # Numeric keypad 6 key
  108.   $R_Key_NUMPAD7   = 0x67        # Numeric keypad 7 key
  109.   $R_Key_NUMPAD8   = 0x68        # Numeric keypad 8 key
  110.   $R_Key_NUMPAD9  = 0x69        # Numeric keypad 9 key
  111.   $R_Key_MULTIPLY  = 0x6A        # Multiply key (*)
  112.   $R_Key_ADD       = 0x6B        # Add key (+)
  113.   $R_Key_SEPARATOR = 0x6C        # Separator key
  114.   $R_Key_SUBTRACT  = 0x6D        # Subtract key (-)
  115.   $R_Key_DECIMAL   = 0x6E        # Decimal key
  116.   $R_Key_DIVIDE    = 0x6F        # Divide key (/)
  117.   #--------------------------------------------------------------------------
  118.   $R_Key_F1        = 0x70        # F1 key
  119.   $R_Key_F2        = 0x71        # F2 key
  120.   $R_Key_F3        = 0x72        # F3 key
  121.   $R_Key_F4        = 0x73        # F4 key
  122.   $R_Key_F5        = 0x74        # F5 key
  123.   $R_Key_F6        = 0x75        # F6 key
  124.   $R_Key_F7        = 0x76        # F7 key
  125.   $R_Key_F8        = 0x77        # F8 key
  126.   $R_Key_F9        = 0x78        # F9 key
  127.   $R_Key_F10       = 0x79        # F10 key
  128.   $R_Key_F11       = 0x7A        # F11 key
  129.   $R_Key_F12       = 0x7B        # F12 key
  130.   #--------------------------------------------------------------------------
  131.   $R_Key_NUMLOCK   = 0x90        # NUM LOCK key
  132.   $R_Key_SCROLL    = 0x91        # SCROLL LOCK key
  133.   #--------------------------------------------------------------------------
  134.   $R_Key_LSHIFT    = 0xA0        # Left SHIFT key
  135.   $R_Key_RSHIFT    = 0xA1        # Right SHIFT key
  136.   $R_Key_LCONTROL  = 0xA2        # Left CONTROL key
  137.   $R_Key_RCONTROL  = 0xA3        # Right CONTROL key
  138.   $R_Key_L_ALT    = 0xA4        # Left ALT key
  139.   $R_Key_R_ALT    = 0xA5        # Right ALT key
  140.   #--------------------------------------------------------------------------
  141.   $R_Key_SEP      = 0xBC        # , key
  142.   $R_Key_DASH      = 0xBD        # - key
  143.   $R_Key_DOTT      = 0xBE        # . Key
  144.   #--------------------------------------------------------------------------
  145.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  146.   GetKeyboardState = Win32API.new("user32","GetKeyState",['I'],'I')
  147.   GetSetKeyState = Win32API.new("user32","SetKeyboardState",['I'],'I')
  148.   #--------------------------------------------------------------------------
  149.   module_function
  150.   #--------------------------------------------------------------------------
  151.   def keyb(rkey)
  152.      if GetKeyState.call(rkey) != 0
  153.        return 1
  154.      end
  155.      return 0
  156.   end
  157.    #--------------------------------------------------------------------------
  158.   def keyboard(rkey)
  159.     GetKeyState.call(rkey) & 0x01 == 1  #
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   def key(rkey, key = 0)
  163.     GetKeyboardState.call(rkey) & 0x01 == key #
  164.   end
  165. end
  166.  
  167.  
  168.  
  169.  
  170.  
  171. #============================================================================
  172. # ■ 全键盘脚本(夏娜改,优化)
  173. #============================================================================
  174. #原来常用的全键盘脚本使用方法比较诡异,这里夏娜进行了修改。
  175. #本脚本没有给出键值,请在此处查询:[url]http://www.66rpg.com/htm/news7.htm[/url] 。
  176. #本教学95%以上作者用不上,除非制作ARPG或者默认按键不够用了。
  177. #============================================================================
  178. # 1、Kboard.press?(key) 同 Input.press?(key)
  179. # 2、Kboard.repeat?(key) 同 Input.repeat?(key)
  180. # 3、Kboard.trigger?(key) 同 Input.trigger?(key)
  181. #============================================================================
  182.  
  183.  
  184.  
  185.  
  186. module Kboard
  187.  
  188. module_function
  189.  
  190. @R_Key_Hash = {}
  191. @R_Key_Repeat = {}
  192.  
  193. GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  194.  
  195. def press?(rkey)
  196.    return if rkey.nil?
  197.  
  198.  
  199.    return GetKeyState.call(rkey) != 0
  200. end
  201.  
  202. def 任意键?(rkey, lkey=0)
  203.    for i in 8..190
  204.      if !rkey.nil? and Kboard.press?(i) and i != rkey and !Kboard.press?(rkey) and i != lkey and !Kboard.press?(lkey)
  205.    return GetKeyState.call(i) != 0
  206.    break
  207.    end
  208.    end
  209.    return
  210. end
  211.  
  212. def repeat?(rkey)
  213.    return if rkey.nil?
  214.  
  215.  
  216.    result = GetKeyState.call(rkey)
  217.    if result != 0
  218.      if @R_Key_Repeat[rkey].nil?
  219.        @R_Key_Repeat[rkey] = 0
  220.        return true
  221.      end
  222.      @R_Key_Repeat[rkey] += 1
  223.    else
  224.      @R_Key_Repeat[rkey] = nil
  225.      @R_Key_Hash[rkey] = 0
  226.    end
  227.    if !@R_Key_Repeat[rkey].nil? and @R_Key_Repeat[rkey] > 4 # 4乃准确数字
  228.      @R_Key_Repeat[rkey] = 0
  229.      return true
  230.    else
  231.      return false
  232.    end
  233. end
  234.  
  235. def trigger?(rkey)
  236.    return if rkey.nil?
  237.  
  238.    result = GetKeyState.call(rkey)
  239.    if @R_Key_Hash[rkey] == 1 and result != 0
  240.      return false
  241.    end
  242.    if result != 0
  243.      @R_Key_Hash[rkey] = 1
  244.      return true
  245.    else
  246.      @R_Key_Hash[rkey] = 0
  247.      return false
  248.    end
  249. end
  250.  
  251. end
  252.  
  253.  
  254. #==============================================================================
  255. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  256. #==============================================================================

点评

可以了,谢谢!  发表于 2018-10-14 17:14
修正了脚本..  发表于 2018-10-14 16:44
条件分歧:Kboard.任意键?($R_Key_Q),没效果啊...  发表于 2018-10-14 16:23

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
L7-wind + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4890
在线时间
915 小时
注册时间
2015-7-1
帖子
362
9
 楼主| 发表于 2018-10-14 20:10:58 | 只看该作者
soulsaga 发表于 2018-10-14 15:56
#==============================================================================
# 本脚本来自www.66RP ...

想再问一下,如果是按住Q和W键之外的键都通过怎么实现呢?

点评

会有问题..更新脚本..不填第二个值也没问题..  发表于 2018-10-14 20:32
$R_Key_Q, $R_Key_W),第二个值,不填的话会有问题吗?  发表于 2018-10-14 20:28
已更新脚本..用法:Kboard.任意键?($R_Key_Q, $R_Key_W)  发表于 2018-10-14 20:22
【四季】已上架steam!欢迎大家来玩!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4890
在线时间
915 小时
注册时间
2015-7-1
帖子
362
10
 楼主| 发表于 2018-10-14 20:50:02 | 只看该作者
soulsaga 发表于 2018-10-14 15:56
#==============================================================================
# 本脚本来自www.66RP ...


你脚本中def少了一个d,
然后输入测试了两个没问题了,
但是后来还是报错了,
不知道什么原因

点评

嗯,写错了,再次感谢!  发表于 2018-10-14 22:46
事件脚本写错了?  发表于 2018-10-14 22:38
【四季】已上架steam!欢迎大家来玩!
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-26 06:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表