本帖最后由 余音·魔眼 于 2018-11-17 20:07 编辑  
 
楼主能改出来已经很不错了,不过不知道楼主有没有注意到这一点,跳转到读档界面后按x键就会直接退出窗口。那是因为本身Scene_Load的父类Scene_File中含有return_scene方法,它在#--------------------------------------------------------------------------   # ● 存档文件“取消”   #--------------------------------------------------------------------------   def on_savefile_cancel     Sound.play_cancel     return_scene   end 
 
 #--------------------------------------------------------------------------  
  # ● 存档文件“取消”  
  #--------------------------------------------------------------------------  
  def on_savefile_cancel  
    Sound.play_cancel  
    return_scene  
  end  
 
  (也就是Scene_File的143-149行的位置) 
这是因为楼主修改后依然调用的是goto,也就是SceneManager(这是个模块)中的goto方法,在SceneManager的49-54行位置可以找到 
#--------------------------------------------------------------------------   # ● 直接切换某个场景(无过渡)   #--------------------------------------------------------------------------   def self.goto(scene_class)     #这里没有存储场景     @scene = scene_class.new   end 
 
 #--------------------------------------------------------------------------  
  # ● 直接切换某个场景(无过渡)  
  #--------------------------------------------------------------------------  
  def self.goto(scene_class)  
    #这里没有存储场景  
    @scene = scene_class.new  
  end  
 
  
它与55-61行的call方法有什么区别呢,再来看一下call方法 
 #--------------------------------------------------------------------------   # ● 切换   #--------------------------------------------------------------------------   def self.call(scene_class)     @stack.push(@scene) #这里的@stack存储的是之前的场景,存储之后,在当前场景中按x键就可以返回先前@stack最后存储的场景了。     @scene = scene_class.new   end 
 
 #--------------------------------------------------------------------------  
  # ● 切换  
  #--------------------------------------------------------------------------  
  def self.call(scene_class)  
    @stack.push(@scene) #这里的@stack存储的是之前的场景,存储之后,在当前场景中按x键就可以返回先前@stack最后存储的场景了。  
    @scene = scene_class.new  
  end  
 
  
我们再来看一下return_scene方法, return_scene定义在所有Scene 类(场景类)的父类中,在108-113行位置: 
#--------------------------------------------------------------------------   # ● 返回前一个场景   #--------------------------------------------------------------------------   def return_scene     SceneManager.return   end 
 
 #--------------------------------------------------------------------------  
  # ● 返回前一个场景  
  #--------------------------------------------------------------------------  
  def return_scene  
    SceneManager.return  
  end  
 
  
调用的是SceneManager的.return方法,在SceneManager的62-67行位置 
#--------------------------------------------------------------------------   # ● 返回到上一个场景   #--------------------------------------------------------------------------   def self.return     @scene = @stack.pop   end 
 
 #--------------------------------------------------------------------------  
  # ● 返回到上一个场景  
  #--------------------------------------------------------------------------  
  def self.return  
    @scene = @stack.pop  
  end  
 
  
这里意思是将@stack存储的最后一个场景的类赋给当前场景,并删除之前存储的最后一个场景。好了我们知道goto方法中并没有存储之前的场景,所以这时@stack就为空数组,空数组本身就没任何元素,所以就不能删元素,所以就为nil了(这里不懂的话帮助文档Array当中都有),@stack.pop为nil,所以这时@scene = nil,@scene就为nil了,@scene为nil时就会自动退出游戏,不懂的话可以参考exit方法,也就是74-79行。 
#--------------------------------------------------------------------------   # ● 退出游戏   #--------------------------------------------------------------------------   def self.exit     @scene = nil   end 
 
 #--------------------------------------------------------------------------  
  # ● 退出游戏  
  #--------------------------------------------------------------------------  
  def self.exit  
    @scene = nil  
  end  
 
  
 
另外不介意在默认脚本中修改,应该以插件脚本的方式插入脚本库当中,以免修改错误还得从新工程复制重来,插件脚本可以这么写: 
module ReturnLoad #定义模块, ReturnLoad为模块的名字,取啥名都好,只要开头大写   SWI_ID = 10 #10号开关开启时返回读档界面,否则标题 end class Scene_GameoverLoad < Scene_Load #将Scene_GameoverLoad类继承Scene_Load类,这里用继承是因为直接在Scene_Load中修改会影响其他调用Scene_Load的地方,毕竟只有游戏结束时的读档界面不能返回 #前面我们找到了调用return_scene的地方,也就是on_savefile_cancel方法,所以将调用on_savefile_cancel的地方删除,重写update_savefile_selection方法(因为这是新建的类,所以重写也没事),将原来的  #def update_savefile_selection    #return on_savefile_ok     if Input.trigger?(:C)     #return on_savefile_cancel if Input.trigger?(:B)    #update_cursor   #end #改为:   def update_savefile_selection     return on_savefile_ok     if Input.trigger?(:C)     update_cursor   end #-- end class Scene_Gameover #引用Scene_Gameover类   alias return_load_goto_title goto_title,#重命名goto_title方法,将原先的goto_title名字改为return_load_goto_title   def goto_title     if $game_switches[ReturnLoad::SWI_ID] #如果开关[ReturnLoad模块的SWI_ID常量]开启时(方括号内为开关ID)       fadeout_all #淡出画面       SceneManager.goto(Scene_GameoverLoad) #直接切换到Scene_GameoverLoad场景(无过渡)(也就是不能返回上个场景的读档界面)     else #否则       return_load_goto_title #调用原先的goto_title方法,也就是现在的return_load_goto_title方法     end   end end 
 
 module ReturnLoad #定义模块, ReturnLoad为模块的名字,取啥名都好,只要开头大写  
  SWI_ID = 10 #10号开关开启时返回读档界面,否则标题  
end  
class Scene_GameoverLoad < Scene_Load #将Scene_GameoverLoad类继承Scene_Load类,这里用继承是因为直接在Scene_Load中修改会影响其他调用Scene_Load的地方,毕竟只有游戏结束时的读档界面不能返回  
#前面我们找到了调用return_scene的地方,也就是on_savefile_cancel方法,所以将调用on_savefile_cancel的地方删除,重写update_savefile_selection方法(因为这是新建的类,所以重写也没事),将原来的  
 #def update_savefile_selection  
   #return on_savefile_ok     if Input.trigger?(:C)  
    #return on_savefile_cancel if Input.trigger?(:B)  
   #update_cursor  
  #end  
#改为:  
  def update_savefile_selection  
    return on_savefile_ok     if Input.trigger?(:C)  
    update_cursor  
  end  
#--  
end  
class Scene_Gameover #引用Scene_Gameover类  
  alias return_load_goto_title goto_title,#重命名goto_title方法,将原先的goto_title名字改为return_load_goto_title  
  def goto_title  
    if $game_switches[ReturnLoad::SWI_ID] #如果开关[ReturnLoad模块的SWI_ID常量]开启时(方括号内为开关ID)  
      fadeout_all #淡出画面  
      SceneManager.goto(Scene_GameoverLoad) #直接切换到Scene_GameoverLoad场景(无过渡)(也就是不能返回上个场景的读档界面)  
    else #否则  
      return_load_goto_title #调用原先的goto_title方法,也就是现在的return_load_goto_title方法  
    end  
  end  
end  
 
  |