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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
跳转到指定楼层
1
发表于 2015-11-18 22:18:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
怎样把上下左右的按键设定再W,A,S,D上,把决定和取消键设定在小键盘数字1,2上,知道的告诉下,谢谢

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

2
发表于 2015-11-21 10:59:05 | 只看该作者
首先贴一个 全键盘脚本

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_F12)
  16. #                   则当按下键盘H键的时候条件分歧成立
  17. #
  18. # ★、Kboard.keyb(键位) 当连续按住某键返回真,否则为false
  19. #     比如条件分歧:Kboard.keyb($R_Key_TAB)
  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_BB        = 0x2B        # SELECT key
  56.   $R_Key_SNAPSHOT  = 0x2C        # PRINT SCREEN key
  57.   $R_Key_INSERT    = 0x2D        # INS key
  58.   $R_Key_DELETE    = 0x2E        # DEL key
  59.   #--------------------------------------------------------------------------
  60.   $R_Key_0         = 0x30        # 0 key
  61.   $R_Key_1         = 0x31        # 1 key
  62.   $R_Key_2         = 0x32        # 2 key
  63.   $R_Key_3         = 0x33        # 3 key
  64.   $R_Key_4         = 0x34        # 4 key
  65.   $R_Key_5         = 0x35        # 5 key
  66.   $R_Key_6         = 0x36        # 6 key
  67.   $R_Key_7         = 0x37        # 7 key
  68.   $R_Key_8         = 0x38        # 8 key
  69.   $R_Key_9         = 0x39        # 9 key
  70.   #--------------------------------------------------------------------------
  71.   $R_Key_A         = 0x41        # A key
  72.   $R_Key_B         = 0x42        # B key
  73.   $R_Key_C         = 0x43        # C key
  74.   $R_Key_D         = 0x44        # D key
  75.   $R_Key_E         = 0x45        # E key
  76.   $R_Key_F         = 0x46        # F key
  77.   $R_Key_G         = 0x47        # G key
  78.   $R_Key_H         = 0x48        # H key
  79.   $R_Key_I         = 0x49        # I key
  80.   $R_Key_J         = 0x4A        # J key
  81.   $R_Key_K         = 0x4B        # K key
  82.   $R_Key_L         = 0x4C        # L key
  83.   $R_Key_M         = 0x4D        # M key
  84.   $R_Key_N         = 0x4E        # N key
  85.   $R_Key_O         = 0x4F        # O key
  86.   $R_Key_P         = 0x50        # P key
  87.   $R_Key_Q         = 0x51        # Q key
  88.   $R_Key_R         = 0x52        # R key
  89.   $R_Key_S         = 0x53        # S key
  90.   $R_Key_T         = 0x54        # T key
  91.   $R_Key_U         = 0x55        # U key
  92.   $R_Key_V         = 0x56        # V key
  93.   $R_Key_W         = 0x57        # W key
  94.   $R_Key_X         = 0x58        # X key
  95.   $R_Key_Y         = 0x59        # Y key
  96.   $R_Key_Z         = 0x5A        # Z key
  97.   #--------------------------------------------------------------------------
  98.   $R_Key_LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  99.   $R_Key_RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  100.   $R_Key_APPS      = 0x5D        # Applications key (Natural keyboard)
  101.   #--------------------------------------------------------------------------
  102.   $R_Key_NUMPAD0   = 0x60        # Numeric keypad 0 key
  103.   $R_Key_NUMPAD1   = 0x61        # Numeric keypad 1 key
  104.   $R_Key_NUMPAD2   = 0x62        # Numeric keypad 2 key
  105.   $R_Key_NUMPAD3   = 0x63        # Numeric keypad 3 key
  106.   $R_Key_NUMPAD4   = 0x64        # Numeric keypad 4 key
  107.   $R_Key_NUMPAD5   = 0x65        # Numeric keypad 5 key
  108.   $R_Key_NUMPAD6   = 0x66        # Numeric keypad 6 key
  109.   $R_Key_NUMPAD7   = 0x67        # Numeric keypad 7 key
  110.   $R_Key_NUMPAD8   = 0x68        # Numeric keypad 8 key
  111.   $R_Key_NUMPAD9  = 0x69        # Numeric keypad 9 key
  112.   $R_Key_MULTIPLY  = 0x6A        # Multiply key (*)
  113.   $R_Key_ADD       = 0x6B        # Add key (+)
  114.   $R_Key_SEPARATOR = 0x6C        # Separator key
  115.   $R_Key_SUBTRACT  = 0x6D        # Subtract key (-)
  116.   $R_Key_DECIMAL   = 0x6E        # Decimal key
  117.   $R_Key_DIVIDE    = 0x6F        # Divide key (/)
  118.   #--------------------------------------------------------------------------
  119.   $R_Key_F1        = 0x70        # F1 key
  120.   $R_Key_F2        = 0x71        # F2 key
  121.   $R_Key_F3        = 0x72        # F3 key
  122.   $R_Key_F4        = 0x73        # F4 key
  123.   $R_Key_F5        = 0x74        # F5 key
  124.   $R_Key_F6        = 0x75        # F6 key
  125.   $R_Key_F7        = 0x76        # F7 key
  126.   $R_Key_F8        = 0x77        # F8 key
  127.   $R_Key_F9        = 0x78        # F9 key
  128.   $R_Key_F10       = 0x79        # F10 key
  129.   $R_Key_F11       = 0x7A        # F11 key
  130.   $R_Key_F12       = 0x7B        # F12 key
  131.   #--------------------------------------------------------------------------
  132.   $R_Key_NUMLOCK   = 0x90        # NUM LOCK key
  133.   $R_Key_SCROLL    = 0x91        # SCROLL LOCK key
  134.   #--------------------------------------------------------------------------
  135.   $R_Key_LSHIFT    = 0xA0        # Left SHIFT key
  136.   $R_Key_RSHIFT    = 0xA1        # Right SHIFT key
  137.   $R_Key_LCONTROL  = 0xA2        # Left CONTROL key
  138.   $R_Key_RCONTROL  = 0xA3        # Right CONTROL key
  139.   $R_Key_L_ALT    = 0xA4        # Left ALT key
  140.   $R_Key_R_ALT    = 0xA5        # Right ALT key
  141.   #--------------------------------------------------------------------------
  142.   $R_Key_SEP      = 0xBC        # , key
  143.   $R_Key_DASH      = 0xBD        # - key
  144.   $R_Key_DOTT      = 0xBE        # . Key
  145.   #--------------------------------------------------------------------------
  146.   $R_Key_Hash = {}
  147.   $R_Key_Repeat = {}
  148.  
  149.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  150.   #--------------------------------------------------------------------------
  151.   module_function
  152.   #--------------------------------------------------------------------------
  153.   def keyb(rkey)
  154.      if GetKeyState.call(rkey) != 0
  155.        return true
  156.      end
  157.      return false
  158.   end
  159.    #--------------------------------------------------------------------------
  160.   def keyboard(rkey)
  161.     result = GetKeyState.call(rkey)
  162.     if $R_Key_Hash[rkey] == 1 and result != 0
  163.       return false
  164.     end
  165.     if result != 0
  166.       $R_Key_Hash[rkey] = 1
  167.       return true
  168.     else
  169.       $R_Key_Hash[rkey] = 0
  170.       return false
  171.     end
  172.     #GetKeyState.call(rkey) & 0x01 == 1  #
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   def key(rkey, key = 0)
  176.     GetKeyboardState.call(rkey) & 0x01 == key #
  177.   end
  178. end


