Project1

标题: 直接启动物品和直接返回地图 [打印本页]

作者: 月過の無痕    时间: 2007-7-26 22:08
标题: 直接启动物品和直接返回地图
直接启动物品和直接返回地图
一些游戏需要的...像神奇宝贝就需要直接启动物品系统退出的时候在直接反回地图:
直接替换SCENE_ITEM的脚本
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================

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

想在事件中直接查看物品就使用最后的脚本
输入
  1. $scene = Scene_Item.new
复制代码
..
很简单的一个东西- -..{/tp}
作者: 月過の無痕    时间: 2007-7-26 22:08
标题: 直接启动物品和直接返回地图
直接启动物品和直接返回地图
一些游戏需要的...像神奇宝贝就需要直接启动物品系统退出的时候在直接反回地图:
直接替换SCENE_ITEM的脚本
  1. #==============================================================================
  2. # ■ Scene_Item
  3. #------------------------------------------------------------------------------
  4. #  处理物品画面的类。
  5. #==============================================================================

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

想在事件中直接查看物品就使用最后的脚本
输入
  1. $scene = Scene_Item.new
复制代码
..
很简单的一个东西- -..{/tp}
作者: 越前リョーマ    时间: 2007-7-26 22:08
就是说自动使用物品?
那是个不错的东西。

返回地图我不大明白/
作者: 月過の無痕    时间: 2007-7-26 22:10
以下引用越前リョーマ于2007-7-26 14:08:53的发言:

就是说自动使用物品?
那是个不错的东西。

返回地图我不大明白/

呃..不是..是说省掉那个队员和装备那一个地方..
直接显示物品...
但是要是直接启动$scene = Scene_Item.new的话..返回是还会出现呃..不是..是说省掉那个队员和装备那一个地方....
所以直接改了脚本..神奇宝贝的需要- -b
作者: 越前リョーマ    时间: 2007-7-26 22:11
还是不大明白……
作者: 越前リョーマ    时间: 2007-7-26 22:11
发张效果图吧?
作者: 月過の無痕    时间: 2007-7-26 22:11
你直接替换使用下就明白了- -
作者: 囧啥也不会囧    时间: 2007-8-1 11:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 精灵使者    时间: 2007-8-1 17:45
以下引用囧啥也不会囧于2007-8-1 3:31:23的发言:

scene = muen.new(X)
修改成了scene = map.new?


对。如果直接引用的话,按esc会返回菜单- -
以前就有这个例子,做读取存档的时候按esc会返回标题
就把
$scene=scene_title.new
改为$scene = scene_map.new
就返回地图了。
作者: 越前リョーマ    时间: 2007-8-1 20:10
MS明白LZ意思了,

就是说本来使用物品还是在菜单里,
现在直接结束菜单。

但是用处也没什么大……




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