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

Project1

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

[RMVA发布] 【you need it】键盘设定扩张

[复制链接]

Lv1.梦旅人

梦石
0
星屑
155
在线时间
129 小时
注册时间
2014-2-22
帖子
233
跳转到指定楼层
1
发表于 2014-6-1 12:22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
当你使用了N多的插件脚本后,你会发现一个小小的问题:你的按键似乎不够用了。一个XAS系统就把你的ABCXYZLR键全部占用了…………就算有shift、ctrl、Alt甚至带上F5、F6、F7、F8都不够用,这个时候我们怎么办?
(注:此贴适用于常用键较多的游戏作者,如果你只需要一两个键就足够了,那么这个帖子对你没有任何帮助)


下面是详细介绍,如果有一定基础或是不想听我废话的,请跳到底下的精简版

详细版
首先,你需要一个全键盘脚本,在这里我用一个站上的脚本作为范例,因为每个人使用的脚本不一定相同,所以照着样子修改应该就可以了。
脚本如下(无修改,原版脚本,保留一切信息):
RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4. #============================================================================
  5. # ■ Keyboard Script
  6. #----------------------------------------------------------------------------
  7. #  By: Cybersam
  8. #   Date: 25/05/05
  9. #   Version 4
  10. #============================================================================
  11. # 66对此脚本使用方法的说明(可能不是很准确,反正大体能用):
  12. #
  13. # ★、Kboard.keyboard(键位)  返回是否按下这个键的判断。
  14. #     比如条件分歧:Kboard.keyboard($R_Key_H)
  15. #                   则当按下键盘H键的时候条件分歧成立
  16. #
  17. # ★、Kboard.keyb(键位) == 1 当连续按住某键返回真,否则为false
  18. #     比如条件分歧:Kboard.keyb($R_Key_U) == 1
  19. #                   则当持续按下键盘U的时候条件分歧成立
  20. #
  21. # ★、Kboard.key(键位,1) 似乎可以做开关用。按下一次变为true,再按变false
  22. #============================================================================
  23. module Kboard
  24.   #==========================================================================
  25.   # 以下是全键盘按键列表
  26.   #--------------------------------------------------------------------------
  27.   $Rmouse_BUTTON_L = 0x01        # left mouse button
  28.   $Rmouse_BUTTON_R = 0x02        # right mouse button
  29.   $Rmouse_BUTTON_M = 0x04        # middle mouse button
  30.   $Rmouse_BUTTON_4 = 0x05        # 4th mouse button
  31.   $Rmouse_BUTTON_5 = 0x06        # 5th mouse button
  32.   #--------------------------------------------------------------------------
  33.   $R_Key_BACK      = 0x08        # BACKSPACE key
  34.   $R_Key_TAB       = 0x09        # TAB key
  35.   $R_Key_RETURN    = 0x0D        # ENTER key
  36.   $R_Key_SHIFT     = 0x10        # SHIFT key
  37.   $R_Key_CTLR      = 0x11        # CTLR key
  38.   $R_Key_ALT       = 0x12        # ALT key
  39.   $R_Key_PAUSE     = 0x13        # PAUSE key
  40.   $R_Key_CAPITAL   = 0x14        # CAPS LOCK key
  41.   $R_Key_ESCAPE    = 0x1B        # ESC key
  42.   $R_Key_SPACE     = 0x20        # SPACEBAR
  43.   $R_Key_PRIOR     = 0x21        # PAGE UP key
  44.   $R_Key_NEXT      = 0x22        # PAGE DOWN key
  45.   $R_Key_END       = 0x23        # END key
  46.   $R_Key_HOME      = 0x24        # HOME key
  47.   $R_Key_LEFT      = 0x25        # LEFT ARROW key
  48.   $R_Key_UP        = 0x26        # UP ARROW key
  49.   $R_Key_RIGHT     = 0x27        # RIGHT ARROW key
  50.   $R_Key_DOWN      = 0x28        # DOWN ARROW key
  51.   $R_Key_SELECT    = 0x29        # SELECT key
  52.   $R_Key_PRINT     = 0x2A        # PRINT key
  53.   $R_Key_SNAPSHOT  = 0x2C        # PRINT SCREEN key
  54.   $R_Key_INSERT    = 0x2D        # INS key
  55.   $R_Key_DELETE    = 0x2E        # DEL key
  56.   #--------------------------------------------------------------------------
  57.   $R_Key_0         = 0x30        # 0 key
  58.   $R_Key_1         = 0x31        # 1 key
  59.   $R_Key_2         = 0x32        # 2 key
  60.   $R_Key_3         = 0x33        # 3 key
  61.   $R_Key_4         = 0x34        # 4 key
  62.   $R_Key_5         = 0x35        # 5 key
  63.   $R_Key_6         = 0x36        # 6 key
  64.   $R_Key_7         = 0x37        # 7 key
  65.   $R_Key_8         = 0x38        # 8 key
  66.   $R_Key_9         = 0x39        # 9 key
  67.   #--------------------------------------------------------------------------
  68.   $R_Key_A         = 0x41        # A key
  69.   $R_Key_B         = 0x42        # B key
  70.   $R_Key_C         = 0x43        # C key
  71.   $R_Key_D         = 0x44        # D key
  72.   $R_Key_E         = 0x45        # E key
  73.   $R_Key_F         = 0x46        # F key
  74.   $R_Key_G         = 0x47        # G key
  75.   $R_Key_H         = 0x48        # H key
  76.   $R_Key_I         = 0x49        # I key
  77.   $R_Key_J         = 0x4A        # J key
  78.   $R_Key_K         = 0x4B        # K key
  79.   $R_Key_L         = 0x4C        # L key
  80.   $R_Key_M         = 0x4D        # M key
  81.   $R_Key_N         = 0x4E        # N key
  82.   $R_Key_O         = 0x4F        # O key
  83.   $R_Key_P         = 0x50        # P key
  84.   $R_Key_Q         = 0x51        # Q key
  85.   $R_Key_R         = 0x52        # R key
  86.   $R_Key_S         = 0x53        # S key
  87.   $R_Key_T         = 0x54        # T key
  88.   $R_Key_U         = 0x55        # U key
  89.   $R_Key_V          = 0x56        # V key
  90.   $R_Key_W         = 0x57        # W key
  91.   $R_Key_X         = 0x58        # X key
  92.   $R_Key_Y         = 0x59        # Y key
  93.   $R_Key_Z         = 0x5A        # Z key
  94.   #--------------------------------------------------------------------------
  95.   $R_Key_LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  96.   $R_Key_RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  97.   $R_Key_APPS      = 0x5D        # Applications key (Natural keyboard)
  98.   #--------------------------------------------------------------------------
  99.   $R_Key_NUMPAD0   = 0x60        # Numeric keypad 0 key
  100.   $R_Key_NUMPAD1   = 0x61        # Numeric keypad 1 key
  101.   $R_Key_NUMPAD2   = 0x62        # Numeric keypad 2 key
  102.   $R_Key_NUMPAD3   = 0x63        # Numeric keypad 3 key
  103.   $R_Key_NUMPAD4   = 0x64        # Numeric keypad 4 key
  104.   $R_Key_NUMPAD5   = 0x65        # Numeric keypad 5 key
  105.   $R_Key_NUMPAD6   = 0x66        # Numeric keypad 6 key
  106.   $R_Key_NUMPAD7   = 0x67        # Numeric keypad 7 key
  107.   $R_Key_NUMPAD8   = 0x68        # Numeric keypad 8 key
  108.   $R_Key_NUMPAD9  = 0x69        # Numeric keypad 9 key
  109.   $R_Key_MULTIPLY  = 0x6A        # Multiply key (*)
  110.   $R_Key_ADD       = 0x6B        # Add key (+)
  111.   $R_Key_SEPARATOR = 0x6C        # Separator key
  112.   $R_Key_SUBTRACT  = 0x6D        # Subtract key (-)
  113.   $R_Key_DECIMAL   = 0x6E        # Decimal key
  114.   $R_Key_DIVIDE    = 0x6F        # Divide key (/)
  115.   #--------------------------------------------------------------------------
  116.   $R_Key_F1        = 0x70        # F1 key
  117.   $R_Key_F2        = 0x71        # F2 key
  118.   $R_Key_F3        = 0x72        # F3 key
  119.   $R_Key_F4        = 0x73        # F4 key
  120.   $R_Key_F5        = 0x74        # F5 key
  121.   $R_Key_F6        = 0x75        # F6 key
  122.   $R_Key_F7        = 0x76        # F7 key
  123.   $R_Key_F8        = 0x77        # F8 key
  124.   $R_Key_F9        = 0x78        # F9 key
  125.   $R_Key_F10       = 0x79        # F10 key
  126.   $R_Key_F11       = 0x7A        # F11 key
  127.   $R_Key_F12       = 0x7B        # F12 key
  128.   #--------------------------------------------------------------------------
  129.   $R_Key_NUMLOCK   = 0x90        # NUM LOCK key
  130.   $R_Key_SCROLL    = 0x91        # SCROLL LOCK key
  131.   #--------------------------------------------------------------------------
  132.   $R_Key_LSHIFT    = 0xA0        # Left SHIFT key
  133.   $R_Key_RSHIFT    = 0xA1        # Right SHIFT key
  134.   $R_Key_LCONTROL  = 0xA2        # Left CONTROL key
  135.   $R_Key_RCONTROL  = 0xA3        # Right CONTROL key
  136.   $R_Key_L_ALT    = 0xA4        # Left ALT key
  137.   $R_Key_R_ALT    = 0xA5        # Right ALT key
  138.   #--------------------------------------------------------------------------
  139.   $R_Key_SEP      = 0xBC        # , key
  140.   $R_Key_DASH      = 0xBD        # - key
  141.   $R_Key_DOTT      = 0xBE        # . Key
  142.   #--------------------------------------------------------------------------
  143.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  144.   GetKeyboardState = Win32API.new("user32","GetKeyState",['I'],'I')
  145.   GetSetKeyState = Win32API.new("user32","SetKeyboardState",['I'],'I')
  146.   #--------------------------------------------------------------------------
  147.   module_function
  148.   #--------------------------------------------------------------------------
  149.   def keyb(rkey)
  150.     if GetKeyState.call(rkey) != 0
  151.       return 1
  152.     end
  153.     return 0
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   def keyboard(rkey)
  157.     GetKeyState.call(rkey) & 0x01 == 1  #
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   def key(rkey, key = 0)
  161.     GetKeyboardState.call(rkey) & 0x01 == key #
  162.   end
  163. end
  164. #==============================================================================
  165. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  166. #==============================================================================


