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

Project1

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

[已经解决] 扩展存档数脚本向上翻页时出错

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
35 小时
注册时间
2010-7-27
帖子
10
跳转到指定楼层
1
发表于 2011-12-4 21:51:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用了扩展存档数的脚本,在存档画面第一页的时候如果按上或左却会报错,这是报错内容

脚本 ‘scene-save’的71行发生NomethodErrer   
Undefined method ‘visible’ for nil:NilClass

求教各位高人应该怎么改?搜到以前有人问,却没有解决方式啊……
  1. #==============================================================================
  2. # 本脚本来自www.66rpg.com,转载和使用请保留此信息 #==============================================================================


  3. #==============================================================================
  4. # ■ Scene_File
  5. #------------------------------------------------------------------------------
  6. #  存档画面及读档画面的超级类。
  7. #   脚本优化: SailCat
  8. #==============================================================================

  9. class Scene_File
  10. #--------------------------------------------------------------------------
  11. # ● 常量 (存档页数)
  12. #--------------------------------------------------------------------------
  13. MaxPages = 25
  14. #--------------------------------------------------------------------------
  15. # ● 初始化对像
  16. #     help_text : 帮助窗口显示的字符串
  17. #--------------------------------------------------------------------------
  18. def initialize(help_text)
  19.    @help_text = help_text
  20.    @slots = MaxPages * 4
  21. end
  22. #--------------------------------------------------------------------------
  23. # ● 主处理
  24. #--------------------------------------------------------------------------
  25. def main
  26.    # 生成帮助窗口
  27.    @help_window = Window_Help.new
  28.    @help_window.set_text(@help_text)
  29.    @file_index = $game_temp.last_file_index
  30.    # 生成存档文件窗口
  31.    @savefile_windows = []
  32.    # 选择最后操作的文件
  33.    for i in @file_index / 4 * 4..@file_index / 4 * 4 + 3
  34.      load_window(i)
  35.      @savefile_windows[i].visible = true
  36.    end
  37.    @savefile_windows[@file_index].selected = true
  38.    # 执行过渡
  39.    Graphics.transition
  40.    # 主循环
  41.    loop do
  42.      # 刷新游戏画面
  43.      Graphics.update
  44.      # 刷新输入信息
  45.      Input.update
  46.      # 刷新画面
  47.      update
  48.      # 如果画面被切换的话就中断循环
  49.      if $scene != self
  50.        break
  51.      end
  52.    end
  53.    # 准备过渡
  54.    Graphics.freeze
  55.    # 释放窗口
  56.    @help_window.dispose
  57.    for i in @savefile_windows
  58.      i.dispose
  59.    end
  60. end
  61. #--------------------------------------------------------------------------
  62. # ● 刷新画面
  63. #--------------------------------------------------------------------------
  64. def update
  65.    # 刷新窗口
  66.    @help_window.update
  67.    for i in @savefile_windows
  68.      i.update if i.visible
  69.    end
  70.    # 按下 C 键的情况下
  71.    if Input.trigger?(Input::C)
  72.      # 调用过程 on_decision (定义继承目标)
  73.      on_decision(make_filename(@file_index))
  74.      $game_temp.last_file_index = @file_index
  75.      return
  76.    end
  77.    # 按下 B 键的情况下
  78.    if Input.trigger?(Input::B)
  79.      # 调用过程 on_cancel (定义继承目标)
  80.      on_cancel
  81.      return
  82.    end
  83.    # 按下方向键下的情况下
  84.    if Input.repeat?(Input::DOWN)
  85.      # 演奏光标 SE
  86.      $game_system.se_play($data_system.cursor_se)
  87.      # 光标向下移动
  88.      @savefile_windows[@file_index].selected = false
  89.      @file_index = (@file_index + 1) % @slots
  90.      # 翻到下一页的情况下
  91.      if @file_index % 4 == 0
  92.        for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
  93.          @savefile_windows[(index + @slots - 4) % @slots].visible = false
  94.          load_window(index)
  95.          @savefile_windows[index].visible = true
  96.        end
  97.      end
  98.      @savefile_windows[@file_index].selected = true
  99.      return
  100.    end
  101.    # 按下方向键上的情况下
  102.    if Input.repeat?(Input::UP)
  103.      # 演奏光标 SE
  104.      $game_system.se_play($data_system.cursor_se)
  105.      # 光标向上移动
  106.      @savefile_windows[@file_index].selected = false
  107.      @file_index = (@file_index + @slots - 1) % @slots
  108.      # 翻到上一页的情况下
  109.      if @file_index % 4 == 3
  110.        for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
  111.          @savefile_windows[(index + 4) % @slots].visible = false
  112.          load_window(index)
  113.          @savefile_windows[index].visible = true
  114.        end
  115.      end
  116.      @savefile_windows[@file_index].selected = true
  117.      return
  118.    end
  119.    # 按下方向键左或者 L 的情况下
  120.    if Input.repeat?(Input::LEFT) or Input.trigger?(Input::L)
  121.      # 演奏光标 SE
  122.      $game_system.se_play($data_system.cursor_se)
  123.      # 前翻一页
  124.      @savefile_windows[@file_index].selected = false
  125.      @file_index = (@file_index + @slots - 4) % @slots
  126.      for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
  127.        @savefile_windows[(index + 4) % @slots].visible = false
  128.        load_window(index)
  129.        @savefile_windows[index].visible = true
  130.      end
  131.      @savefile_windows[@file_index].selected = true
  132.      return
  133.    end
  134.    # 按下方向键右或者 R 的情况下
  135.    if Input.repeat?(Input::RIGHT) or Input.trigger?(Input::R)
  136.      # 演奏光标 SE
  137.      $game_system.se_play($data_system.cursor_se)
  138.      # 前翻一页
  139.      @savefile_windows[@file_index].selected = false
  140.      @file_index = (@file_index + 4) % @slots
  141.      for index in @file_index / 4 * 4..@file_index / 4 * 4 + 3
  142.        @savefile_windows[(index + @slots - 4) % @slots].visible = false
  143.        load_window(index)
  144.        @savefile_windows[index].visible = true
  145.      end
  146.      @savefile_windows[@file_index].selected = true
  147.      return
  148.    end
  149. end
  150. #--------------------------------------------------------------------------
  151. # ● 生成文件名
  152. #     file_index : 文件名的索引 (0~n)
  153. #--------------------------------------------------------------------------
  154. def make_filename(file_index)
  155.    return "Save#{file_index + 1}.rxdata"
  156. end
  157. #--------------------------------------------------------------------------
  158. # ● 载入当前页存档
  159. #     避免因存档位过多造成的卡壳现象
  160. #--------------------------------------------------------------------------
  161. def load_window(i)
  162.    if @savefile_windows[i] != nil
  163.      return
  164.    else
  165.      @savefile_windows[i] = Window_SaveFile.new(i, make_filename(i))
  166.    end
  167. end
  168. end


  169. #==============================================================================
  170. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  171. #==============================================================================
