Project1

标题: 使用物品后的窗口问题 [打印本页]

作者: lostding    时间: 2011-8-22 11:32
标题: 使用物品后的窗口问题
我用物品做了个回城卷轴,调用的是公共事件。

可一使用了后,虽然回去了,可是窗口成这样了。。

请问该怎么解决呀!这窗口怎么没有消失呢??新手估计在这里改?但不会啊!!
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================

  6. class Scene_Item
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成帮助窗口、物品窗口
  12.     @help_window = Window_Help_Self.new
  13.     @item_window = Window_Item.new
  14.     @ohmygold = Ohmygold.new
  15.    
  16.     #插入图片
  17.     @menu_com = Sprite.new
  18.     @menu_com.bitmap = RPG::Cache.picture("道具.png")
  19.     # 关联帮助窗口
  20.     @item_window.help_window = @help_window
  21.     # 生成目标窗口 (设置为不可见・不活动)
  22.     @target_window = Window_Target.new
  23.     @target_window.visible = false
  24.     @target_window.active = false
  25.     # 执行过度
  26.     Graphics.transition
  27.     # 主循环
  28.     loop do
  29.       # 刷新游戏画面
  30.       Graphics.update
  31.       # 刷新输入信息
  32.       Input.update
  33.       @ohmygold.update
  34.       
  35.       # 刷新画面
  36.       update
  37.       # 如果画面切换就中断循环
  38.       if $scene != self
  39.         break
  40.       end
  41.     end
  42.     # 装备过渡
  43.     Graphics.freeze
  44.     # 释放窗口
  45.     @ohmygold.dispose
  46.     @help_window.dispose
  47.     @item_window.dispose
  48.     @target_window.dispose
  49.     @menu_com.dispose
  50.    
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 刷新画面
  54.   #--------------------------------------------------------------------------
  55.   def update
  56.     # 刷新窗口
  57.     @help_window.update
  58.     @item_window.update
  59.     @target_window.update
  60.     # 物品窗口被激活的情况下: 调用 update_item
  61.     if @item_window.active
  62.       update_item
  63.       return
  64.     end
  65.     # 目标窗口被激活的情况下: 调用 update_target
  66.     if @target_window.active
  67.       update_target
  68.       return
  69.     end
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 刷新画面 (物品窗口被激活的情况下)
  73.   #--------------------------------------------------------------------------
  74.   def update_item
  75.     # 按下 B 键的情况下
  76.     if Input.trigger?(Input::B)
  77.       # 演奏取消 SE
  78.       $game_system.se_play($data_system.cancel_se)
  79.       # 切换到菜单画面
  80.       $scene = Scene_Menu.new(0)
  81.       return
  82.     end
  83.     # 按下 C 键的情况下
  84.     if Input.trigger?(Input::C)
  85.       # 获取物品窗口当前选中的物品数据
  86.       @item = @item_window.item
  87.       # 不使用物品的情况下
  88.       unless @item.is_a?(RPG::Item)
  89.         # 演奏冻结 SE
  90.         $game_system.se_play($data_system.buzzer_se)
  91.         return
  92.       end
  93.       # 不能使用的情况下
  94.       unless $game_party.item_can_use?(@item.id)
  95.         # 演奏冻结 SE
  96.         $game_system.se_play($data_system.buzzer_se)
  97.         return
  98.       end
  99.       # 演奏确定 SE
  100.       $game_system.se_play($data_system.decision_se)
  101.       # 效果范围是我方的情况下
  102.       if @item.scope >= 3
  103.         # 激活目标窗口
  104.         @menu_com2 = Sprite.new
  105.         @menu_com2.bitmap = RPG::Cache.picture("使用物品.png")
  106.         @menu_com2.z=110
  107.         @item_window.active = false
  108.         @target_window.x = 304
  109.         @target_window.visible = true
  110.         @target_window.active = true
  111.         # 设置效果范围 (单体/全体) 的对应光标位置
  112.         if @item.scope == 4 || @item.scope == 6
  113.           @target_window.index = -1
  114.         else
  115.           @target_window.index = 0
  116.         end
  117.       # 效果在我方以外的情况下
  118.       else
  119.         # 公共事件 ID 有效的情况下
  120.         if @item.common_event_id > 0
  121.           # 预约调用公共事件
  122.           $game_temp.common_event_id = @item.common_event_id
  123.           # 演奏物品使用时的 SE
  124.           $game_system.se_play(@item.menu_se)
  125.           # 消耗品的情况下
  126.           if @item.consumable
  127.             # 使用的物品数减 1
  128.             $game_party.lose_item(@item.id, 1)
  129.             # 再描绘物品窗口的项目
  130.             @item_window.draw_item(@item_window.index)
  131.           end
  132.           # 切换到地图画面
  133.           $scene = Scene_Map.new
  134.           return
  135.         end
  136.       end
  137.       return
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 刷新画面 (目标窗口被激活的情况下)
  142.   #--------------------------------------------------------------------------
  143.   def update_target
  144.     # 按下 B 键的情况下
  145.     if Input.trigger?(Input::B)
  146.       # 演奏取消 SE
  147.       $game_system.se_play($data_system.cancel_se)
  148.       # 由于物品用完而不能使用的场合
  149.       unless $game_party.item_can_use?(@item.id)
  150.         # 再次生成物品窗口的内容
  151.         @item_window.refresh
  152.       end
  153.       # 删除目标窗口
  154.       @item_window.active = true
  155.       @target_window.visible = false
  156.       @target_window.active = false
  157.       @menu_com2.dispose
  158.       return
  159.     end
  160.     # 按下 C 键的情况下
  161.     if Input.trigger?(Input::C)
  162.       # 如果物品用完的情况下
  163.       if $game_party.item_number(@item.id) == 0
  164.         # 演奏冻结 SE
  165.         $game_system.se_play($data_system.buzzer_se)
  166.         return
  167.       end
  168.       # 目标是全体的情况下
  169.       if @target_window.index == -1
  170.         # 对同伴全体应用物品使用效果
  171.         used = false
  172.         for i in $game_party.actors
  173.           used |= i.item_effect(@item)
  174.         end
  175.       end
  176.       # 目标是单体的情况下
  177.       if @target_window.index >= 0
  178.         # 对目标角色应用物品的使用效果
  179.         target = $game_party.actors[@target_window.index]
  180.         used = target.item_effect(@item)
  181.       end
  182.       # 使用物品的情况下
  183.       if used
  184.         # 演奏物品使用时的 SE
  185.         $game_system.se_play(@item.menu_se)
  186.         # 消耗品的情况下
  187.         if @item.consumable
  188.           # 使用的物品数减 1
  189.           $game_party.lose_item(@item.id, 1)
  190.           # 再描绘物品窗口的项目
  191.           @item_window.draw_item(@item_window.index)
  192.         end
  193.         # 再生成目标窗口的内容
  194.         @target_window.refresh
  195.         # 全灭的情况下
  196.         if $game_party.all_dead?
  197.           # 切换到游戏结束画面
  198.           $scene = Scene_Gameover.new
  199.           return
  200.         end
  201.         # 公共事件 ID 有效的情况下
  202.         if @item.common_event_id > 0
  203.           # 预约调用公共事件
  204.           $game_temp.common_event_id = @item.common_event_id
  205.           # 切换到地图画面
  206.           $scene = Scene_Map.new
  207.           return
  208.         end
  209.       end
  210.       # 无法使用物品的情况下
  211.       unless used
  212.         # 演奏冻结 SE
  213.         $game_system.se_play($data_system.buzzer_se)
  214.       end
  215.       return
  216.     end
  217.   end
  218. end
