Project1

标题: 怎么修改控制↑↓← →修改成w a d s 按键 [打印本页]

作者: 1091351268    时间: 2023-5-28 07:02
标题: 怎么修改控制↑↓← →修改成w a d s 按键
怎么修改角色控制按键 ↑↓← →  修改成w a d s

  键
作者: proudmor    时间: 2023-7-10 22:26
得用win32api的user32的GetGetKeyState来获取键盘按键情况
参考一下我以前做的,包含双击的判断,wasd的值我没用到需要自己去查,然后在其他类里把原本的判断输入情况的部分Input.trigger?(Input::B)这种改成对应的方法
  1. #==============================================================================
  2. # ** Scene_Base
  3. #------------------------------------------------------------------------------
  4. #  這個類是遊戲中所有場景畫面所共同繼承的父類。
  5. #==============================================================================

  6. class Scene_Base
  7.     MOUSEEVENT_LEFTDOWN=2
  8.     MOUSEEVENT_LEFTUP=4
  9.     MOUSEEVENT_RIGHTDOWN=0x0008
  10.     MOUSEEVENT_RIGHTUP=0x0010
  11.     M_LEFT=0x00
  12.     M_RIGHT=0x01
  13.     K_LEFT=0x25
  14.     K_UP=0x26
  15.     K_RIGHT=0x27
  16.     K_DOWN=0x28
  17.     K_C=0x43
  18.     K_X=0x58
  19.     K_Z=0x5A
  20.   #--------------------------------------------------------------------------
  21.   # * 主程式
  22.   #--------------------------------------------------------------------------
  23.   def main
  24.     start                         # 程式開始
  25.     perform_transition            # 執行畫面過渡顯示漸變
  26.     post_start                    # 程式開始後的處理
  27.     Input.update                  # 更新指令輸入資訊
  28.     loop do
  29.       Graphics.update             # 更新螢幕內容
  30.       Input.update                # 更新指令輸入資訊
  31.       update                      # 更新幀
  32.       break if $scene != self     # 當畫面切換的時候,中止一切迴圈處理
  33.     end
  34.     Graphics.update
  35.     pre_terminate                 # 程式終止前的處理
  36.     Graphics.freeze               # 執行畫面過渡顯示漸變
  37.     terminate                     # 程式終止
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # * 程式開始
  41.   #--------------------------------------------------------------------------
  42.   def start
  43.     @GetCursePos=Win32API.new("user32","GetCursorPos",['p'],'V')
  44.     @GetWindowRect=Win32API.new("user32","GetWindowRect",['i','p'],'V')
  45.     @GetGetKeyState=Win32API.new("user32","GetKeyState",'I','I')
  46.     @GetClientRect=Win32API.new("user32","GetClientRect",['i','p'],'i')
  47.     @GcreenToClient=Win32API.new("user32","ScreenToClient",['i','p'],'V')
  48.     @GetActiveWindow = Win32API.new("user32", "GetActiveWindow", [], 'L')
  49.     @lastmouse=Array.new(500,-1)
  50.     @doubletimer=Array.new(500,-1)
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # * 執行畫面過渡顯示漸變
  54.   #--------------------------------------------------------------------------
  55.   def perform_transition
  56.     Graphics.transition(10)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # * 程式開始後的處理
  60.   #--------------------------------------------------------------------------
  61.   def post_start
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # * 更新幀
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     i=0
  68.     while i<500
  69.       @doubletimer[i]-=1 if @doubletimer[i]>0
  70.       i+=1
  71.     end  
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # * 鼠标x
  75.   #--------------------------------------------------------------------------
  76.   def getmousex
  77.     point="\0"*8
  78.     [email protected]()
  79.     @GetCursePos.call(point)
  80.     @GcreenToClient.call(window,point)
  81.     x,y=point.unpack("LL")
  82.     return x
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # * 鼠标y
  86.   #--------------------------------------------------------------------------
  87.   def getmousey
  88.     point="\0"*8
  89.     [email protected]()
  90.     @GetCursePos.call(point)
  91.     @GcreenToClient.call(window,point)
  92.     x,y=point.unpack("LL")
  93.     return y
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # * 键按下一次
  97.   #--------------------------------------------------------------------------
  98.   def key_click?(keyid,second=false)#参数是按键id和是否要求是双击的第二击
  99.     kd=false
  100.     if @GetGetKeyState.call(keyid)==65408 or @GetGetKeyState.call(keyid)==65409 or @GetGetKeyState.call(keyid)==-127 or @GetGetKeyState.call(keyid)==-128
  101.       if  @GetGetKeyState.call(keyid)!=@lastmouse[keyid]
  102.        kd=true
  103.        @lastmouse[keyid][email protected](keyid)
  104.        if second==false
  105.        else
  106.          kd=false
  107.          if @doubletimer[keyid]>0
  108.            kd=true
  109.            @doubletimer[keyid]=0
  110.          end  
  111.        end
  112.       @doubletimer[keyid]=10
  113.       end
  114.     end
  115.     return kd
  116.   end  
  117.   #--------------------------------------------------------------------------
  118.   # * 键抬起一次
  119.   #--------------------------------------------------------------------------
  120.   def key_unclick?(keyid)
  121.     kd=false
  122.     if @GetGetKeyState.call(keyid)==1 or @GetGetKeyState.call(keyid)==0
  123.       if  @GetGetKeyState.call(keyid)!=@lastmouse[keyid]
  124.        kd=true
  125.        @lastmouse[keyid][email protected](keyid)
  126.       end
  127.     end
  128.     return kd
  129.   end  
  130.   #--------------------------------------------------------------------------
  131.   # * 键按下持续
  132.   #--------------------------------------------------------------------------
  133.   def key_down?(keyid)
  134.     kd=false
  135.     if @GetGetKeyState.call(keyid)==65408 or @GetGetKeyState.call(keyid)==65409 or @GetGetKeyState.call(keyid)==-127 or @GetGetKeyState.call(keyid)==-128
  136.        kd=true
  137.     end
  138.     return kd
  139.   end  
  140.   #--------------------------------------------------------------------------
  141.   # * 键抬起持续
  142.   #--------------------------------------------------------------------------
  143.   def key_up?(keyid)
  144.     kd=false
  145.     if @GetGetKeyState.call(keyid)==0 or @GetGetKeyState.call(keyid)==1
  146.        kd=true
  147.     end
  148.     return kd
  149.   end  
  150.   #--------------------------------------------------------------------------
  151.   # * 鼠标左键单击
  152.   #--------------------------------------------------------------------------
  153.   def mleft_down?
  154.     return key_click?(0x01)
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # * 鼠标右键单击
  158.   #--------------------------------------------------------------------------
  159.   def mright_down?
  160.     return key_click?(0x02)
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # * 程式終止前的處理
  164.   #--------------------------------------------------------------------------
  165.   def pre_terminate
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # * 程式終止
  169.   #--------------------------------------------------------------------------
  170.   def terminate
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # * 為生成其他場景畫面的背景而截圖
  174.   #--------------------------------------------------------------------------
  175.   def snapshot_for_background
  176.     $game_temp.background_bitmap.dispose
  177.     $game_temp.background_bitmap = Graphics.snap_to_bitmap
  178.     $game_temp.background_bitmap.blur
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # * 創建選單畫面背景
  182.   #--------------------------------------------------------------------------
  183.   def create_menu_background
  184.     @menuback_sprite = Sprite.new
  185.     @menuback_sprite.bitmap = $game_temp.background_bitmap
  186.     @menuback_sprite.color.set(16, 16, 16, 128)
  187.     update_menu_background
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # * 清除選單畫面背景
  191.   #--------------------------------------------------------------------------
  192.   def dispose_menu_background
  193.     @menuback_sprite.dispose
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # * 更新選單畫面背景顯示內容
  197.   #--------------------------------------------------------------------------
  198.   def update_menu_background
  199.   end
  200. end
复制代码







欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1