第二步,找到你要修改键位的插件脚本,我这里以白雪羊的XAS系统中的Quick Tool Select插件脚本作为示例,在第10行可以看到这样两行字:
RUBY 代码复制
  1. # 什么按钮开始快速选择菜单
  2.   QUICK_TOOL_SELECT_BUTTON = Input::L

那么我们就在这个脚本中寻找这个变量出现的位置,一般来说,输入键位的变量只会有两处,第一处是这里确定键位,另一处是插件的呼出。这个脚本中呼出的位置在第34行,代码如下:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● Update Quick Tool Button
  3.   #--------------------------------------------------------------------------   
  4.   def update_quick_tool_button
  5.       if Input.trigger?(QUICK_TOOL_SELECT::QUICK_TOOL_SELECT_BUTTON)
  6.          return unless can_use_quick_tool_button?        
  7.          SceneManager.call(Scene_Quick_Skill_Tool)
  8.       end  
  9.   end

我们看到这里使用了  if Input.trigger?()  作为分支,那么我们将这一行改为:
  
RUBY 代码复制
  1. if Kboard.keyboard($R_Key_V)
  
这样,原来的呼出键就变成了“V”键。


精简版

简单来说吧,就是把if Input.trigger?()替换成全键盘脚本中判断键位输入的那个方法即可,例如详细版中就是把if Input.trigger?(QUICK_TOOL_SELECT::QUICK_TOOL_SELECT_BUTTON)换成了Kboard.keyboard($R_Key_V)

