查看: 2846|回复: 8

[已经解决] 键盘按键的设定

[复制链接]
梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
发表于 2015-11-18 22:18:06 | 显示全部楼层 |阅读模式

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

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

×
怎样把上下左右的按键设定再W,A,S,D上,把决定和取消键设定在小键盘数字1,2上,知道的告诉下,谢谢
梦石
0
星屑
1816
在线时间
2527 小时
注册时间
2010-10-12
回帖
1336

开拓者

发表于 2015-11-21 10:59:05 | 显示全部楼层
首先贴一个 全键盘脚本

[pre lang="ruby"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================

#============================================================================
# ■ Keyboard Script
#----------------------------------------------------------------------------
#  By: Cybersam
#   Date: 25/05/05
#   Version 4
#============================================================================
# 66对此脚本使用方法的说明(可能不是很准确,反正大体能用):
#
# ★、Kboard.keyboard(键位)  返回是否按下这个键的判断。
#     比如条件分歧:Kboard.keyboard($R_Key_F12)
#                   则当按下键盘H键的时候条件分歧成立
#
# ★、Kboard.keyb(键位) 当连续按住某键返回真,否则为false
#     比如条件分歧:Kboard.keyb($R_Key_TAB)
#                   则当持续按下键盘U的时候条件分歧成立
#
# ★、Kboard.key(键位,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_BB        = 0x2B        # SELECT 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
  #--------------------------------------------------------------------------
  $R_Key_Hash = {}
  $R_Key_Repeat = {}

  GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  #--------------------------------------------------------------------------
  module_function
  #--------------------------------------------------------------------------
  def keyb(rkey)
     if GetKeyState.call(rkey) != 0
       return true
     end
     return false
  end
   #--------------------------------------------------------------------------
  def keyboard(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
    #GetKeyState.call(rkey) & 0x01 == 1  #
  end
  #--------------------------------------------------------------------------
  def key(rkey, key = 0)
    GetKeyboardState.call(rkey) & 0x01 == key #
  end
end[/pre]

其他part让别人回答吧~


回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2015-11-21 19:43:33 | 显示全部楼层
本帖最后由 SixRC 于 2015-11-21 19:48 编辑
  1. class << Input
  2. Get=Win32API.new("user32","GetAsyncKeyState",'i','i')
  3. def dir4
  4.   w,s,a,d=Get.call(0x57),Get.call(0x53),Get.call(0x41),Get.call(0x44)
  5.   return 0 if ((w != 0 && s !=0) || (a !=0 && d !=0))
  6.   return 8 if w !=0
  7.   return 2 if s !=0
  8.   return 4 if a !=0
  9.   return 6 if d !=0
  10.   0
  11. end
  12. alias trigger_y trigger?
  13. def trigger?(key)
  14.   return Get.call(0x61) != 0 if key == 13
  15.   return Get.call(0x62) != 0 if key == 12
  16.   trigger_y(key)
  17. end
  18. end
复制代码
插在main前面 应该就好了
有问题再说 未命名.PNG
回复

使用道具 举报

梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
 楼主| 发表于 2015-11-25 19:53:48 | 显示全部楼层
本帖最后由 fjm 于 2015-11-25 19:56 编辑
SixRC 发表于 2015-11-21 19:43
插在main前面 应该就好了
有问题再说


行走是可以了,不过和NPC对话,会一直对话,停不下来,选择是否的话,无法往下按

点评

按s无效?  发表于 2015-11-25 20:47
回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2015-12-5 20:14:25 | 显示全部楼层
本帖最后由 SixRC 于 2015-12-5 20:25 编辑

上礼拜没回家
刚刚想了想 知道问题了
因为原脚本在调用的时候还带了是重复 还是持续按着这个属性 而我没判定 so。。
你把原来的换成这个就好
  1. class << Input
  2. Get=Win32API.new("user32","GetAsyncKeyState",'i','i')
  3. def dir4
  4.   w,s,a,d=Get.call(0x57),Get.call(0x53),Get.call(0x41),Get.call(0x44)
  5.   return 0 if ((w != 0 && s !=0) || (a !=0 && d !=0))
  6.   return 8 if w !=0
  7.   return 2 if s !=0
  8.   return 4 if a !=0
  9.   return 6 if d !=0
  10.   0
  11. end
  12. alias trigger_y trigger?
  13. def trigger?(key)
  14.   return trigger_y(1) if key == 13
  15.   return trigger_y(2)  if key == 12
  16.   trigger_y(key)
  17. end
  18. end
复制代码
这样就是用了原方法 只是有了个转变
下面这个版本 做了完整的替换... 把选项也改成用wasd了
  1. class << Input
  2. Get=Win32API.new("user32","GetAsyncKeyState",'i','i')
  3. def dir4
  4.   w,s,a,d=Get.call(0x57),Get.call(0x53),Get.call(0x41),Get.call(0x44)
  5.   return 0 if ((w != 0 && s !=0) || (a !=0 && d !=0))
  6.   return 8 if w !=0
  7.   return 2 if s !=0
  8.   return 4 if a !=0
  9.   return 6 if d !=0
  10.   0
  11. end
  12. alias trigger_y trigger?
  13. def trigger?(key)
  14.   return trigger_y(1) if key == 13
  15.   return trigger_y(2)  if key == 12
  16.   return trigger_y(15)  if key == 2
  17.   return trigger_y(14)  if key == 4
  18.   return trigger_y(16)  if key == 6
  19.   return trigger_y(18)  if key == 8
  20.   trigger_y(key)
  21. end
  22. alias repeat_y repeat?
  23. def repeat?(key)
  24.   return repeat_y(1) if key == 13
  25.   return repeat_y(2)  if key == 12
  26.   return repeat_y(15)  if key == 2
  27.   return repeat_y(14)  if key == 4
  28.   return repeat_y(16)  if key == 6
  29.   return repeat_y(18)  if key == 8
  30.   repeat_y(key)
  31. end
  32. alias press_y press?
  33. def press?(key)
  34.   return press_y(1) if key == 13
  35.   return press_y(2)  if key == 12
  36.   return press_y(15)  if key == 2
  37.   return press_y(14)  if key == 4
  38.   return press_y(16)  if key == 6
  39.   return press_y(18)  if key == 8
  40.   press_y(key)
  41. end
  42. end
复制代码
如上 这次应该不会有问题了
最后 表示对你等了许久的抱歉!

翻了翻记录发现 你最近好努力 真是有激情有活力
我只是无聊写写脚本
所擅长帮助的领域是和原置脚本关联不太大的东西(因为我不想看原置脚本 没心情 没激情 没动力 没所谓)
特点是懒惰 优点是有三分钟热度
不过已经发觉越来越懒了
若有需要 乐于解答
如上 遂止
回复

使用道具 举报

梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
 楼主| 发表于 2015-12-5 21:11:32 | 显示全部楼层
本帖最后由 fjm 于 2015-12-5 21:25 编辑
SixRC 发表于 2015-12-5 20:14
上礼拜没回家
刚刚想了想 知道问题了
因为原脚本在调用的时候还带了是重复 还是持续按着这个属性 而我没判 ...


多谢,这回选择上下可以了,但不能开始游戏了,按0键,Eenter键,都没反应了.最近在尝试做一个游戏
碰到了很多问题,感谢论坛上的朋友,帮我解决了很多问题,感觉做游戏没有玩游戏这么轻松啊,不过也
乐在其中,很多想法可以在做游戏中实现了

点评

..确定取消键 依旧是数字键盘1和2啊 我是笔记本 所以不能测试.. 真的不是这两个键 你告诉我 那很蛋疼  发表于 2015-12-5 21:55
回复

使用道具 举报

梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
 楼主| 发表于 2015-12-6 20:06:29 | 显示全部楼层
SixRC 发表于 2015-12-5 20:14
上礼拜没回家
刚刚想了想 知道问题了
因为原脚本在调用的时候还带了是重复 还是持续按着这个属性 而我没判 ...

小键盘数字键1和2也不能开始游戏,其它的键按了也都没反应
回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2015-12-12 22:59:26 | 显示全部楼层
本帖最后由 SixRC 于 2015-12-12 23:04 编辑

[pre lang="ruby"]class << Graphics
  KE=Win32API.new("user32",'keybd_event','iiii','v')
  GK=Win32API.new("user32","GetAsyncKeyState",'i','i')
  alias update_y update
  def update()
    KE.call(13,0,2,0)
    KE.call(13,0,0,0) if GK.call(0x61) != 0
    update_y
  end
end
module Input
  DOWN=15
  UP=18
  LEFT=14
  RIGHT=16
end
class << Input
Get=Win32API.new("user32","GetAsyncKeyState",'i','i')
def dir4
  w,s,a,d=Get.call(0x57),Get.call(0x53),Get.call(0x41),Get.call(0x44)
  return 0 if ((w != 0 && s !=0) || (a !=0 && d !=0))
  return 8 if w !=0
  return 2 if s !=0
  return 4 if a !=0
  return 6 if d !=0
  0
end
alias trigger_y trigger?
def trigger?(key)
  return trigger_y(2)  if key == 12
  trigger_y(key)
end
end[/pre]
抱歉
这个问题现在正式被解决

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
2245
在线时间
1015 小时
注册时间
2015-10-17
回帖
1077
 楼主| 发表于 2015-12-12 23:06:09 | 显示全部楼层
SixRC 发表于 2015-12-12 22:59
class

非常感谢,现在可以了
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部