Project1

标题: 刚刚发了个求助帖不小心被自己关闭了 [打印本页]

作者: 1172936560    时间: 2012-2-10 09:51
标题: 刚刚发了个求助帖不小心被自己关闭了
http://rpg.blue/forum.php?mod=viewthread&tid=222417   这是地址,求大神解答dsu_plus_rewardpost_czw
作者: 过眼云烟    时间: 2012-2-10 10:00
你贴出来的脚本太少了,还是截图,看不出错误来,我觉得可能和别的脚本冲突了
作者: 1172936560    时间: 2012-2-10 10:10
过眼云烟 发表于 2012-2-10 10:00
你贴出来的脚本太少了,还是截图,看不出错误来,我觉得可能和别的脚本冲突了 ...

你还要关于什么的脚本,我复制过来你看


‘‘

#==============================================================================
# ■ Scene_Skill
#------------------------------------------------------------------------------
#  处理特技画面的类。
#==============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor_index : 角色索引
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    @actor = $game_party.actors[@actor_index]
    # 生成帮助窗口、状态窗口、特技窗口
    @help_window = Window_Help.new
    @status_window = Window_SkillStatus.new(@actor)
    @skill_window = Window_Skill.new(@actor)
    # 关联帮助窗口
    @skill_window.help_window = @help_window
    # 生成目标窗口 (设置为不可见・不活动)
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @help_window.dispose
    @status_window.dispose
    @skill_window.dispose
    @target_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @help_window.update
    @status_window.update
    @skill_window.update
    @target_window.update
    # 特技窗口被激活的情况下: 调用 update_skill
    if @skill_window.active
      update_skill
      return
    end
    # 目标窗口被激活的情况下: 调用 update_target
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (特技窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_skill
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(1)
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取特技窗口现在选择的特技的数据
      @skill = @skill_window.skill
      # 不能使用的情况下
      if @skill == nil or not @actor.skill_can_use?(@skill.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 效果范围是我方的情况下
      if @skill.scope >= 3
        # 激活目标窗口
        @skill_window.active = false
        @target_window.x = (@skill_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        # 设置效果范围 (单体/全体) 的对应光标位置
        if @skill.scope == 4 || @skill.scope == 6
          @target_window.index = -1
        elsif @skill.scope == 7
          @target_window.index = @actor_index - 10
        else
          @target_window.index = 0
        end
      # 效果在我方以外的情况下
      else
        # 公共事件 ID 有效的情况下
        if @skill.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @skill.common_event_id
          # 演奏特技使用时的 SE
          $game_system.se_play(@skill.menu_se)
          # 消耗 SP
          @actor.sp -= @skill.sp_cost
          # 再生成各窗口的内容
          @status_window.refresh
          @skill_window.refresh
          @target_window.refresh
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
    # 按下 R 键的情况下
    if Input.trigger?(Input::R)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至下一位角色
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 切换到别的特技画面
      $scene = Scene_Skill.new(@actor_index)
      return
    end
    # 按下 L 键的情况下
    if Input.trigger?(Input::L)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至上一位角色
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 切换到别的特技画面
      $scene = Scene_Skill.new(@actor_index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (目标窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_target
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 删除目标窗口
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 因为 SP 不足而无法使用的情况下
      unless @actor.skill_can_use?(@skill.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 目标是全体的情况下
      if @target_window.index == -1
        # 对同伴全体应用特技使用效果
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      # 目标是使用者的情况下
      if @target_window.index <= -2
        # 对目标角色应用特技的使用效果
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      # 目标是单体的情况下
      if @target_window.index >= 0
        # 对目标角色应用特技的使用效果
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      # 使用特技的情况下
      if used
        # 演奏特技使用时的 SE
        $game_system.se_play(@skill.menu_se)
        # 消耗 SP
        @actor.sp -= @skill.sp_cost
        # 再生成各窗口内容
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # 全灭的情况下
        if $game_party.all_dead?
          # 切换到游戏结束画面
          $scene = Scene_Gameover.new
          return
        end
        # 公共事件 ID 有效的情况下
        if @skill.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @skill.common_event_id
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      # 无法使用特技的情况下
      unless used
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end



──1172936560于2012-2-10 10:10补充以上内容’’


‘‘

“#==============================================================================
# ■ Scene_Skill
#------------------------------------------------------------------------------
#  处理特技画面的类。
#==============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor_index : 角色索引
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    @actor = $game_party.actors[@actor_index]
    # 生成帮助窗口、状态窗口、特技窗口
    @help_window = Window_Help.new
    @status_window = Window_SkillStatus.new(@actor)
    @skill_window = Window_Skill.new(@actor)
    # 关联帮助窗口
    @skill_window.help_window = @help_window
    # 生成目标窗口 (设置为不可见・不活动)
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @help_window.dispose
    @status_window.dispose
    @skill_window.dispose
    @target_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @help_window.update
    @status_window.update
    @skill_window.update
    @target_window.update
    # 特技窗口被激活的情况下: 调用 update_skill
    if @skill_window.active
      update_skill
      return
    end
    # 目标窗口被激活的情况下: 调用 update_target
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (特技窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_skill
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(1)
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 获取特技窗口现在选择的特技的数据
      @skill = @skill_window.skill
      # 不能使用的情况下
      if @skill == nil or not @actor.skill_can_use?(@skill.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 效果范围是我方的情况下
      if @skill.scope >= 3
        # 激活目标窗口
        @skill_window.active = false
        @target_window.x = (@skill_window.index + 1) % 2 * 304
        @target_window.visible = true
        @target_window.active = true
        # 设置效果范围 (单体/全体) 的对应光标位置
        if @skill.scope == 4 || @skill.scope == 6
          @target_window.index = -1
        elsif @skill.scope == 7
          @target_window.index = @actor_index - 10
        else
          @target_window.index = 0
        end
      # 效果在我方以外的情况下
      else
        # 公共事件 ID 有效的情况下
        if @skill.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @skill.common_event_id
          # 演奏特技使用时的 SE
          $game_system.se_play(@skill.menu_se)
          # 消耗 SP
          @actor.sp -= @skill.sp_cost
          # 再生成各窗口的内容
          @status_window.refresh
          @skill_window.refresh
          @target_window.refresh
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
    # 按下 R 键的情况下
    if Input.trigger?(Input::R)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至下一位角色
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 切换到别的特技画面
      $scene = Scene_Skill.new(@actor_index)
      return
    end
    # 按下 L 键的情况下
    if Input.trigger?(Input::L)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至上一位角色
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 切换到别的特技画面
      $scene = Scene_Skill.new(@actor_index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (目标窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_target
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 删除目标窗口
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 因为 SP 不足而无法使用的情况下
      unless @actor.skill_can_use?(@skill.id)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 目标是全体的情况下
      if @target_window.index == -1
        # 对同伴全体应用特技使用效果
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      # 目标是使用者的情况下
      if @target_window.index <= -2
        # 对目标角色应用特技的使用效果
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      # 目标是单体的情况下
      if @target_window.index >= 0
        # 对目标角色应用特技的使用效果
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      # 使用特技的情况下
      if used
        # 演奏特技使用时的 SE
        $game_system.se_play(@skill.menu_se)
        # 消耗 SP
        @actor.sp -= @skill.sp_cost
        # 再生成各窗口内容
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # 全灭的情况下
        if $game_party.all_dead?
          # 切换到游戏结束画面
          $scene = Scene_Gameover.new
          return
        end
        # 公共事件 ID 有效的情况下
        if @skill.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @skill.common_event_id
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      # 无法使用特技的情况下
      unless used
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end



──1172936560于2012-2-10 10:11补充以上内容’’


‘‘

我发的脚本怎么没有被框起来啊


──1172936560于2012-2-10 10:12补充以上内容’’


‘‘
  1. #==============================================================================
  2. # ■ Scene_Skill
  3. #------------------------------------------------------------------------------
  4. #  处理特技画面的类。
  5. #==============================================================================

  6. class Scene_Skill
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor_index : 角色索引
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor_index = 0, equip_index = 0)
  12.     @actor_index = actor_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 主处理
  16.   #--------------------------------------------------------------------------
  17.   def main
  18.     # 获取角色
  19.     @actor = $game_party.actors[@actor_index]
  20.     # 生成帮助窗口、状态窗口、特技窗口
  21.     @help_window = Window_Help.new
  22.     @status_window = Window_SkillStatus.new(@actor)
  23.     @skill_window = Window_Skill.new(@actor)
  24.     # 关联帮助窗口
  25.     @skill_window.help_window = @help_window
  26.     # 生成目标窗口 (设置为不可见・不活动)
  27.     @target_window = Window_Target.new
  28.     @target_window.visible = false
  29.     @target_window.active = false
  30.     # 执行过渡
  31.     Graphics.transition
  32.     # 主循环
  33.     loop do
  34.       # 刷新游戏画面
  35.       Graphics.update
  36.       # 刷新输入信息
  37.       Input.update
  38.       # 刷新画面
  39.       update
  40.       # 如果画面切换的话就中断循环
  41.       if $scene != self
  42.         break
  43.       end
  44.     end
  45.     # 准备过渡
  46.     Graphics.freeze
  47.     # 释放窗口
  48.     @help_window.dispose
  49.     @status_window.dispose
  50.     @skill_window.dispose
  51.     @target_window.dispose
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新画面
  55.   #--------------------------------------------------------------------------
  56.   def update
  57.     # 刷新窗口
  58.     @help_window.update
  59.     @status_window.update
  60.     @skill_window.update
  61.     @target_window.update
  62.     # 特技窗口被激活的情况下: 调用 update_skill
  63.     if @skill_window.active
  64.       update_skill
  65.       return
  66.     end
  67.     # 目标窗口被激活的情况下: 调用 update_target
  68.     if @target_window.active
  69.       update_target
  70.       return
  71.     end
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 刷新画面 (特技窗口被激活的情况下)
  75.   #--------------------------------------------------------------------------
  76.   def update_skill
  77.     # 按下 B 键的情况下
  78.     if Input.trigger?(Input::B)
  79.       # 演奏取消 SE
  80.       $game_system.se_play($data_system.cancel_se)
  81.       # 切换到菜单画面
  82.       $scene = Scene_Menu.new(1)
  83.       return
  84.     end
  85.     # 按下 C 键的情况下
  86.     if Input.trigger?(Input::C)
  87.       # 获取特技窗口现在选择的特技的数据
  88.       @skill = @skill_window.skill
  89.       # 不能使用的情况下
  90.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  91.         # 演奏冻结 SE
  92.         $game_system.se_play($data_system.buzzer_se)
  93.         return
  94.       end
  95.       # 演奏确定 SE
  96.       $game_system.se_play($data_system.decision_se)
  97.       # 效果范围是我方的情况下
  98.       if @skill.scope >= 3
  99.         # 激活目标窗口
  100.         @skill_window.active = false
  101.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  102.         @target_window.visible = true
  103.         @target_window.active = true
  104.         # 设置效果范围 (单体/全体) 的对应光标位置
  105.         if @skill.scope == 4 || @skill.scope == 6
  106.           @target_window.index = -1
  107.         elsif @skill.scope == 7
  108.           @target_window.index = @actor_index - 10
  109.         else
  110.           @target_window.index = 0
  111.         end
  112.       # 效果在我方以外的情况下
  113.       else
  114.         # 公共事件 ID 有效的情况下
  115.         if @skill.common_event_id > 0
  116.           # 预约调用公共事件
  117.           $game_temp.common_event_id = @skill.common_event_id
  118.           # 演奏特技使用时的 SE
  119.           $game_system.se_play(@skill.menu_se)
  120.           # 消耗 SP
  121.           @actor.sp -= @skill.sp_cost
  122.           # 再生成各窗口的内容
  123.           @status_window.refresh
  124.           @skill_window.refresh
  125.           @target_window.refresh
  126.           # 切换到地图画面
  127.           $scene = Scene_Map.new
  128.           return
  129.         end
  130.       end
  131.       return
  132.     end
  133.     # 按下 R 键的情况下
  134.     if Input.trigger?(Input::R)
  135.       # 演奏光标 SE
  136.       $game_system.se_play($data_system.cursor_se)
  137.       # 移至下一位角色
  138.       @actor_index += 1
  139.       @actor_index %= $game_party.actors.size
  140.       # 切换到别的特技画面
  141.       $scene = Scene_Skill.new(@actor_index)
  142.       return
  143.     end
  144.     # 按下 L 键的情况下
  145.     if Input.trigger?(Input::L)
  146.       # 演奏光标 SE
  147.       $game_system.se_play($data_system.cursor_se)
  148.       # 移至上一位角色
  149.       @actor_index += $game_party.actors.size - 1
  150.       @actor_index %= $game_party.actors.size
  151.       # 切换到别的特技画面
  152.       $scene = Scene_Skill.new(@actor_index)
  153.       return
  154.     end
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 刷新画面 (目标窗口被激活的情况下)
  158.   #--------------------------------------------------------------------------
  159.   def update_target
  160.     # 按下 B 键的情况下
  161.     if Input.trigger?(Input::B)
  162.       # 演奏取消 SE
  163.       $game_system.se_play($data_system.cancel_se)
  164.       # 删除目标窗口
  165.       @skill_window.active = true
  166.       @target_window.visible = false
  167.       @target_window.active = false
  168.       return
  169.     end
  170.     # 按下 C 键的情况下
  171.     if Input.trigger?(Input::C)
  172.       # 因为 SP 不足而无法使用的情况下
  173.       unless @actor.skill_can_use?(@skill.id)
  174.         # 演奏冻结 SE
  175.         $game_system.se_play($data_system.buzzer_se)
  176.         return
  177.       end
  178.       # 目标是全体的情况下
  179.       if @target_window.index == -1
  180.         # 对同伴全体应用特技使用效果
  181.         used = false
  182.         for i in $game_party.actors
  183.           used |= i.skill_effect(@actor, @skill)
  184.         end
  185.       end
  186.       # 目标是使用者的情况下
  187.       if @target_window.index <= -2
  188.         # 对目标角色应用特技的使用效果
  189.         target = $game_party.actors[@target_window.index + 10]
  190.         used = target.skill_effect(@actor, @skill)
  191.       end
  192.       # 目标是单体的情况下
  193.       if @target_window.index >= 0
  194.         # 对目标角色应用特技的使用效果
  195.         target = $game_party.actors[@target_window.index]
  196.         used = target.skill_effect(@actor, @skill)
  197.       end
  198.       # 使用特技的情况下
  199.       if used
  200.         # 演奏特技使用时的 SE
  201.         $game_system.se_play(@skill.menu_se)
  202.         # 消耗 SP
  203.         @actor.sp -= @skill.sp_cost
  204.         # 再生成各窗口内容
  205.         @status_window.refresh
  206.         @skill_window.refresh
  207.         @target_window.refresh
  208.         # 全灭的情况下
  209.         if $game_party.all_dead?
  210.           # 切换到游戏结束画面
  211.           $scene = Scene_Gameover.new
  212.           return
  213.         end
  214.         # 公共事件 ID 有效的情况下
  215.         if @skill.common_event_id > 0
  216.           # 预约调用公共事件
  217.           $game_temp.common_event_id = @skill.common_event_id
  218.           # 切换到地图画面
  219.           $scene = Scene_Map.new
  220.           return
  221.         end
  222.       end
  223.       # 无法使用特技的情况下
  224.       unless used
  225.         # 演奏冻结 SE
  226.         $game_system.se_play($data_system.buzzer_se)
  227.       end
  228.       return
  229.     end
  230.   end
  231. end
复制代码


──1172936560于2012-2-10 10:12补充以上内容’’


‘‘

好了,最下面的框起来了


──1172936560于2012-2-10 10:12补充以上内容’’


‘‘

发特技说是帝40行出了问题,你说说你还想看什么脚本 我都发过来


──1172936560于2012-2-10 10:13补充以上内容’’


‘‘

[attachimg]98468[/attachimg]


──1172936560于2012-2-10 10:15补充以上内容’’


‘‘
  1. #==============================================================================
  2. # ■ Window_Skill
  3. #------------------------------------------------------------------------------
  4. #  特技画面、战斗画面、显示可以使用的特技浏览的窗口。
  5. #==============================================================================

  6. class Window_Skill < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor : 角色
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor)
  12.     super(0, 128, 640, 352)
  13.     @actor = actor
  14.     @column_max = 2
  15.     refresh
  16.     self.index = 0
  17.     # 战斗中的情况下将窗口移至中央并将其半透明化
  18.     if $game_temp.in_battle
  19.       self.y = 64
  20.       self.height = 256
  21.       self.back_opacity = 160
  22.     end
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 获取特技
  26.   #--------------------------------------------------------------------------
  27.   def skill
  28.     return @data[self.index]
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 刷新
  32.   #--------------------------------------------------------------------------
  33.   def refresh
  34.     if self.contents != nil
  35.       self.contents.dispose
  36.       self.contents = nil
  37.     end
  38.     @data = []
  39.     for i in [email protected]
  40.       skill = $data_skills[@actor.skills[i]]
  41.       if skill != nil
  42.         @data.push(skill)
  43.       end
  44.     end
  45.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  46.     @item_max = @data.size
  47.     if @item_max > 0
  48.       self.contents = Bitmap.new(width - 32, row_max * 32)
  49.       for i in 0...@item_max
  50.         draw_item(i)
  51.       end
  52.     end
  53.   end
  54.   #--------------------------------------------------------------------------
  55.   # ● 描绘项目
  56.   #     index : 项目编号
  57.   #--------------------------------------------------------------------------
  58.   def draw_item(index)
  59.     skill = @data[index]
  60.     if @actor.skill_can_use?(skill.id)
  61.       self.contents.font.color = normal_color
  62.     else
  63.       self.contents.font.color = disabled_color
  64.     end
  65.     x = 4 + index % 2 * (288 + 32)
  66.     y = index / 2 * 32
  67.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  68.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  69.     bitmap = RPG::Cache.icon(skill.icon_name)
  70.     opacity = self.contents.font.color == normal_color ? 255 : 128
  71.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  72.     self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  73.     self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 刷新帮助文本
  77.   #--------------------------------------------------------------------------
  78.   def update_help
  79.     @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  80.   end
  81. end
复制代码


──1172936560于2012-2-10 10:51补充以上内容’’


‘‘
  1. #==============================================================================
  2. # ■ Scene_Skill
  3. #------------------------------------------------------------------------------
  4. #  处理特技画面的类。
  5. #==============================================================================

  6. class Scene_Skill
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     actor_index : 角色索引
  10.   #--------------------------------------------------------------------------
  11.   def initialize(actor_index = 0, equip_index = 0)
  12.     @actor_index = actor_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 主处理
  16.   #--------------------------------------------------------------------------
  17.   def main
  18.     # 获取角色
  19.     @actor = $game_party.actors[@actor_index]
  20.     # 生成帮助窗口、状态窗口、特技窗口
  21.     @help_window = Window_Help.new
  22.     @status_window = Window_SkillStatus.new(@actor)
  23.     @skill_window = Window_Skill.new(@actor)
  24.     # 关联帮助窗口
  25.     @skill_window.help_window = @help_window
  26.     # 生成目标窗口 (设置为不可见・不活动)
  27.     @target_window = Window_Target.new
  28.     @target_window.visible = false
  29.     @target_window.active = false
  30.     # 执行过渡
  31.     Graphics.transition
  32.     # 主循环
  33.     loop do
  34.       # 刷新游戏画面
  35.       Graphics.update
  36.       # 刷新输入信息
  37.       Input.update
  38.       # 刷新画面
  39.       update
  40.       # 如果画面切换的话就中断循环
  41.       if $scene != self
  42.         break
  43.       end
  44.     end
  45.     # 准备过渡
  46.     Graphics.freeze
  47.     # 释放窗口
  48.     @help_window.dispose
  49.     @status_window.dispose
  50.     @skill_window.dispose
  51.     @target_window.dispose
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 刷新画面
  55.   #--------------------------------------------------------------------------
  56.   def update
  57.     # 刷新窗口
  58.     @help_window.update
  59.     @status_window.update
  60.     @skill_window.update
  61.     @target_window.update
  62.     # 特技窗口被激活的情况下: 调用 update_skill
  63.     if @skill_window.active
  64.       update_skill
  65.       return
  66.     end
  67.     # 目标窗口被激活的情况下: 调用 update_target
  68.     if @target_window.active
  69.       update_target
  70.       return
  71.     end
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 刷新画面 (特技窗口被激活的情况下)
  75.   #--------------------------------------------------------------------------
  76.   def update_skill
  77.     # 按下 B 键的情况下
  78.     if Input.trigger?(Input::B)
  79.       # 演奏取消 SE
  80.       $game_system.se_play($data_system.cancel_se)
  81.       # 切换到菜单画面
  82.       $scene = Scene_Menu.new(1)
  83.       return
  84.     end
  85.     # 按下 C 键的情况下
  86.     if Input.trigger?(Input::C)
  87.       # 获取特技窗口现在选择的特技的数据
  88.       @skill = @skill_window.skill
  89.       # 不能使用的情况下
  90.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  91.         # 演奏冻结 SE
  92.         $game_system.se_play($data_system.buzzer_se)
  93.         return
  94.       end
  95.       # 演奏确定 SE
  96.       $game_system.se_play($data_system.decision_se)
  97.       # 效果范围是我方的情况下
  98.       if @skill.scope >= 3
  99.         # 激活目标窗口
  100.         @skill_window.active = false
  101.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  102.         @target_window.visible = true
  103.         @target_window.active = true
  104.         # 设置效果范围 (单体/全体) 的对应光标位置
  105.         if @skill.scope == 4 || @skill.scope == 6
  106.           @target_window.index = -1
  107.         elsif @skill.scope == 7
  108.           @target_window.index = @actor_index - 10
  109.         else
  110.           @target_window.index = 0
  111.         end
  112.       # 效果在我方以外的情况下
  113.       else
  114.         # 公共事件 ID 有效的情况下
  115.         if @skill.common_event_id > 0
  116.           # 预约调用公共事件
  117.           $game_temp.common_event_id = @skill.common_event_id
  118.           # 演奏特技使用时的 SE
  119.           $game_system.se_play(@skill.menu_se)
  120.           # 消耗 SP
  121.           @actor.sp -= @skill.sp_cost
  122.           # 再生成各窗口的内容
  123.           @status_window.refresh
  124.           @skill_window.refresh
  125.           @target_window.refresh
  126.           # 切换到地图画面
  127.           $scene = Scene_Map.new
  128.           return
  129.         end
  130.       end
  131.       return
  132.     end
  133.     # 按下 R 键的情况下
  134.     if Input.trigger?(Input::R)
  135.       # 演奏光标 SE
  136.       $game_system.se_play($data_system.cursor_se)
  137.       # 移至下一位角色
  138.       @actor_index += 1
  139.       @actor_index %= $game_party.actors.size
  140.       # 切换到别的特技画面
  141.       $scene = Scene_Skill.new(@actor_index)
  142.       return
  143.     end
  144.     # 按下 L 键的情况下
  145.     if Input.trigger?(Input::L)
  146.       # 演奏光标 SE
  147.       $game_system.se_play($data_system.cursor_se)
  148.       # 移至上一位角色
  149.       @actor_index += $game_party.actors.size - 1
  150.       @actor_index %= $game_party.actors.size
  151.       # 切换到别的特技画面
  152.       $scene = Scene_Skill.new(@actor_index)
  153.       return
  154.     end
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 刷新画面 (目标窗口被激活的情况下)
  158.   #--------------------------------------------------------------------------
  159.   def update_target
  160.     # 按下 B 键的情况下
  161.     if Input.trigger?(Input::B)
  162.       # 演奏取消 SE
  163.       $game_system.se_play($data_system.cancel_se)
  164.       # 删除目标窗口
  165.       @skill_window.active = true
  166.       @target_window.visible = false
  167.       @target_window.active = false
  168.       return
  169.     end
  170.     # 按下 C 键的情况下
  171.     if Input.trigger?(Input::C)
  172.       # 因为 SP 不足而无法使用的情况下
  173.       unless @actor.skill_can_use?(@skill.id)
  174.         # 演奏冻结 SE
  175.         $game_system.se_play($data_system.buzzer_se)
  176.         return
  177.       end
  178.       # 目标是全体的情况下
  179.       if @target_window.index == -1
  180.         # 对同伴全体应用特技使用效果
  181.         used = false
  182.         for i in $game_party.actors
  183.           used |= i.skill_effect(@actor, @skill)
  184.         end
  185.       end
  186.       # 目标是使用者的情况下
  187.       if @target_window.index <= -2
  188.         # 对目标角色应用特技的使用效果
  189.         target = $game_party.actors[@target_window.index + 10]
  190.         used = target.skill_effect(@actor, @skill)
  191.       end
  192.       # 目标是单体的情况下
  193.       if @target_window.index >= 0
  194.         # 对目标角色应用特技的使用效果
  195.         target = $game_party.actors[@target_window.index]
  196.         used = target.skill_effect(@actor, @skill)
  197.       end
  198.       # 使用特技的情况下
  199.       if used
  200.         # 演奏特技使用时的 SE
  201.         $game_system.se_play(@skill.menu_se)
  202.         # 消耗 SP
  203.         @actor.sp -= @skill.sp_cost
  204.         # 再生成各窗口内容
  205.         @status_window.refresh
  206.         @skill_window.refresh
  207.         @target_window.refresh
  208.         # 全灭的情况下
  209.         if $game_party.all_dead?
  210.           # 切换到游戏结束画面
  211.           $scene = Scene_Gameover.new
  212.           return
  213.         end
  214.         # 公共事件 ID 有效的情况下
  215.         if @skill.common_event_id > 0
  216.           # 预约调用公共事件
  217.           $game_temp.common_event_id = @skill.common_event_id
  218.           # 切换到地图画面
  219.           $scene = Scene_Map.new
  220.           return
  221.         end
  222.       end
  223.       # 无法使用特技的情况下
  224.       unless used
  225.         # 演奏冻结 SE
  226.         $game_system.se_play($data_system.buzzer_se)
  227.       end
  228.       return
  229.     end
  230.   end
  231. end
复制代码


──1172936560于2012-2-10 10:52补充以上内容’’




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