头一次发帖,此方法经过测试,尚未发现BUG,如果BUG劳烦您及时反馈,谢谢您的合作。

点评

好头像==  发表于 2014-6-7 10:53
很多年了呢,坑还是没填完…………(草

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
2
发表于 2014-6-1 13:24:46 手机端发表。 | 只看该作者
脚本不是原创就不说了,这脚本大家都有你这…发这里不合适吧

点评

其实我只是拿来做一个范例而已…………这玩意每个范例不好说话…… 而且,上面都写着在站上转来的了  发表于 2014-6-2 09:57
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

3
发表于 2014-6-2 18:39:30 手机端发表。 | 只看该作者
关于键盘脚本,我发现一点奇怪的地方,就是当你进行其他操作的时候,按下了一个按键,这个被你按下的按键在你正在操作的地方不起作用,等你退出了当下的操作,去到有那个按键判定的地方,就会立即执行,好鸡肋的说。不知道你们遇到过吗?有木有解决方案呐?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
129 小时
注册时间
2014-2-22
帖子
233
4
 楼主| 发表于 2014-6-6 17:12:49 | 只看该作者
Im剑侠客 发表于 2014-6-2 18:39
关于键盘脚本,我发现一点奇怪的地方,就是当你进行其他操作的时候,按下了一个按键,这个被你按下的按键在 ...

这个应该是优先级的问题,比如说当你在显示文字或是播放动画时,其他操作和事件就会被挂起,至于你说的
去到有那个按键判定的地方,就会立即执行

这个我看是你设置事件的时候设置成玩家接触了吧
很多年了呢,坑还是没填完…………(草
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

5
发表于 2014-6-7 05:29:44 | 只看该作者
本帖最后由 Im剑侠客 于 2014-6-7 05:31 编辑
1003492579 发表于 2014-6-6 17:12
这个应该是优先级的问题,比如说当你在显示文字或是播放动画时,其他操作和事件就会被挂起,至于你说的
...


感觉默认的键盘脚本中,对于某个按键的按下就会加独立按键的变量,直至按键的判定执行完了,才将那个变量赋予0。(忘记说了,我遇到的问题的条件是并行处理的,就是地图中有快捷键,奇怪的是,双键快捷方式,若先按下一个,再按另一个按键也会判定成立的。)
热爱生命,相信未来。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
329
在线时间
890 小时
注册时间
2009-10-12
帖子
1829
6
发表于 2014-6-7 09:11:09 | 只看该作者
本帖最后由 日月星辰 于 2014-6-7 09:12 编辑

脚本开头注释11行那里的介绍。。。为什么比lz说了那么多的。。。功能还全?

&

I DONT NEED IT.

&

你连脚本都没改。。。这是什么发布。。。

点评

呃。。。大概吧。。。沙发就是bz了貌似  发表于 2014-6-7 10:48
moy
理论上说也许可以当做小教程?这个界定还是交给版主吧。如果你对此有疑问就@下小黄鸡好了  发表于 2014-6-7 10:42
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3132
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

7
发表于 2014-6-7 12:40:01 | 只看该作者
Im剑侠客 发表于 2014-6-2 18:39
关于键盘脚本,我发现一点奇怪的地方,就是当你进行其他操作的时候,按下了一个按键,这个被你按下的按键在 ...

这是键盘扫描,不是中断。
没有Update就检查按键就是耍流氓。
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

8
发表于 2014-6-8 23:46:07 手机端发表。 | 只看该作者
IamI 发表于 2014-6-7 12:40  这是键盘扫描,不是中断。  没有Update就检查按键就是耍流氓。

Sorry about that . I do not understand . Maybe it has over my head .
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 02:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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