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

Project1

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

[已经过期] 想问问Input的相关实现问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
210 小时
注册时间
2012-7-19
帖子
259
跳转到指定楼层
1
发表于 2013-7-31 16:09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在看过RMVA默认的脚本之后  兴起了自己依靠其他编程语言(现在决定是C++)然后做一个控制台小游戏(如果做其他界面游戏一个人可能会很累)    帧的问题已经解决了,但是出现了新的问题,键盘输入的问题,
所以想求问一下  RGSS3里面  Input模块的具体内容

评分

参与人数 1+1 收起 理由
Vortur + 1 同求

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2011-1-28
帖子
35
2
发表于 2013-8-3 17:16:01 | 只看该作者
本帖最后由 nokaiwai 于 2013-8-3 17:19 编辑

這是我平常使用的 Input 模塊 (不是RGSS的那個哦)
我沒有進行完整的測試 某些比較少用的方法可能會出錯
你可以試試用API
但是我記憶中C++ 好像自帶 輸入處理的系統??
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Input
  4. #------------------------------------------------------------------------------
  5. #   本模組處理鍵盤數入信息。
  6. #==============================================================================
  7.  
  8. $GetAsyncKeyState = Win32API.new("user32","GetAsyncKeyState",'I','I')
  9. module Input
  10.   KEY = {
  11.   "L_Mouse"           =>   1, # 0b00000001 0o001 0x01 Left mouse button
  12.   "R_Mouse"           =>   2, # 0b00000010 0o002 0x02 Right mouse button
  13.   "M_Mouse"           =>   4, # 0b00000100 0o004 0x04 Middle mouse button
  14.   "BackSpace"         =>   8, # 0b00001000 0o010 0x08 BACKSPACE key
  15.   "Tab"               =>   9, # 0b00001001 0o011 0x09 TAB key
  16.   "Enter"             =>  13, # 0b00001101 0o015 0x0d ENTER key
  17.   "Shift"             =>  16, # 0b00010000 0o020 0x10 SHIFT key
  18.   "Ctrl"              =>  17, # 0b00010001 0o021 0x11 CTLR key
  19.   "Alt"               =>  18, # 0b00010010 0o022 0x12 ALT key
  20.   "PauseBreak"        =>  19, # 0b00010011 0o023 0x13 PAUSE BREAK key
  21.   "CapsLock"          =>  20, # 0b00010100 0o024 0x14 CAPS LOCK key
  22.   "Esc"               =>  27, # 0b00011011 0o033 0x1b ESC key
  23.   "Space"             =>  32, # 0b00100000 0o040 0x20 SPACE key
  24.   "PageUp"            =>  33, # 0b00100001 0o041 0x21 PAGE UP key
  25.   "PageDown"          =>  34, # 0b00100010 0o042 0x22 PAGE DOWN key
  26.   "End"               =>  35, # 0b00100011 0o043 0x23 END key
  27.   "Home"              =>  36, # 0b00100100 0o044 0x24 HOME key
  28.   "Left"              =>  37, # 0b00100101 0o045 0x25 LEFT key
  29.   "Up"                =>  38, # 0b00100110 0o046 0x26 UP key
  30.   "Right"             =>  39, # 0b00100111 0o047 0x27 RIGHT key
  31.   "Down"              =>  40, # 0b00101000 0o050 0x28 DOWN key
  32.   "PrintSceenSysRq"   =>  44, # 0b00101100 0o054 0x2c PRINT SCEEN SYS RQ key
  33.   "Insert"            =>  45, # 0b00101101 0o055 0x2d INSERT key
  34.   "Delete"            =>  46, # 0b00101110 0o056 0x2e DELETE key
  35.   "0"                 =>  48, # 0b00110000 0o060 0x30 0 key
  36.   "1"                 =>  49, # 0b00110001 0o061 0x31 1 key
  37.   "2"                 =>  50, # 0b00110010 0o062 0x32 2 key
  38.   "3"                 =>  51, # 0b00110011 0o063 0x33 3 key
  39.   "4"                 =>  52, # 0b00110100 0o064 0x34 4 key
  40.   "5"                 =>  53, # 0b00110101 0o065 0x35 5 key
  41.   "6"                 =>  54, # 0b00110110 0o066 0x36 6 key
  42.   "7"                 =>  55, # 0b00110111 0o067 0x37 7 key
  43.   "8"                 =>  56, # 0b00111000 0o070 0x38 8 key
  44.   "9"                 =>  57, # 0b00111001 0o071 0x39 9 key
  45.   "A"                 =>  65, # 0b01000001 0o101 0x41 A key
  46.   "B"                 =>  66, # 0b01000010 0o102 0x42 B key
  47.   "C"                 =>  67, # 0b01000011 0o103 0x43 C key
  48.   "D"                 =>  68, # 0b01000100 0o104 0x44 D key
  49.   "E"                 =>  69, # 0b01000101 0o105 0x45 E key
  50.   "F"                 =>  70, # 0b01000110 0o106 0x46 F key
  51.   "G"                 =>  71, # 0b01000111 0o107 0x47 G key
  52.   "H"                 =>  72, # 0b01001000 0o110 0x48 H key
  53.   "I"                 =>  73, # 0b01001001 0o111 0x49 I key
  54.   "J"                 =>  74, # 0b01001010 0o112 0x4a J key
  55.   "K"                 =>  75, # 0b01001011 0o113 0x4b K key
  56.   "L"                 =>  76, # 0b01001100 0o114 0x4c L key
  57.   "M"                 =>  77, # 0b01001101 0o115 0x4d M key
  58.   "N"                 =>  78, # 0b01001110 0o116 0x4e N key
  59.   "O"                 =>  79, # 0b01001111 0o117 0x4f O key
  60.   "P"                 =>  80, # 0b01010000 0o120 0x50 P key
  61.   "Q"                 =>  81, # 0b01010001 0o121 0x51 Q key
  62.   "R"                 =>  82, # 0b01010010 0o122 0x52 R key
  63.   "S"                 =>  83, # 0b01010011 0o123 0x53 S key
  64.   "T"                 =>  84, # 0b01010100 0o124 0x54 T key
  65.   "U"                 =>  85, # 0b01010101 0o125 0x55 U key
  66.   "V"                 =>  86, # 0b01010110 0o126 0x56 V key
  67.   "W"                 =>  87, # 0b01010111 0o127 0x57 W key
  68.   "X"                 =>  88, # 0b01011000 0o130 0x58 X key
  69.   "Y"                 =>  89, # 0b01011001 0o131 0x59 Y key
  70.   "Z"                 =>  90, # 0b01011010 0o132 0x5a Z key
  71.   "L_Window"          =>  91, # 0b01011011 0o133 0x5b Left WINDOWS key
  72.   "R_Window"          =>  92, # 0b01011100 0o134 0x5c Right WINDOWS key
  73.   "Applications"      =>  93, # 0b01011101 0o135 0x5d APPLICATIONS key
  74.   "Num0"              =>  96, # 0b01100000 0o140 0x60 NUMERIC KEYPAD 0 key
  75.   "Num1"              =>  97, # 0b01100001 0o141 0x61 NUMERIC KEYPAD 1 key
  76.   "Num2"              =>  98, # 0b01100010 0o142 0x62 NUMERIC KEYPAD 2 key
  77.   "Num3"              =>  99, # 0b01100011 0o143 0x63 NUMERIC KEYPAD 3 key
  78.   "Num4"              => 100, # 0b01100100 0o144 0x64 NUMERIC KEYPAD 4 key
  79.   "Num5"              => 101, # 0b01100101 0o145 0x65 NUMERIC KEYPAD 5 key
  80.   "Num6"              => 102, # 0b01100110 0o146 0x66 NUMERIC KEYPAD 6 key
  81.   "Num7"              => 103, # 0b01100111 0o147 0x67 NUMERIC KEYPAD 7 key
  82.   "Num8"              => 104, # 0b01101000 0o150 0x68 NUMERIC KEYPAD 8 key
  83.   "Num9"              => 105, # 0b01101001 0o151 0x69 NUMERIC KEYPAD 9 key
  84.   "NumMultiplication" => 106, # 0b01101010 0o152 0x6a NUMERIC KEYPAD * key
  85.   "NumPlus"           => 107, # 0b01101011 0o153 0x6b NUMERIC KEYPAD + key
  86.   "NumSubtraction"    => 109, # 0b01101100 0o155 0x6d NUMERIC KEYPAD - key
  87.   "NumDot"            => 110, # 0b01101101 0o156 0x6e NUMERIC KEYPAD . key
  88.   "NumDivide"         => 111, # 0b01101111 0o157 0x6f NUMERIC KEYPAD / key
  89.   "F1"                => 112, # 0b01110000 0o160 0x70 F1 key
  90.   "F2"                => 113, # 0b01110001 0o161 0x71 F2 key
  91.   "F3"                => 114, # 0b01110010 0o162 0x72 F3 key
  92.   "F4"                => 115, # 0b01110011 0o163 0x73 F4 key
  93.   "F5"                => 116, # 0b01110100 0o164 0x74 F5 key
  94.   "F6"                => 117, # 0b01110101 0o165 0x75 F6 key
  95.   "F7"                => 118, # 0b01110110 0o166 0x76 F7 key
  96.   "F8"                => 119, # 0b01110111 0o167 0x77 F8 key
  97.   "F9"                => 120, # 0b01111000 0o170 0x78 F9 key
  98.   "F10"               => 121, # 0b01111001 0o171 0x79 F10 key
  99.   "F11"               => 122, # 0b01111010 0o172 0x7a F11 key
  100.   "F12"               => 123, # 0b01111011 0o173 0x7b F12 key
  101.   "NumLock"           => 144, # 0b10010000 0o220 0x90 NUM LOCK key
  102.   "ScrollLock"        => 145, # 0b10010001 0o221 0x91 SCROLL LOCK key
  103.   "Semicolon"         => 186, # 0b10111010 0o272 0xba ; key
  104.   "Equals"            => 187, # 0b10111011 0o273 0xbb = key
  105.   "Comma"             => 188, # 0b10111100 0o274 0xbc , key
  106.   "Hyphen"            => 189, # 0b10111101 0o275 0xbd - key
  107.   "Dot"               => 190, # 0b10111110 0o276 0xbe . key
  108.   "Slash"             => 191, # 0b10111111 0o277 0xbf / key
  109.   "OpenQuote"         => 192, # 0b11000000 0o300 0xc0 ` key
  110.   "OpenBracket"       => 219, # 0b11011011 0o333 0xdb [ key
  111.   "Backslash"         => 220, # 0b11011100 0o334 0xdc \ key
  112.   "CloseBracket"      => 221, # 0b11011101 0o335 0xdd ] key
  113.   "CloseQuote"        => 222} # 0b11011110 0o336 0xde ' key
  114.   @keypresstime = Array.new(223,0 - 1)
  115.   #--------------------------------------------------------------------------
  116.   # ● 更新。
  117.   #--------------------------------------------------------------------------
  118.   def self.update
  119.     for t in 1..222
  120.       if @keypresstime[t] >= 1
  121.         @keypresstime[t] = 0 if $GetAsyncKeyState.call(t) == 0
  122.         @keypresstime[t] += 1 if $GetAsyncKeyState.call(t) != 0
  123.       elsif @keypresstime[t] == 0
  124.         @keypresstime[t] += 1 if $GetAsyncKeyState.call(t) != 0
  125.         @keypresstime[t] -= 1 if $GetAsyncKeyState.call(t) == 0
  126.       else
  127.         @keypresstime[t] = 1 if $GetAsyncKeyState.call(t) != 0
  128.       end
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 返回檢測範圍內正在按下的按鍵編號陣列。
  133.   # ‧ Arr
  134.   #    =key : Ari.[ {Int.檢測按鍵} ]
  135.   #           Ran.檢測範圍
  136.   #--------------------------------------------------------------------------
  137.   def self.findpress(key=1..222)
  138.     begin
  139.       raise(TypeError.new("not an Array or Range")) unless key.is_a?(Array) or key.is_a?(Range)
  140.       key.each{|x| TypeError.new("#{x} is not an Integer or String") unless x.is_a?(Integer) or x.is_a?(String) } if key.is_a?(Array)
  141.     rescue
  142.       error
  143.     end
  144.     key.find_all{|x| @keypresstime[x.is_a?(Integer) ? x : KEY[x]] >= 1 }
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 返回檢測範圍內剛剛按下的按鍵編號陣列。
  148.   # ‧ Arr
  149.   #    =key : Ari.[ {Int.檢測按鍵} ]
  150.   #           Ran.檢測範圍
  151.   #--------------------------------------------------------------------------
  152.   def self.findtrigger(key=1..222)
  153.     begin
  154.       raise(TypeError.new("not an Array or Range")) unless key.is_a?(Array) or key.is_a?(Range)
  155.       key.each{|x| TypeError.new("#{x} is not an Integer or String") unless x.is_a?(Integer) or x.is_a?(String) } if key.is_a?(Array)
  156.     rescue
  157.       error
  158.     end
  159.     key.find_all{|x| @keypresstime[x.is_a?(Integer) ? x : KEY[x]] == 1 }
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● 返回檢測範圍內持續按下的按鍵編號陣列。
  163.   # ‧ Arr
  164.   #    delay : Int.延遲時間
  165.   #    time  : Int.按下時間
  166.   #    =key  : Ari.[ {Int.檢測按鍵} ]
  167.   #            Ran.檢測範圍
  168.   #--------------------------------------------------------------------------
  169.   def self.findrepest(delay,time,key=1..222)
  170.     begin
  171.       raise(TypeError.new("not an Array or Range")) unless key.is_a?(Array) or key.is_a?(Range)
  172.       key.each{|x| TypeError.new("#{x} is not an Integer or String") unless x.is_a?(Integer) or x.is_a?(String) } if key.is_a?(Array)
  173.     rescue
  174.       error
  175.     end
  176.     delay = time if delay <= time
  177.     key.find_all{|x| @keypresstime[x.is_a?(Integer) ? x : KEY[x]] == 1 or [@keypresstime[x] - delay,0].max % time == 1 }
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 返回檢測範圍內剛剛放開的按鍵編號陣列。
  181.   # ‧ Arr
  182.   #    =key : Ari.[ {Int.檢測按鍵} ]
  183.   #           Ran.檢測範圍
  184.   #--------------------------------------------------------------------------
  185.   def self.findunclasp(key=1..222)
  186.     begin
  187.       raise(TypeError.new("not an Array or Range")) unless key.is_a?(Array) or key.is_a?(Range)
  188.       key.each{|x| TypeError.new("#{x} is not an Integer or String") unless x.is_a?(Integer) or x.is_a?(String) } if key.is_a?(Array)
  189.     rescue
  190.       error
  191.     end
  192.     key.find_all{|x| @keypresstime[x.is_a?(Integer) ? x : KEY[x]] == 0 }
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 返回檢測按鍵是否正在按下。
  196.   # ‧ Bol
  197.   #    key : Ari.[ {Int/Str.檢測按鍵} ]
  198.   #          Int/Ran/Str.檢測按鍵
  199.   #--------------------------------------------------------------------------
  200.   def self.press(key)
  201.     case key.class.to_s
  202.     when "Array"
  203.       key.each do |x|
  204.         case x.class.to_s
  205.         when "Fixnum"
  206.           return false if @keypresstime[x] <= 0
  207.         when "String"
  208.           return false if @keypresstime[KEY[x]] <= 0
  209.         else
  210.           return false
  211.         end
  212.       end
  213.       true
  214.     when "Fixnum"
  215.       return @keypresstime[key] >= 1
  216.     when "Range"
  217.       key.each do |x|
  218.         return false if @keypresstime[x] <= 0
  219.       end
  220.     when "String"
  221.       return @keypresstime[KEY[key]] >= 1
  222.     else
  223.       raise(TypeError.new("not an Array, Fixnum, Range or String"))
  224.     end
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 返回檢測按鍵是否剛剛按下。
  228.   # ‧ Bol
  229.   #    key : Ari.[ {Int/Str.檢測按鍵} ]
  230.   #          Int/Ran/Str.檢測按鍵
  231.   #--------------------------------------------------------------------------
  232.   def self.trigger(key)
  233.     case key.class.to_s
  234.     when "Array"
  235.       key.each do |x|
  236.         case x.class.to_s
  237.         when "Fixnum"
  238.           return false if @keypresstime[x] != 1
  239.         when "String"
  240.           return false if @keypresstime[KEY[x]] != 1
  241.         else
  242.           return false
  243.         end
  244.       end
  245.       return true
  246.     when "Fixnum"
  247.       return @keypresstime[key] == 1
  248.     when "Range"
  249.       key.each do |x|
  250.         return false if @keypresstime[x] != 1
  251.       end
  252.     when "String"
  253.       return @keypresstime[KEY[key]] == 1
  254.     else
  255.       raise(TypeError.new("not an Array, Fixnum, Range or String"))
  256.     end
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 返回檢測按鍵是否持續按下。
  260.   # ‧ Bol
  261.   #    key   : Ari.[ {Int/Str.檢測按鍵} ]
  262.   #            Int/Ran/Str.檢測按鍵
  263.   #    delay : Int.延遲時間
  264.   #    time  : Int.按下時間
  265.   #--------------------------------------------------------------------------
  266.   def self.repeat(key,delay,time)
  267.     delay = time if delay <= time
  268.     case key.class.to_s
  269.     when "Array"
  270.       key.each do |x|
  271.         case x.class.to_s
  272.         when "Fixnum"
  273.           return false if @keypresstime[x] != 1 and [@keypresstime[x] - delay,0].max % time != 1
  274.         when "String"
  275.           return false if @keypresstime[KEY[x]] != 1 and [@keypresstime[KEY[x]] - delay,0].max % time != 1
  276.         else
  277.           return false
  278.         end
  279.       end
  280.       return true
  281.     when "Fixnum"
  282.       return (@keypresstime[key] == 1 or [@keypresstime[key] - delay,0].max % time == 1)
  283.     when "Range"
  284.       key.each do |x|
  285.         return false if @keypresstime[x] != 1 and [@keypresstime[x] - delay,0].max % time != 1
  286.       end
  287.     when "String"
  288.       return (@keypresstime[KEY[key]] == 1 or [@keypresstime[KEY[key]] - delay,0].max % time == 1)
  289.     else
  290.       raise(TypeError.new("not an Array, Fixnum, Range or String"))
  291.     end
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 返回檢測按鍵是否剛剛放開。
  295.   # ‧ Bol
  296.   #    key : Ari.[ {Int/Str.檢測按鍵} ]
  297.   #          Int/Ran/Str.檢測按鍵
  298.   #--------------------------------------------------------------------------
  299.   def self.unclasp(key)
  300.     case key.class.to_s
  301.     when "Array"
  302.       key.each do |x|
  303.         case x.class.to_s
  304.         when "Fixnum"
  305.           return false if @keypresstime[x] != 0
  306.         when "String"
  307.           return false if @keypresstime[KEY[x]] != 0
  308.         else
  309.           return false
  310.         end
  311.       end
  312.       return true
  313.     when "Fixnum"
  314.       return @keypresstime[key] == 0
  315.     when "Range"
  316.       key.each do |x|
  317.         return false if @keypresstime[x] != 0
  318.       end
  319.     when "String"
  320.       return @keypresstime[KEY[key]] == 0
  321.     else
  322.       raise(TypeError.new("not an Array, Fixnum, Range or String"))
  323.     end
  324.   end
  325. end
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-10-9 15:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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