复制代码
dsu_plus_rewardpost_czw
作者: Wind2010    时间: 2011-8-22 11:41
目测脚本无毛病
作者: 钢铁列兵    时间: 2011-8-22 11:44
本帖最后由 钢铁列兵 于 2011-8-22 11:45 编辑

记得以前玩站上的式神之城rpg版时也有这种情况;按ESC后再退出应该就没事了;而且你跟他都是用的同一套菜单系统
作者: rainfly    时间: 2011-8-22 12:00
应该是Window_Target没有dispose吧
作者: orzfly    时间: 2011-8-22 12:01
楼主把Scene_Item发出来。注意要全局搜索class Scene_Item把能找到的搜索结果都发出来。
作者: liuziyuan201019    时间: 2011-8-22 12:05
问题一:
楼主你用一下$scene = Scene_Map.new,
回到地图再回城试试;
要不等待3帧?脚本太大会导致窗口消失不及时,等等或许有用。
作者: lostding    时间: 2011-8-22 12:55
orzfly 发表于 2011-8-22 12:01
楼主把Scene_Item发出来。注意要全局搜索class Scene_Item把能找到的搜索结果都发出来。 ...

Scene_Menu(118) :       $Scene=Scene_Item.new
自制Scene_Item(2):#Scene_Item
自制Scene_Item(7):class Scene_Item
作者: 失·忆    时间: 2011-8-22 13:17
公共事件前后等待5帧左右试试,可能是菜单框来不及消失。
作者: PCNinja    时间: 2011-8-22 13:22
試試把使用範圍改成「無」吧,
這樣那個選擇人物的窗口就不會再出來,
反正你也不會用在個別的隊員中,
而且公用事件和使用範圍沒有直接關系。




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