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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3186
在线时间
1863 小时
注册时间
2010-6-19
帖子
1205
跳转到指定楼层
1
发表于 2022-9-6 18:20:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

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

物品分类


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


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





RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Item
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像■■■■■■■■■■■■■■■■■■■■■■
  10.   #     actor_index : 角色索引
  11.   #--------------------------------------------------------------------------
  12.   def initialize(actor_index = 0, equip_index = 0)
  13.     @actor_index = actor_index # 返回菜单用
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 主处理
  17.   #--------------------------------------------------------------------------
  18.   def main
  19.  
  20.     # 获取角色
  21.     @actor = $game_party.actors[@actor_index]
  22.  
  23.     # 获取角色现在装备的物品
  24.     @right_window = Window_Eq.new(@actor)
  25.     # 隐藏装备栏索引
  26.     @right_window.index = -1
  27.     # 隐藏装备栏窗口
  28.     @right_window.active = false
  29.  
  30.     # 生成装备帮助窗口
  31.     @help1_window = Shop_Help.new
  32.     # 关联装备帮助窗口
  33.     @right_window.help_window = @help1_window
  34.     @right_window.help_window.z = 2000
  35.  
  36.     # 提示窗口
  37.     @tip = Window_Tip_Item.new
  38.  
  39.     # 显示人物动态图窗口
  40.     @dongtaitu_window = Window_dtt.new(@actor)
  41.  
  42.     # 生成物品分类窗口
  43.     @itemcommand_window = Fenlei_Command.new
  44.     @command_index = @itemcommand_window.index
  45.  
  46.     # 生成物品窗口
  47.     @itemlist_window = Actor_Item.new(@actor)
  48.     @itemlist_window.active = false
  49.  
  50.     # 生成物品帮助窗口
  51.     @help_window = Shop_Help.new
  52.  
  53.     # 关联物品帮助窗口
  54.     @itemlist_window.help_window = @help_window
  55.  
  56.     # 生成目标窗口 (设置为不可见・不活动)
  57.     @target_window = Window_Target_zl.new
  58.     @target_window.visible = false
  59.     @target_window.active = false
  60.  
  61.     # 生成头像框
  62.     @sthero_window = Window_Sthero.new
  63.  
  64.     # 显示游戏界面1图片
  65.     @jiemian = Sprite.new
  66.     @jiemian.bitmap = Bitmap.new("Graphics/Pictures/Ui/主界面/游戏界面1")
  67.     @jiemian.z = 200   
  68.     # 显示游戏界面2图片
  69.     @jiemian1 = Sprite.new
  70.     @jiemian1.bitmap = Bitmap.new("Graphics/Pictures/Ui/主界面/游戏界面2")
  71.     @jiemian1.y = 715
  72.     @jiemian1.z = 200
  73.  
  74.     # 生成背景图窗口
  75.     @back = Sprite.new
  76.     @back.bitmap = Bitmap.new("Graphics/Pictures/Ui/物品界面/物品背景")  
  77.     @back.y = (768-555)/2-53/2
  78.     @back.z = 200
  79.  
  80.     # 生成现实时间窗口
  81.     @realtime_window = Window_RealTime.new
  82.     # 生成游戏时间窗口
  83.     @playtime_window = Window_PlayTime.new
  84.  
  85.     # 显示队伍头像
  86.     @dtx = Window_DuiTouxiang.new
  87.  
  88.     # 生成金钱窗口
  89.     @gold_window = Window_Gold.new
  90.     @gold_window.x = 58+2
  91.     @gold_window.y = 571
  92.     @gold_window.opacity = 0
  93.  
  94.     # 生成队标窗口
  95.     @db = Window_db.new
  96.     # 队伍人数大于1
  97.     if $game_party.actors.size <= 1
  98.       # 隐藏队标窗口
  99.       @db.visible = false
  100.     else
  101.       # 显示队标窗口
  102.       @db.visible = true
  103.     end
  104.  
  105.     # 物品窗口索引
  106.     @itemlist_window.set_item(@command_index)
  107.     # 执行过度
  108.     Graphics.transition
  109.     # 主循环
  110.     loop do
  111.       # 刷新游戏画面
  112.       Graphics.update
  113.       # 刷新输入信息
  114.       Input.update
  115.       # 刷新画面
  116.       update
  117.       # 如果画面切换就中断循环
  118.       if $scene != self
  119.         break
  120.       end
  121.     end
  122.     # 装备过渡
  123.     Graphics.freeze
  124.     # 释放物品分类窗口
  125.     @itemcommand_window.dispose
  126.     # 释放物品栏窗口
  127.     @itemlist_window.dispose
  128.     # 释放目标被激活的窗口
  129.     @target_window.dispose
  130.     # 释放提示窗口
  131.     @tip.dispose
  132.     # 释放装备窗口
  133.     @right_window.dispose
  134.     # 释放物品帮助窗口
  135.     @help_window.dispose
  136.     # 释放装备帮助窗口
  137.     @help1_window.dispose
  138.     # 释放人物动态图窗口
  139.     @dongtaitu_window.dispose
  140.     # 释放头像框
  141.     @sthero_window.dispose
  142.     # 释放现实时间窗口
  143.     @realtime_window.dispose
  144.     # 释放游戏时间窗口
  145.     @playtime_window.dispose
  146.     # 释放队伍头像
  147.     @dtx.dispose
  148.     # 释放界面图片
  149.     @jiemian.dispose
  150.     @jiemian.bitmap.dispose
  151.     @jiemian1.dispose
  152.     @jiemian1.bitmap.dispose
  153.     # 释放背景图窗口
  154.     @back.dispose
  155.     # 释放背景图图片
  156.     @back.bitmap.dispose
  157.     # 释放金钱窗口
  158.     @gold_window.dispose
  159.     # 释放队标窗口
  160.     @db.dispose
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 刷新画面
  164.   #--------------------------------------------------------------------------
  165.   def update
  166.     #【仿网游动态地图界面】
  167.     $spriteset.update
  168.     # 刷新队伍头像
  169.     @dtx.update
  170.     # 刷新游戏时间窗口
  171.     @playtime_window.update   
  172.     # 刷新显示时间窗口
  173.     @realtime_window.update
  174.     # 刷新装备窗口   
  175.     @right_window.update
  176.     # 物品提示窗口
  177.     @tip.update
  178.     # 刷新物品分类
  179.     @itemcommand_window.update
  180.     # 刷新物品栏窗口
  181.     @itemlist_window.update
  182.     # 刷新人物动态图窗口
  183.     @dongtaitu_window.update
  184.     # 刷新物品帮助窗口
  185.     @help_window.update
  186.     # 刷新装备帮助窗口
  187.     @help1_window.update
  188.     # 刷新头像框
  189.     @sthero_window.update
  190.     # 刷新界面图片
  191.     @jiemian.update
  192.     @jiemian1.update
  193.     # 刷新背景图窗口
  194.     @back.update
  195.     # 刷新金钱窗口
  196.     @gold_window.update
  197.  
  198.     # 队伍人数大于1
  199.     if $game_party.actors.size <= 1
  200.       # 隐藏队标窗口
  201.       @db.visible = false
  202.       # 刷新队标窗口
  203.       @db.update
  204.     else
  205.       # 显示队标窗口
  206.       @db.visible = true
  207.       # 刷新队标窗口
  208.       @db.update
  209.     end
  210.  
  211.     # 调整装备栏光标距离
  212.     irect = @right_window.cursor_rect
  213.       w = @help1_window
  214.     w.x = @right_window.x + irect.x + irect.width + 13
  215.     w.y = @right_window.y + irect.y + irect.height + 13
  216.     if w.x + w.width > 1024
  217.       w.x = 1024 - w.width
  218.     end
  219.     if w.y + w.height > 400#768
  220.       w.y = 400 - w.height
  221.     end   
  222.  
  223.     # 按下 ALT 的情况
  224.     if Kboard.keyboard(226)
  225.       # 按下 ALT + E 关闭物品画面  
  226.       if Kboard.key(8,1)      
  227.         # 演奏取消 SE
  228.         $game_system.se_play($data_system.cancel_se)
  229.         # 回到带头角色头像框
  230.         $temp_mapface_id = $game_party.actors[0].id
  231.         # 切换到地图画面
  232.         $scene = Scene_Map.new
  233.         return
  234.       end
  235.     end  
  236.   # 队伍人数大于1时
  237.   if $game_party.actors.size > 1   
  238.     # 按下 W 键的情况下
  239.     if Kboard.key(26,1)
  240.       # 演奏光标 SE
  241.       $game_system.se_play($data_system.cursor_se)
  242.       # 移至下一位角色
  243.       @actor_index += 1
  244.       @actor_index %= $game_party.actors.size
  245.       # 角色头像对应角色索引
  246.       $temp_mapface_id = $game_party.actors[@actor_index].id
  247.       # 回到物品栏索引
  248.       $scene = Scene_Item.new(@actor_index)
  249.       return
  250.     end
  251.     # 按下 Q 键的情况下
  252.     if Kboard.key(20,1)
  253.       # 演奏光标 SE
  254.       $game_system.se_play($data_system.cursor_se)
  255.       # 移至上一位角色
  256.       @actor_index += $game_party.actors.size - 1
  257.       @actor_index %= $game_party.actors.size
  258.       # 角色头像对应角色索引
  259.       $temp_mapface_id = $game_party.actors[@actor_index].id
  260.       # 回到物品栏索引
  261.       $scene = Scene_Item.new(@actor_index)
  262.       return
  263.     end      
  264.   end
  265.  
  266.     # 刷新目标被激活的窗口
  267.     @target_window.update
  268.     if @command_index != @itemcommand_window.index
  269.       @command_index = @itemcommand_window.index
  270.       @itemlist_window.set_item(@command_index)
  271.     end
  272.     # 物品分类被激活的情况下: 调用 update_itemcommand
  273.     if @itemcommand_window.active
  274.       update_itemcommand
  275.       return
  276.     end
  277.     # 物品窗口被激活的情况下: 调用 update_itemlist
  278.     if @itemlist_window.active
  279.       update_itemlist
  280.       return
  281.     end
  282.     # 目标窗口被激活的情况下: 调用 update_target
  283.     if @target_window.active
  284.       update_target
  285.       return
  286.     end
  287.     # 角色装备栏被激活的情况下:调用 update_equip
  288.     if @right_window.active
  289.       update_equip
  290.       return
  291.     end
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 刷新画面 (物品分类窗口被激活的情况下)
  295.   #--------------------------------------------------------------------------
  296.   def update_itemcommand
  297.     # 按下 B 键的情况下 主窗口 B 键 退出
  298.     if Input.trigger?(Input::B)
  299.       # 演奏取消 SE
  300.       $game_system.se_play($data_system.cancel_se)
  301.       # 回到带头角色头像框
  302.       $temp_mapface_id = $game_party.actors[0].id
  303.       # 切换到地图画面
  304.       $scene = Scene_Map.new
  305.       return
  306.     end   
  307.     # 按下 C 键的情况下
  308.     if Input.trigger?(Input::C)
  309.       # 如果没有选定命令项
  310.       if @itemlist_window.item_number == 0
  311.         # 演奏冻结 SE
  312.         $game_system.se_play($data_system.buzzer_se)
  313.         return
  314.       end
  315.       # 演奏确定 SE
  316.       $game_system.se_play($data_system.decision_se)
  317.       # 激活物品分类窗口--关闭
  318.       @itemcommand_window.active = false
  319.       # 显示帮助窗口
  320.       @help_window.visible = true
  321.       # 激活物品栏窗口--打开
  322.       @itemlist_window.active = true
  323.       # 激活物品栏索引为第一个
  324.       @itemlist_window.index = 0
  325.       return
  326.     end
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 刷新画面 (目标窗口被激活的情况下)
  330.   #--------------------------------------------------------------------------
  331.   def update_itemlist
  332.     # 按下 B 键的情况下
  333.     if Input.trigger?(Input::B)
  334.       # 演奏取消 SE
  335.       $game_system.se_play($data_system.cancel_se)
  336.       # 打开物品分类
  337.       @itemcommand_window.active = true
  338.       # 关闭物品栏窗口
  339.       @itemlist_window.active = false
  340.       # 隐藏物品栏索引
  341.       @itemlist_window.index = -1
  342.       # 隐藏帮助窗口
  343.       @help_window.visible = false
  344.       @itemcommand_window.index = @command_index
  345.       # 索引返回到0,在回到-1达到隐藏效果
  346.       0.downto(-1) { |x|  @itemlist_window.index = x }
  347.       return
  348.     end
  349.  
  350.     # 按下 C 键的情况下
  351.     if Input.trigger?(Input::C)
  352.       # 获取项目窗口中当前选定的数据
  353.       @item = @itemlist_window.item
  354.       # 非使用项目时
  355.       unless @item.is_a?(RPG::Item)
  356.  
  357. =begin        
  358.         # 不能装备演奏冻结SE。
  359.         unless @actor.can_equip?(@item)
  360.           # 演奏冻结 SE
  361.           $game_system.se_play($data_system.buzzer_se)
  362.           
  363.           @tip.tip("你不能装备!")
  364.           
  365.           return
  366.         end
  367. =end        
  368.  
  369.         # 武器或装备的场合
  370.         if @item.is_a?(RPG::Weapon) or @item.is_a?(RPG::Armor)
  371.           case @actor.can_equip?(@item)
  372.           when false
  373.             tip_str = "你不能装备!"
  374.           when nil
  375.             tip_str = "等级过低无法穿戴!"
  376.           else
  377.             tip_str = false
  378.           end
  379.           if tip_str
  380.             # 演奏冻结 SE
  381.             $game_system.se_play($data_system.buzzer_se)
  382.             @tip.tip(tip_str)
  383.             return
  384.           end
  385.         end        
  386.  
  387.         # 激活装备界面
  388.         $game_system.se_play($data_system.decision_se)
  389.         if @item.nil?
  390.           @type = nil
  391.         else
  392.           @type = @item.is_a?(RPG::Weapon) ? 0 : @item.kind + 1
  393.         end
  394.         if @item != nil
  395.           @item1 == @itemlist_window.item
  396.         end
  397.         # 关闭物品栏窗口
  398.         @itemlist_window.active = false
  399.         @right_window.index = @type.nil? ? 0 : @type
  400.         # 打开装备栏窗口
  401.         @right_window.active = true
  402.         return
  403.       end
  404.       # 不可用时
  405.       unless $game_party.item_can_use?(@item.id)
  406.        # 演奏冻结 SE
  407.         $game_system.se_play($data_system.buzzer_se)
  408.         @tip.tip("你不能使用该物品!")
  409.         return
  410.       end
  411.       # 演奏确定 SE
  412.       $game_system.se_play($data_system.decision_se)
  413.       # 效果范围是我方的情况下
  414.       if @item.scope >= 3
  415.         # 激活目标窗口
  416.         @itemlist_window.active = false
  417.          # 调整物品画面使用对像角色选择的窗口位置
  418.         @target_window.visible = true
  419.         @target_window.active = true
  420.          # 设置效果范围 (单体/全体) 的对应光标位置
  421.         if @item.scope == 4 || @item.scope == 6
  422.           @target_window.index = -1
  423.         else
  424.           @target_window.index = 0
  425.         end
  426.       # 效果在我方以外的情况下
  427.       else
  428.         # 公共事件 ID 有效的情况下
  429.         if @item.common_event_id > 0
  430.           # 预约调用公共事件
  431.           $game_temp.common_event_id = @item.common_event_id
  432.           # 演奏物品使用时的 SE
  433.           $game_system.se_play(@item.menu_se)
  434.           # 消耗品的情况下
  435.             if @item.consumable
  436.            # 使用的物品数减 1
  437.               $game_party.lose_item(@item.id, 1)
  438.              # 再描绘物品窗口的项目
  439.               @itemlist_window.draw_item(@itemlist_window.index)
  440.             end
  441.           # 切换到地图画面
  442.           $scene = Scene_Map.new
  443.           return
  444.         end
  445.       end
  446.       return
  447.     end
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● 刷新画面 (目标窗口被激活的情况下)
  451.   #--------------------------------------------------------------------------
  452.   def update_target
  453.     # 按下 B 键的情况下
  454.     if Input.trigger?(Input::B)
  455.        # 演奏取消 SE
  456.       $game_system.se_play($data_system.cancel_se)
  457.      # 由于物品用完而不能使用的场合
  458.       unless $game_party.item_can_use?(@item.id)
  459.         # 再次生成物品窗口的内容
  460.         @itemlist_window.refresh
  461.       end
  462.       # 删除目标窗口
  463.       @itemlist_window.active = true
  464.       @target_window.visible = false
  465.       @target_window.active = false
  466.       @itemlist_window.set_item(@command_index)
  467.       return
  468.     end
  469.     # 按下 C 键的情况下
  470.     if Input.trigger?(Input::C)
  471.       # 如果物品用完的情况下
  472.       if $game_party.item_number(@item.id) == 0
  473.         # 演奏冻结 SE
  474.         $game_system.se_play($data_system.buzzer_se)
  475.         # 物品提示
  476.         @tip.tip("物品已用完!")
  477.         return
  478.       end
  479.       # 目标是全体的情况下
  480.       if @target_window.index == -1
  481.          # 对同伴全体应用物品使用效果
  482.         used = false
  483.         for i in $game_party.actors
  484.           used |= i.item_effect(@item)
  485.         end
  486.       end
  487.       # 目标是单体的情况下
  488.       if @target_window.index >= 0
  489.         # 对目标角色应用物品的使用效果
  490.         target = $game_party.actors[@target_window.index]
  491.         used = target.item_effect(@item)
  492.       end
  493.       # 使用物品的情况下
  494.       if used
  495.         # 演奏物品使用时的 SE
  496.         $game_system.se_play(@item.menu_se)
  497.         # 消耗品的情况下
  498.         if @item.consumable
  499.           # 使用的物品数减 1
  500.           $game_party.lose_item(@item.id, 1)
  501.           # 再描绘物品窗口的项目
  502.           @itemlist_window.draw_item(@itemlist_window.index)
  503.           @itemlist_window.set_item(@command_index)
  504.  
  505.           #如果使用后物品归零,则关闭Help_Window
  506.           if $game_party.item_number(@item.id) == 0
  507.  
  508.             # 隐藏帮助窗口
  509.             @help_window.visible = false
  510.             # 删除目标窗口
  511.             @target_window.visible = false
  512.             @target_window.active  = false
  513.             # 物品提示
  514.             @tip.tip("物品已用完!")
  515.  
  516.             #这是为了让光标不要停留在空白处
  517.             if @itemlist_window.index > 0
  518.               @itemlist_window.index -= 1
  519.             end
  520.  
  521.             # 激活物品窗口状态
  522.             @itemlist_window.active = true
  523.           end
  524.  
  525.         end
  526.          # 再生成目标窗口的内容
  527.         @target_window.refresh
  528.         # 全灭的情况下
  529.         if $game_party.all_dead?
  530.         # 切换到游戏结束画面
  531.           $scene = Scene_Gameover.new
  532.           return
  533.         end
  534.         # 公共事件 ID 有效的情况下
  535.         if @item.common_event_id > 0
  536.          # 预约调用公共事件
  537.           $game_temp.common_event_id = @item.common_event_id
  538.            # 切换到地图画面
  539.           $scene = Scene_Map.new
  540.           return
  541.         end
  542.       end
  543.       # 无法使用物品的情况下
  544.       unless used
  545.        # 演奏冻结 SE
  546.         $game_system.se_play($data_system.buzzer_se)
  547.         # 物品提示
  548.         @tip.tip("你不能使用该物品!")
  549.       end
  550.     return
  551.     end
  552.   end
  553.   # 刷新(角色装备)。
  554.   def update_equip
  555.     # 按下 B 键的情况下
  556.     if Input.trigger?(Input::B)
  557.       # 演奏取消 SE
  558.       $game_system.se_play($data_system.cancel_se)
  559.       # #隐藏物品分类
  560.       @itemlist_window.active = true
  561.       # 隐藏装备栏窗口
  562.       @right_window.active = false
  563.       # 隐藏装备帮助窗口
  564.       @help1_window.visible = false
  565.       # 隐藏装备索引
  566.       @right_window.index = -1
  567.       return
  568.     end
  569.     # 按下 C 键的情况下
  570.     if Input.trigger?(Input::C)
  571.       if @type != nil and @right_window.index != @type
  572.         # 演奏冻结 SE
  573.         $game_system.se_play($data_system.buzzer_se)
  574.         # 物品提示
  575.         @tip.tip("不能装备在这儿!")
  576.         return
  577.       end
  578.       # 演奏装备 SE
  579.       $game_system.se_play($data_system.equip_se)
  580.       # 变更装备
  581.       @actor.equip(@right_window.index, @item == nil ? 0 : @item.id)
  582.  
  583. =begin   
  584.       # 如果穿着后,装备归零,则关闭Help_Window
  585.       if $game_party.item_number(@item1.id) == 0
  586.         @help_window.visible = false
  587.         # 物品窗口索引判定(这是为了让光标不要停留在空白处)
  588.         if @itemlist_window.index > 0
  589.         #  @itemlist_window.index -= 1
  590.         end
  591.         @item1 = nil
  592.       end
  593. =end
  594.  
  595.       # 索引=物品分类
  596.       @itemlist_window.set_item(@command_index)
  597.       # 刷新装备窗口
  598.       @right_window.refresh
  599.       # 关闭物品窗口激活状态
  600.       @itemlist_window.active = true
  601.       # 隐藏装备栏窗口
  602.       @right_window.active = false
  603.       # 隐藏装备帮助窗口
  604.       @help1_window.visible = false
  605.       # 隐藏装备索引
  606.       @right_window.index = -1
  607.     end
  608.   end
  609. end

Lv3.寻梦者

梦石
0
星屑
3186
在线时间
1863 小时
注册时间
2010-6-19
帖子
1205
2
 楼主| 发表于 2022-9-8 21:14:56 | 只看该作者
自己解决了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-1 02:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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