其他part让别人回答吧~


回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

R考场第七期纪念奖

3
发表于 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前面 应该就好了
有问题再说
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
4
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

R考场第七期纪念奖

5
发表于 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
复制代码
如上 这次应该不会有问题了
最后 表示对你等了许久的抱歉!

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
6
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
7
 楼主| 发表于 2015-12-6 20:06:29 | 只看该作者
SixRC 发表于 2015-12-5 20:14
上礼拜没回家
刚刚想了想 知道问题了
因为原脚本在调用的时候还带了是重复 还是持续按着这个属性 而我没判 ...

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

使用道具 举报

Lv4.逐梦者

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

R考场第七期纪念奖

8
发表于 2015-12-12 22:59:26 | 只看该作者
本帖最后由 SixRC 于 2015-12-12 23:04 编辑

RUBY 代码复制
  1. class << Graphics
  2.   KE=Win32API.new("user32",'keybd_event','iiii','v')
  3.   GK=Win32API.new("user32","GetAsyncKeyState",'i','i')
  4.   alias update_y update
  5.   def update()
  6.     KE.call(13,0,2,0)
  7.     KE.call(13,0,0,0) if GK.call(0x61) != 0
  8.     update_y
  9.   end
  10. end
  11. module Input
  12.   DOWN=15
  13.   UP=18
  14.   LEFT=14
  15.   RIGHT=16
  16. end
  17. class << Input
  18. Get=Win32API.new("user32","GetAsyncKeyState",'i','i')
  19. def dir4
  20.   w,s,a,d=Get.call(0x57),Get.call(0x53),Get.call(0x41),Get.call(0x44)
  21.   return 0 if ((w != 0 && s !=0) || (a !=0 && d !=0))
  22.   return 8 if w !=0
  23.   return 2 if s !=0
  24.   return 4 if a !=0
  25.   return 6 if d !=0
  26.   0
  27. end
  28. alias trigger_y trigger?
  29. def trigger?(key)
  30.   return trigger_y(2)  if key == 12
  31.   trigger_y(key)
  32. end
  33. end

抱歉
这个问题现在正式被解决

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
9
 楼主| 发表于 2015-12-12 23:06:09 | 只看该作者
SixRC 发表于 2015-12-12 22:59
class

非常感谢,现在可以了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 05:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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