查看: 2528|回复: 1

[已经解决] 物品栏空了光标还在

[复制链接]
梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
发表于 2022-9-6 18:20:31 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 黑米馒头 于 2022-9-6 18:22 编辑

整合了物品栏和装备栏,发现个BUG,道具栏有物品时,使用完物品刚好道具栏空了,这时候按下A键,光标会跳转到装备栏上面,
如何修改,当使用完物品,物品栏空了之后,光标直接退出到物品分类上面去。

PS:原因可能是,我的装备栏里面有个空位,因为点那个空位可以把身上的装备拆卸下来,但是我物品栏没有设置空位的,
可是一旦使用完物品,就会出现跳转到装备栏上,搞不清楚为什么会这样。

物品分类
1.png

如图,使用完物品,光标还在
2.png

然后按下A,估计是空格的原因,直接跳转到装备栏了

4.png



[pre lang="ruby"]#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
#  处理物品画面的类。
#==============================================================================

class Scene_Item
  #--------------------------------------------------------------------------
  # ● 初始化对像■■■■■■■■■■■■■■■■■■■■■■
  #     actor_index : 角色索引
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index # 返回菜单用
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main

    # 获取角色
    @actor = $game_party.actors[@actor_index]
   
    # 获取角色现在装备的物品
    @right_window = Window_Eq.new(@actor)
    # 隐藏装备栏索引
    @right_window.index = -1
    # 隐藏装备栏窗口
    @right_window.active = false
   
    # 生成装备帮助窗口
    @help1_window = Shop_Help.new
    # 关联装备帮助窗口
    @right_window.help_window = @help1_window
    @right_window.help_window.z = 2000
   
    # 提示窗口
    @tip = Window_Tip_Item.new
   
    # 显示人物动态图窗口
    @dongtaitu_window = Window_dtt.new(@actor)
   
    # 生成物品分类窗口
    @itemcommand_window = Fenlei_Command.new
    @command_index = @itemcommand_window.index
   
    # 生成物品窗口
    @itemlist_window = Actor_Item.new(@actor)
    @itemlist_window.active = false
   
    # 生成物品帮助窗口
    @help_window = Shop_Help.new
   
    # 关联物品帮助窗口
    @itemlist_window.help_window = @help_window
   
    # 生成目标窗口 (设置为不可见・不活动)
    @target_window = Window_Target_zl.new
    @target_window.visible = false
    @target_window.active = false
   
    # 生成头像框
    @sthero_window = Window_Sthero.new
   
    # 显示游戏界面1图片
    @jiemian = Sprite.new
    @jiemian.bitmap = Bitmap.new("Graphics/Pictures/Ui/主界面/游戏界面1")
    @jiemian.z = 200   
    # 显示游戏界面2图片
    @jiemian1 = Sprite.new
    @jiemian1.bitmap = Bitmap.new("Graphics/Pictures/Ui/主界面/游戏界面2")
    @jiemian1.y = 715
    @jiemian1.z = 200
   
    # 生成背景图窗口
    @back = Sprite.new
    @back.bitmap = Bitmap.new("Graphics/Pictures/Ui/物品界面/物品背景")  
    @back.y = (768-555)/2-53/2
    @back.z = 200
   
    # 生成现实时间窗口
    @realtime_window = Window_RealTime.new
    # 生成游戏时间窗口
    @playtime_window = Window_PlayTime.new
   
    # 显示队伍头像
    @dtx = Window_DuiTouxiang.new
   
    # 生成金钱窗口
    @gold_window = Window_Gold.new
    @gold_window.x = 58+2
    @gold_window.y = 571
    @gold_window.opacity = 0
   
    # 生成队标窗口
    @db = Window_db.new
    # 队伍人数大于1
    if $game_party.actors.size <= 1
      # 隐藏队标窗口
      @db.visible = false
    else
      # 显示队标窗口
      @db.visible = true
    end
   
    # 物品窗口索引
    @itemlist_window.set_item(@command_index)
    # 执行过度
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换就中断循环
      if $scene != self
        break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放物品分类窗口
    @itemcommand_window.dispose
    # 释放物品栏窗口
    @itemlist_window.dispose
    # 释放目标被激活的窗口
    @target_window.dispose
    # 释放提示窗口
    @tip.dispose
    # 释放装备窗口
    @right_window.dispose
    # 释放物品帮助窗口
    @help_window.dispose
    # 释放装备帮助窗口
    @help1_window.dispose
    # 释放人物动态图窗口
    @dongtaitu_window.dispose
    # 释放头像框
    @sthero_window.dispose
    # 释放现实时间窗口
    @realtime_window.dispose
    # 释放游戏时间窗口
    @playtime_window.dispose
    # 释放队伍头像
    @dtx.dispose
    # 释放界面图片
    @jiemian.dispose
    @jiemian.bitmap.dispose
    @jiemian1.dispose
    @jiemian1.bitmap.dispose
    # 释放背景图窗口
    @back.dispose
    # 释放背景图图片
    @back.bitmap.dispose
    # 释放金钱窗口
    @gold_window.dispose
    # 释放队标窗口
    @db.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    #【仿网游动态地图界面】
    $spriteset.update
    # 刷新队伍头像
    @dtx.update
    # 刷新游戏时间窗口
    @playtime_window.update   
    # 刷新显示时间窗口
    @realtime_window.update
    # 刷新装备窗口   
    @right_window.update
    # 物品提示窗口
    @tip.update
    # 刷新物品分类
    @itemcommand_window.update
    # 刷新物品栏窗口
    @itemlist_window.update
    # 刷新人物动态图窗口
    @dongtaitu_window.update
    # 刷新物品帮助窗口
    @help_window.update
    # 刷新装备帮助窗口
    @help1_window.update
    # 刷新头像框
    @sthero_window.update
    # 刷新界面图片
    @jiemian.update
    @jiemian1.update
    # 刷新背景图窗口
    @back.update
    # 刷新金钱窗口
    @gold_window.update
   
    # 队伍人数大于1
    if $game_party.actors.size <= 1
      # 隐藏队标窗口
      @db.visible = false
      # 刷新队标窗口
      @db.update
    else
      # 显示队标窗口
      @db.visible = true
      # 刷新队标窗口
      @db.update
    end
   
    # 调整装备栏光标距离
    irect = @right_window.cursor_rect
      w = @help1_window
    w.x = @right_window.x + irect.x + irect.width + 13
    w.y = @right_window.y + irect.y + irect.height + 13
    if w.x + w.width > 1024
      w.x = 1024 - w.width
    end
    if w.y + w.height > 400#768
      w.y = 400 - w.height
    end   
   
    # 按下 ALT 的情况
    if Kboard.keyboard(226)
      # 按下 ALT + E 关闭物品画面  
      if Kboard.key(8,1)      
        # 演奏取消 SE
        $game_system.se_play($data_system.cancel_se)
        # 回到带头角色头像框
        $temp_mapface_id = $game_party.actors[0].id
        # 切换到地图画面
        $scene = Scene_Map.new
        return
      end
    end  
  # 队伍人数大于1时
  if $game_party.actors.size > 1   
    # 按下 W 键的情况下
    if Kboard.key(26,1)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至下一位角色
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 角色头像对应角色索引
      $temp_mapface_id = $game_party.actors[@actor_index].id
      # 回到物品栏索引
      $scene = Scene_Item.new(@actor_index)
      return
    end
    # 按下 Q 键的情况下
    if Kboard.key(20,1)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至上一位角色
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 角色头像对应角色索引
      $temp_mapface_id = $game_party.actors[@actor_index].id
      # 回到物品栏索引
      $scene = Scene_Item.new(@actor_index)
      return
    end      
  end
  
    # 刷新目标被激活的窗口
    @target_window.update
    if @command_index != @itemcommand_window.index
      @command_index = @itemcommand_window.index
      @itemlist_window.set_item(@command_index)
    end
    # 物品分类被激活的情况下: 调用 update_itemcommand
    if @itemcommand_window.active
      update_itemcommand
      return
    end
    # 物品窗口被激活的情况下: 调用 update_itemlist
    if @itemlist_window.active
      update_itemlist
      return
    end
    # 目标窗口被激活的情况下: 调用 update_target
    if @target_window.active
      update_target
      return
    end
    # 角色装备栏被激活的情况下:调用 update_equip
    if @right_window.active
      update_equip
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品分类窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_itemcommand
    # 按下 B 键的情况下 主窗口 B 键 退出
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 回到带头角色头像框
      $temp_mapface_id = $game_party.actors[0].id
      # 切换到地图画面
      $scene = Scene_Map.new
      return
    end   
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 如果没有选定命令项
      if @itemlist_window.item_number == 0
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 激活物品分类窗口--关闭
      @itemcommand_window.active = false
      # 显示帮助窗口
      @help_window.visible = true
      # 激活物品栏窗口--打开
      @itemlist_window.active = true
      # 激活物品栏索引为第一个
      @itemlist_window.index = 0
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (目标窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_itemlist
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 打开物品分类
      @itemcommand_window.active = true
      # 关闭物品栏窗口
      @itemlist_window.active = false
      # 隐藏物品栏索引
      @itemlist_window.index = -1
      # 隐藏帮助窗口
      @help_window.visible = false
      @itemcommand_window.index = @command_index
      # 索引返回到0,在回到-1达到隐藏效果
      0.downto(-1) { |x|  @itemlist_window.index = x }
      return
    end
   
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取项目窗口中当前选定的数据
      @item = @itemlist_window.item
      # 非使用项目时
      unless @item.is_a?(RPG::Item)
        
=begin        
        # 不能装备演奏冻结SE。
        unless @actor.can_equip?(@item)
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
         
          @tip.tip("你不能装备!")
         
          return
        end
=end        

        # 武器或装备的场合
        if @item.is_a?(RPG::Weapon) or @item.is_a?(RPG::Armor)
          case @actor.can_equip?(@item)
          when false
            tip_str = "你不能装备!"
          when nil
            tip_str = "等级过低无法穿戴!"
          else
            tip_str = false
          end
          if tip_str
            # 演奏冻结 SE
            $game_system.se_play($data_system.buzzer_se)
            @tip.tip(tip_str)
            return
          end
        end        
        
        # 激活装备界面
        $game_system.se_play($data_system.decision_se)
        if @item.nil?
          @type = nil
        else
          @type = @item.is_a?(RPG::Weapon) ? 0 : @item.kind + 1
        end
        if @item != nil
          @item1 == @itemlist_window.item
        end
        # 关闭物品栏窗口
        @itemlist_window.active = false
        @right_window.index = @type.nil? ? 0 : @type
        # 打开装备栏窗口
        @right_window.active = true
        return
      end
      # 不可用时
      unless $game_party.item_can_use?(@item.id)
       # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        @tip.tip("你不能使用该物品!")
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 效果范围是我方的情况下
      if @item.scope >= 3
        # 激活目标窗口
        @itemlist_window.active = false
         # 调整物品画面使用对像角色选择的窗口位置
        @target_window.visible = true
        @target_window.active = true
         # 设置效果范围 (单体/全体) 的对应光标位置
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
      # 效果在我方以外的情况下
      else
        # 公共事件 ID 有效的情况下
        if @item.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @item.common_event_id
          # 演奏物品使用时的 SE
          $game_system.se_play(@item.menu_se)
          # 消耗品的情况下
            if @item.consumable
           # 使用的物品数减 1
              $game_party.lose_item(@item.id, 1)
             # 再描绘物品窗口的项目
              @itemlist_window.draw_item(@itemlist_window.index)
            end
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (目标窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_target
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
       # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
     # 由于物品用完而不能使用的场合
      unless $game_party.item_can_use?(@item.id)
        # 再次生成物品窗口的内容
        @itemlist_window.refresh
      end
      # 删除目标窗口
      @itemlist_window.active = true
      @target_window.visible = false
      @target_window.active = false
      @itemlist_window.set_item(@command_index)
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 如果物品用完的情况下
      if $game_party.item_number(@item.id) == 0
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        # 物品提示
        @tip.tip("物品已用完!")
        return
      end
      # 目标是全体的情况下
      if @target_window.index == -1
         # 对同伴全体应用物品使用效果
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      # 目标是单体的情况下
      if @target_window.index >= 0
        # 对目标角色应用物品的使用效果
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      # 使用物品的情况下
      if used
        # 演奏物品使用时的 SE
        $game_system.se_play(@item.menu_se)
        # 消耗品的情况下
        if @item.consumable
          # 使用的物品数减 1
          $game_party.lose_item(@item.id, 1)
          # 再描绘物品窗口的项目
          @itemlist_window.draw_item(@itemlist_window.index)
          @itemlist_window.set_item(@command_index)
               
          #如果使用后物品归零,则关闭Help_Window
          if $game_party.item_number(@item.id) == 0

            # 隐藏帮助窗口
            @help_window.visible = false
            # 删除目标窗口
            @target_window.visible = false
            @target_window.active  = false
            # 物品提示
            @tip.tip("物品已用完!")
            
            #这是为了让光标不要停留在空白处
            if @itemlist_window.index > 0
              @itemlist_window.index -= 1
            end

            # 激活物品窗口状态
            @itemlist_window.active = true
          end
         
        end
         # 再生成目标窗口的内容
        @target_window.refresh
        # 全灭的情况下
        if $game_party.all_dead?
        # 切换到游戏结束画面
          $scene = Scene_Gameover.new
          return
        end
        # 公共事件 ID 有效的情况下
        if @item.common_event_id > 0
         # 预约调用公共事件
          $game_temp.common_event_id = @item.common_event_id
           # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      # 无法使用物品的情况下
      unless used
       # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        # 物品提示
        @tip.tip("你不能使用该物品!")
      end
    return
    end
  end
  # 刷新(角色装备)。
  def update_equip
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # #隐藏物品分类
      @itemlist_window.active = true
      # 隐藏装备栏窗口
      @right_window.active = false
      # 隐藏装备帮助窗口
      @help1_window.visible = false
      # 隐藏装备索引
      @right_window.index = -1
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      if @type != nil and @right_window.index != @type
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        # 物品提示
        @tip.tip("不能装备在这儿!")
        return
      end
      # 演奏装备 SE
      $game_system.se_play($data_system.equip_se)
      # 变更装备
      @actor.equip(@right_window.index, @item == nil ? 0 : @item.id)
   
=begin   
      # 如果穿着后,装备归零,则关闭Help_Window
      if $game_party.item_number(@item1.id) == 0
        @help_window.visible = false
        # 物品窗口索引判定(这是为了让光标不要停留在空白处)
        if @itemlist_window.index > 0
        #  @itemlist_window.index -= 1
        end
        @item1 = nil
      end
=end

      # 索引=物品分类
      @itemlist_window.set_item(@command_index)
      # 刷新装备窗口
      @right_window.refresh
      # 关闭物品窗口激活状态
      @itemlist_window.active = true
      # 隐藏装备栏窗口
      @right_window.active = false
      # 隐藏装备帮助窗口
      @help1_window.visible = false
      # 隐藏装备索引
      @right_window.index = -1
    end
  end
end
[/pre]
梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-9-8 21:14:56 | 显示全部楼层
自己解决了
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部