查看: 3178|回复: 11

[已经解决] 关于【按键】的原理

[复制链接]
梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

发表于 2022-8-3 10:45:30 | 显示全部楼层 |阅读模式

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

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

×
用了一个全键盘脚本
[fold=全键盘脚本][pre lang="ruby"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#
#  全键盘
# ★、Kboard.press?(键位)  返回是否按下这个键的判断。
#     比如条件分歧:Kboard.keyboard($R_Key_H)
#                   则当按下键盘H键的时候条件分歧成立
#
# ★、Kboard.repeat?(键位) == 1 当连续按住某键返回真,否则为false
#     比如条件分歧:Kboard.keyb($R_Key_U) == 1
#                   则当持续按下键盘U的时候条件分歧成立
#
# ★、Kboard.trigger?(键位,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_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
  #--------------------------------------------------------------------------
  module_function
  @R_Key_Hash = {}
  @R_Key_Repeat = {}
  GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  #--------------------------------------------------------------------------
  def press?(rkey)
    return GetKeyState.call(rkey) != 0
  end
  #--------------------------------------------------------------------------
  def repeat?(rkey)
    result = GetKeyState.call(rkey)
    if result != 0
      if @R_Key_Repeat[rkey].nil?
        @R_Key_Repeat[rkey] = 0
        return true
      end
      @R_Key_Repeat[rkey] += 1
    else
      @R_Key_Repeat[rkey] = nil
      @R_Key_Hash[rkey] = 0
    end
    if !@R_Key_Repeat[rkey].nil? and @R_Key_Repeat[rkey] > 4 # 4乃准确数字
      @R_Key_Repeat[rkey] = 0
      return true
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  def trigger?(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
  end
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================[/pre][/fold]

写了一个在地图Scene里, I 键打开背包界面  K键打开技能界面  J 键打开装备界面 的快捷键脚本
[fold=地图快捷键脚本][pre lang="ruby"]# 添加一些仅能够在地图上使用的快捷键,以快速呼出菜单
# 该脚本需要配合虚拟按键脚本使用!

class Scene_Map
  alias update_地图快捷键 update
  def update
    update_地图快捷键
    # 无事件在运行,且菜单没被禁止,且角色未在移动的时候,才会运行
    unless $game_system.map_interpreter.running? or
      $game_system.menu_disabled or
      $game_player.moving?
      # 开始各种地图上的键位判定!
      if Kboard.trigger?($R_Key_I) # 打开物品栏 【I】
        $game_player.straighten   # 矫正角色姿势
        $game_system.se_play($data_system.decision_se)  # 播放SE
        $scene = $scene = Scene_Item.new
      elsif Kboard.trigger?($R_Key_O) # 打开合成栏 【O】
        $game_player.straighten   # 矫正角色姿势
        $game_system.se_play($data_system.decision_se)  # 播放SE
        $scene = Scene_Item.new
        $jump_标签跳转_index = 4 # 跳转
      elsif Kboard.trigger?($R_Key_P) # 打开宝器栏 【P】
        $game_player.straighten   # 矫正角色姿势
        $game_system.se_play($data_system.decision_se)  # 播放SE
        $scene = Scene_Item.new
        $jump_标签跳转_index = 6 # 跳转
      elsif Kboard.trigger?($R_Key_L) # 打开宝器栏 【L】
        $game_player.straighten   # 矫正角色姿势
        $game_system.se_play($data_system.decision_se)  # 播放SE
        $scene = Scene_Item.new
        $jump_标签跳转_index = 7 # 跳转
      elsif Kboard.trigger?($R_Key_K) # 打开技能栏 【K】
        $game_player.straighten   # 矫正角色姿势
        $game_system.se_play($data_system.decision_se)  # 播放SE
        $scene = Scene_Skill.new
      elsif Kboard.trigger?($R_Key_J) # 打开装备栏 【J】
        $game_player.straighten   # 矫正角色姿势
        $game_system.se_play($data_system.decision_se)  # 播放SE
        $scene = Scene_Equip.new
      end
    end
  end
end
        
class Scene_Item
  # 为刷新添加定义
  alias update_地图快捷键 update
  def update
    update_地图快捷键
    if $jump_标签跳转_index != nil
      jump_跳转标签
      $jump_标签跳转_index = nil
    end
  end
  # 定义跳转标签
  def jump_跳转标签
    @command_index = $jump_标签跳转_index
    @itemcommand_window.index = $jump_标签跳转_index
    @itemlist_window.set_item(@itemcommand_window.commands[@command_index])
    # 模拟进入子分类背包
    if @itemlist_window.item_number == 0
      $game_system.se_play($data_system.buzzer_se)
      return
    # ●●● 如果该项目是战斗背包 则
    elsif @command_index == 0
      $game_system.se_play($data_system.equip_se)
      $scene = Scene_BattlePocket.new
      return
    end
    $game_system.se_play($data_system.decision_se)
    @itemcommand_window.active = false
    @itemlist_window.active = true
    @itemlist_window.index = 0
    return
  end
end[/pre][/fold]

但是在这里发现了一个小BUG,可能是我对键盘的理解不够吧

例子:
当我按下I键进入背包菜单的时候,如果我在菜单界面再按下K 或者J
系统似乎会记住我按下的这两个键
然后退回地图画面的时候,又立刻触发了按下 K或者J的效果,弹出了技能 或 装备窗口

有什么方法能够避免这种情况呢?
猜想:给Scene Map 加一个Initialize,在初始化里给这些键盘指令全部刷新清零
不过并没有找到清零的办法,还请大佬们指教
梦石
0
星屑
2876
在线时间
172 小时
注册时间
2020-8-9
回帖
100
发表于 2022-8-3 12:57:29 | 显示全部楼层
Kboard.trigger? 改为 Kboard.press? 试试

点评

press 和 trigger 和 repeat 都试过了 ,三者在就这个窗口唤出脚本的表现上如出一辙QAQ  发表于 2022-8-3 16:02
指的是判断按键被按下的那里哦  发表于 2022-8-3 13:00
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2022-8-3 18:35:57 | 显示全部楼层
本帖最后由 soulsaga 于 2022-8-3 18:37 编辑

你的脚本版本太旧...

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

#============================================================================
# ■ Keyboard Script
#----------------------------------------------------------------------------
#  By: Cybersam
#   Date: 25/05/05
#   Version 4
#============================================================================
# 66对此脚本使用方法的说明(可能不是很准确,反正大体能用):
#
# ★、Kboard.keyboard(键位)  返回是否按下这个键的判断。
#     比如条件分歧:Kboard.keyboard($R_Key_H)
#                   则当按下键盘H键的时候条件分歧成立
#Kboard.press?
# ★、Kboard.keyb(键位) == 1 当连续按住某键返回真,否则为false
#     比如条件分歧:Kboard.keyb($R_Key_U) == 1
#                   则当持续按下键盘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_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
  #--------------------------------------------------------------------------
  GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  GetKeyboardState = Win32API.new("user32","GetKeyState",['I'],'I')
  GetSetKeyState = Win32API.new("user32","SetKeyboardState",['I'],'I')
  #--------------------------------------------------------------------------
  module_function
  #--------------------------------------------------------------------------
  def keyb(rkey)
     if GetKeyState.call(rkey) != 0
       return 1
     end
     return 0
  end
   #--------------------------------------------------------------------------
  def keyboard(rkey)
    GetKeyState.call(rkey) & 0x01 == 1  #
  end
  #--------------------------------------------------------------------------
  def key(rkey, key = 0)
    GetKeyboardState.call(rkey) & 0x01 == key #
  end
end





#============================================================================
# ■ 全键盘脚本(夏娜改,优化)
#============================================================================
#原来常用的全键盘脚本使用方法比较诡异,这里夏娜进行了修改。
#本脚本没有给出键值,请在此处查询:http://www.66rpg.com/htm/news7.htm 。
#本教学95%以上作者用不上,除非制作ARPG或者默认按键不够用了。
#============================================================================
# 1、Kboard.press?(key) 同 Input.press?(key)
# 2、Kboard.repeat?(key) 同 Input.repeat?(key)
# 3、Kboard.trigger?(key) 同 Input.trigger?(key)
#============================================================================




module Kboard

module_function

#@按键表 = [0x01,0x02,0x04,0x05,0x06,0x08,0x09,0x0D,0x10,0x11,0x12,0x13,0x14,0x1B,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2C,0x2D,0x2E,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4F,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x60,0x61,0x62,0x63,0x64,0x65,0x6]

@R_Key_Hash = {}
@R_Key_Repeat = {}

GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')

def press?(rkey)
   return if rkey.nil?
   
    return GetKeyState.call(rkey) & 0x8000 == 0x8000
   #return GetKeyState.call(rkey) != 0
end

def repeat?(rkey)
   return if rkey.nil?
   
   
   result = GetKeyState.call(rkey) & 0x8000 == 0x8000
   if result != 0
     if @R_Key_Repeat[rkey].nil?
       @R_Key_Repeat[rkey] = 0
       return true
     end
     @R_Key_Repeat[rkey] += 1
   else
     @R_Key_Repeat[rkey] = nil
     @R_Key_Hash[rkey] = 0
   end
   if !@R_Key_Repeat[rkey].nil? and @R_Key_Repeat[rkey] > 4 # 4乃准确数字
     @R_Key_Repeat[rkey] = 0
     return true
   else
     return false
   end
end

def trigger?(rkey)
   return if rkey.nil?
   
   result = GetKeyState.call(rkey)
   #if @R_Key_Hash[rkey] == 0 and result & 0x8000 != 0x8000
   #if @R_Key_Hash[rkey] == 1 and result != 0
     #return false
   #end
   if @R_Key_Hash[rkey] == 1 and result != 0
     return false
   end
   if result & 0x8000 == 0x8000
     @R_Key_Hash[rkey] = 1
     return true
   else
     @R_Key_Hash[rkey] = 0
     return false
   end
end

end


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

点评

感恩,替换一个脚本之后直接就实现了 了不起~~~  发表于 2022-8-4 20:04

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 认可答案
纯属小虫 + 1 塞糖

查看全部评分

回复 1 0

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
发表于 2022-8-3 19:31:12 | 显示全部楼层
本帖最后由 黑米馒头 于 2022-8-3 19:33 编辑


因为之前的指令没有执行完+XP的运行效率(误)

我是这么解决的

可以在指定界面添加判定,比如在物品界面,按I以外的按键直接返回,那就没这BUG了

if Kboard.trigger?($R_Key_I) # 打开物品栏 【I】
  $game_player.straighten   # 矫正角色姿势
  $game_system.se_play($data_system.decision_se)  # 播放SE
  $scene = Scene_Map.new
end

# 防止多按
if Kboard.keyb($R_Key_K) == 1
  return
end
if Kboard.keyb($R_Key_J ) == 1
  return
end

点评

好的~~感恩!  发表于 2022-8-4 21:27
放到刷新和按键里都可以,按下直接返回,就没问题了  发表于 2022-8-4 21:24
唔!!感谢~~~是【防止多按】的部分 添加到 对应Scene 的 update(有按键判断的地方) 里头吗  发表于 2022-8-4 20:02

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 认可答案
纯属小虫 + 1 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2022-8-3 19:35:14 | 显示全部楼层
一般 $scene = Scene_XXX.new 后都直接 return
刚输入完还没发表,楼上的回复就刷新出来了……

点评

确实  发表于 2022-8-3 23:59
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部