复制代码

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
2
发表于 2011-12-4 22:26:32 | 只看该作者
本帖最后由 小白玩家 于 2011-12-4 22:26 编辑
  1. # 刷新窗口

  2.    @help_window.update
复制代码
下面的三行删除
  1. for i in @savefile_windows
  2. i.update if i.visible
  3. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
312 小时
注册时间
2011-6-27
帖子
1316
3
发表于 2011-12-4 22:40:01 | 只看该作者
本帖最后由 钢铁列兵 于 2011-12-4 22:40 编辑

  关键是你还使用了哪些脚本,是否有冲突?实在不行可以用我这个,可以自定义个数,且与其他脚本冲突较少。第12行改个数
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================



  4. # --------------------------------------------------------------------
  5. # 本脚本来自www.66rpg.com,转载自www.phylomortis.com,转载请保留此信息
  6. # --------------------------------------------------------------------
  7. class Scene_File
  8.   #——最大存档数量,一般我认为最多50足够了,20比较合适
  9.   SAVEFILE_MAX = 20
  10.   # -------------------
  11.   def initialize(help_text)
  12.     @help_text = help_text
  13.   end
  14.   # -------------------
  15.   def main
  16.     @help_window = Window_Help.new
  17.     @help_window.set_text(@help_text)
  18.     @savefile_windows = []
  19.     @cursor_displace = 0
  20.     for i in 0..3
  21.       @savefile_windows.push(Window_SaveFile.new(i, make_filename(i), i))
  22.     end
  23.     @file_index = 0
  24.     @savefile_windows[@file_index].selected = true
  25.     Graphics.transition
  26.     loop do
  27.       Graphics.update
  28.       Input.update
  29.       update
  30.       if $scene != self
  31.         break
  32.       end
  33.     end
  34.     Graphics.freeze
  35.     @help_window.dispose
  36.     for i in @savefile_windows
  37.       i.dispose
  38.     end
  39.   end
  40.   # -------------------
  41.   def update
  42.     @help_window.update
  43.     for i in @savefile_windows
  44.       i.update
  45.     end
  46.     if Input.trigger?(Input::C)
  47.       on_decision(make_filename(@file_index))
  48.       $game_temp.last_file_index = @file_index
  49.       return
  50.     end
  51.     if Input.trigger?(Input::B)
  52.       on_cancel
  53.       return
  54.     end
  55.     if Input.repeat?(Input::DOWN)
  56.       if Input.trigger?(Input::DOWN) or @file_index < SAVEFILE_MAX - 1
  57.         if @file_index == SAVEFILE_MAX - 1
  58.           $game_system.se_play($data_system.buzzer_se)
  59.           return
  60.         end
  61.         @cursor_displace += 1
  62.         if @cursor_displace == 4
  63.           @cursor_displace = 3
  64.           for i in @savefile_windows
  65.             i.dispose
  66.           end
  67.           @savefile_windows = []
  68.           for i in 0..3
  69.             f = i - 2 + @file_index
  70.             name = make_filename(f)
  71.             @savefile_windows.push(Window_SaveFile.new(f, name, i))
  72.             @savefile_windows[i].selected = false
  73.           end
  74.         end
  75.         $game_system.se_play($data_system.cursor_se)
  76.         @file_index = (@file_index + 1)
  77.         if @file_index == SAVEFILE_MAX
  78.           @file_index = SAVEFILE_MAX - 1
  79.         end
  80.         for i in 0..3
  81.           @savefile_windows[i].selected = false
  82.         end
  83.         @savefile_windows[@cursor_displace].selected = true
  84.         return
  85.       end
  86.     end
  87.     if Input.repeat?(Input::UP)
  88.       if Input.trigger?(Input::UP) or @file_index > 0
  89.         if @file_index == 0
  90.           $game_system.se_play($data_system.buzzer_se)
  91.           return
  92.         end
  93.         @cursor_displace -= 1
  94.         if @cursor_displace == -1
  95.           @cursor_displace = 0
  96.           for i in @savefile_windows
  97.             i.dispose
  98.           end
  99.           @savefile_windows = []
  100.           for i in 0..3
  101.             f = i - 1 + @file_index
  102.             name = make_filename(f)
  103.             @savefile_windows.push(Window_SaveFile.new(f, name, i))
  104.             @savefile_windows[i].selected = false
  105.           end
  106.         end
  107.         $game_system.se_play($data_system.cursor_se)
  108.         @file_index = (@file_index - 1)
  109.         if @file_index == -1
  110.           @file_index = 0
  111.         end
  112.         for i in 0..3
  113.           @savefile_windows[i].selected = false
  114.         end
  115.         @savefile_windows[@cursor_displace].selected = true
  116.         return
  117.       end
  118.     end
  119.   end
  120.   # -------------------
  121.   def make_filename(file_index)
  122.     return "Save/Save#{file_index + 1}.rxdata"
  123.   end
  124.   # -------------------
  125. end




  126. class Window_SaveFile < Window_Base
  127.   # -------------------
  128.   def initialize(file_index, filename, position)
  129.     y = 64 + position * 104
  130.     super(0, y, 640, 110)
  131.      self.windowskin = RPG::Cache.windowskin("skin")
  132.     self.contents = Bitmap.new(width - 32, height - 32)
  133.     @file_index = file_index
  134.     @filename = "Save/Save#{@file_index + 1}.rxdata"
  135.     @time_stamp = Time.at(0)
  136.     @file_exist = FileTest.exist?(@filename)
  137.     if @file_exist
  138.       file = File.open(@filename, "r")
  139.       @time_stamp = file.mtime
  140.       @characters = Marshal.load(file)
  141.       @frame_count = Marshal.load(file)
  142.       @game_system = Marshal.load(file)
  143.       @game_switches = Marshal.load(file)
  144.       @game_variables = Marshal.load(file)
  145.       @total_sec = @frame_count / Graphics.frame_rate
  146.       file.close
  147.     end
  148.     refresh
  149.     @selected = false
  150.   end
  151. end


  152. #==============================================================================
  153. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  154. #==============================================================================
复制代码

评分

参与人数 1星屑 +200 收起 理由
步兵中尉 + 200

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
375
在线时间
6 小时
注册时间
2012-5-13
帖子
2
4
发表于 2012-5-15 22:31:33 | 只看该作者
将60-63行换成
@help_window.dispose
    for i in 0..20
      if @savefile_windows[i] != nil
      @savefile_windows[i].dispose
      end
    end
就行了 不知道现在对你有用不,我刚试出来的
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 22:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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