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

Project1

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

[已经解决] 装备栏脚本出错

[复制链接]

Lv2.观梦者

梦石
0
星屑
280
在线时间
18 小时
注册时间
2010-8-6
帖子
16
跳转到指定楼层
1
发表于 2010-12-25 09:26:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 liushu19930429 于 2010-12-25 11:50 编辑

应用了面粉大大的装备栏美化代码,结果测试时出现了以下错误(在打开装备栏时发生):
脚本‘Scene_Equip'的97行发生了ArgumentError
wrong number of arguments(3 of 7)
求解决办法。

以下引用改动出错代码原文:

找到Scene_Equip的110行,然后加入以下内容
     new_str = @actor.str
     new_dex = @actor.dex
     new_agi = @actor.agi
     new_int = @actor.int

再找到Window_EquipLeft,将其全部替换成如下内容
………………(如果解决问题需要请发帖通知我)


然后是出错的脚本(出错行红色加粗)#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  处理装备画面的类。
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor_index : 角色索引
  #     equip_index : 装备索引
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
    @equip_index = equip_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    @actor = $game_party.actors[@actor_index]
    # 生成窗口
    @help_window = Window_Help.new
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)
    # 关联帮助窗口
    @right_window.help_window = @help_window
    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window
    # 设置光标位置
    @right_window.index = @equip_index
    refresh
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话的就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @help_window.dispose
    @left_window.dispose
    @right_window.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    # 设置物品窗口的可视状态
    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)
    # 获取当前装备中的物品
    item1 = @right_window.item
    # 设置当前的物品窗口到 @item_window
    case @right_window.index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
    # 右窗口被激活的情况下
    if @right_window.active
    # 删除变更装备后的能力
      @left_window.set_new_parameters(nil, nil, nil)
    end
    # 物品窗口被激活的情况下
    if @item_window.active
      # 获取现在选中的物品
      item2 = @item_window.item
      # 变更装备
      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
      # 获取变更装备后的能力值
      new_atk = @actor.atk
      new_pdef = @actor.pdef
      new_mdef = @actor.mdef
      new_str = @actor.str
      new_dex = @actor.dex
      new_agi = @actor.agi
      new_int = @actor.int
      # 返回到装备
      @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
      @actor.hp = last_hp
      @actor.sp = last_sp
      # 描画左窗口
      @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @left_window.update
    @right_window.update
    @item_window.update
    refresh
    # 右侧窗口被激活的情况下: 调用 update_right
    if @right_window.active
      update_right
      return
    end
    # 物品窗口被激活的情况下: 调用 update_item
    if @item_window.active
      update_item
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (右侧窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_right
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(2)
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 固定装备的情况下
      if @actor.equip_fix?(@right_window.index)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 激活物品窗口
      @right_window.active = false
      @item_window.active = true
      @item_window.index = 0
      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_Equip.new(@actor_index, @right_window.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_Equip.new(@actor_index, @right_window.index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏装备 SE
      $game_system.se_play($data_system.equip_se)
      # 获取物品窗口现在选择的装备数据
      item = @item_window.item
      # 变更装备
      @actor.equip(@right_window.index, item == nil ? 0 : item.id)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      # 再生成右侧窗口、物品窗口的内容
      @right_window.refresh
      @item_window.refresh
      return
    end
  end
end

         self.contents.font.color = normal_color
         end
     end
     self.contents.draw_text(200, 96, 36, 32, @new_pdef.to_s, 2)
   end
   
   if @new_mdef != nil
     self.contents.font.color = system_color
     self.contents.draw_text(160, 128, 40, 32, "→", 1)
     if @new_mdef > @actor.mdef
     self.contents.font.color = text_color(3)
     else
         if @new_mdef < @actor.mdef
         self.contents.font.color = text_color(2)
         else
         self.contents.font.color = normal_color
         end
     end
     self.contents.draw_text(200, 128, 36, 32, @new_mdef.to_s, 2)
   end
   
   if @new_str != nil
     self.contents.font.color = system_color
     self.contents.draw_text(160, 160, 40, 32, "→", 1)
     if @new_str > @actor.str
     self.contents.font.color = text_color(3)
     else
         if @new_str < @actor.str
         self.contents.font.color = text_color(2)
         else
         self.contents.font.color = normal_color
         end
     end
     self.contents.draw_text(200, 160, 36, 32, @new_str.to_s, 2)
   end
   
   if @new_dex!= nil
     self.contents.font.color = system_color
     self.contents.draw_text(160, 192, 40, 32, "→", 1)
     if @new_dex > @actor.dex
     self.contents.font.color = text_color(3)
     else
         if @new_dex < @actor.dex
         self.contents.font.color = text_color(2)
         else
         self.contents.font.color = normal_color
         end
     end
     self.contents.draw_text(200, 192, 36, 32, @new_dex.to_s, 2)
   end
   
   if @new_agi != nil
     self.contents.font.color = system_color
     self.contents.draw_text(160, 224, 40, 32, "→", 1)
     if @new_agi > @actor.agi
     self.contents.font.color = text_color(3)
     else
         if @new_agi < @actor.agi
         self.contents.font.color = text_color(2)
         else
         self.contents.font.color = normal_color
         end
     end
     self.contents.draw_text(200, 224, 36, 32, @new_agi.to_s, 2)
   end
   
   if @new_int != nil
     self.contents.font.color = system_color
     self.contents.draw_text(160, 256, 40, 32, "→", 1)
     if @new_int > @actor.int
     self.contents.font.color = text_color(3)
     else
         if @new_int < @actor.int
         self.contents.font.color = text_color(2)
         else
         self.contents.font.color = normal_color
         end
     end
     self.contents.draw_text(200, 256, 36, 32, @new_int.to_s, 2)
   end
end
#--------------------------------------------------------------------------
# ● 变更装备后的能力值设置
#     new_atk  : 变更装备后的攻击力
#     new_pdef : 变更装备后的物理防御
#     new_mdef : 变更装备后的魔法防御
#--------------------------------------------------------------------------
def set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex, new_agi, new_int)
   if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef or @new_str != new_str or @new_dex != new_dex or @new_agi != new_agi or @new_int != new_int
     @new_atk = new_atk
     @new_pdef = new_pdef
     @new_mdef = new_mdef
     # 为其他属性追加参数传回
     @new_str = new_str
     @new_dex = new_dex
     @new_agi = new_agi
     @new_int = new_int
     refresh
   end
end
end

0001.JPG (10.36 KB, 下载次数: 4)

错误01

错误01

Lv1.梦旅人

看不到我

梦石
0
星屑
50
在线时间
229 小时
注册时间
2005-11-6
帖子
1741

贵宾

2
发表于 2010-12-25 10:41:03 | 只看该作者
提示是参数不足,需要7个,可是脚本中只输入了3个,不是不是还用了其他脚本?比如装备扩种之类的,试着把红色的那段改成@left_window.set_new_parameters(nil, nil, nil,nil,nil,nil,nil)试试……

评分

参与人数 1星屑 +266 收起 理由
fux2 + 266 正解

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1743
在线时间
485 小时
注册时间
2006-1-7
帖子
1073
3
发表于 2010-12-25 10:44:34 | 只看该作者
本帖最后由 白鬼 于 2010-12-25 10:45 编辑
  1. def set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex, new_agi, new_int)
复制代码
你在脚本末尾定义了 set_new_parameters,这里面有7个变量
而你在执行的时候只给三个变量赋值nil,你试试把
  1. @left_window.set_new_parameters(nil, nil, nil)
复制代码
里面的nil添加到7个看
如果不行的话再PM我,到时候重新定义Window_EquipLeft吧
还有,以后发脚本记得用 插入脚本 功能
否则就有可能出现论坛表情

评分

参与人数 1星屑 +332 收起 理由
fux2 + 332 认可答案

查看全部评分

初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
18 小时
注册时间
2010-8-6
帖子
16
4
 楼主| 发表于 2010-12-25 11:50:13 | 只看该作者
解决,谢谢两位大大
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 01:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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