Project1

标题: 读取存档问题 [打印本页]

作者: a584158884    时间: 2009-10-24 07:47
标题: 读取存档问题
怎么弄够使读取存档的时候  按返回回到游戏中
作者: secondsen    时间: 2009-10-24 09:00
脚本 Scene_Load中

$scene = Scene_Title.new  改成 $scene = Scene_Map.new
作者: 悠悠炸弹    时间: 2009-10-24 09:21
本帖最后由 悠悠炸弹 于 2009-10-24 09:28 编辑

LS这样弄法就会出现问题,不信?在标题读取点取消看看~
这里有一个外挂脚本,不过它从游戏返回标题时再读取也会有上边的问题~
要怎么弄掉?
http://rpg.blue/viewthread.php?tid=128549
仅供参考= =
  1. #○☆====================================================☆○
  2. # 本脚本来在www.66rpg.com,使用和转载请保留此信息
  3. #○☆====================================================☆○

  4. #○☆====================================================☆○
  5.   #メニューからロードを呼び出す際に使うグローバル変数にnilを代入
  6.   $menu_load = nil
  7. #○☆====================================================☆○
  8. #==============================================================================
  9. # ■ Scene_Menu
  10. #------------------------------------------------------------------------------
  11. #  メニュー画面の処理を行うクラスです。
  12. #==============================================================================

  13. class Scene_Menu
  14.   #--------------------------------------------------------------------------
  15.   # ● オブジェクト初期化
  16.   #     menu_index : コマンドのカーソル初期位置
  17.   #--------------------------------------------------------------------------
  18.   def initialize(menu_index = 0)
  19.     @menu_index = menu_index
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● メイン処理
  23.   #--------------------------------------------------------------------------
  24.   def main
  25. #○☆====================================================☆○
  26.     # コマンドウィンドウを作成
  27.     s1 = $data_system.words.item
  28.     s2 = $data_system.words.skill
  29.     s3 = $data_system.words.equip
  30.     s4 = "状态"
  31.     s5 = "储存进度"
  32.     s6 = "读取进度"
  33.     s7 = "退出游戏"
  34.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
  35.     @command_window.height -= 32
  36. #○☆====================================================☆○
  37.     @command_window.index = @menu_index
  38.     # パーティ人数が 0 人の場合
  39.     if $game_party.actors.size == 0
  40.       # アイテム、スキル、装備、ステータスを無効化
  41.       @command_window.disable_item(0)
  42.       @command_window.disable_item(1)
  43.       @command_window.disable_item(2)
  44.       @command_window.disable_item(3)
  45.     end
  46.     # セーブ禁止の場合
  47.     if $game_system.save_disabled
  48.       # セーブを無効にする
  49.       @command_window.disable_item(4)
  50.     end
  51. #○☆====================================================☆○
  52.     # ロード有効判定
  53.     # セーブファイルがひとつでも存在するかどうかを調べる
  54.     @continue_enabled = false
  55.     for i in 0..3
  56.       if FileTest.exist?("Save#{i+1}.rxdata")
  57.         @continue_enabled = true
  58.       end
  59.     end
  60.     if @continue_enabled
  61.     else
  62.       @command_window.disable_item(5)
  63.     end
  64. #○☆====================================================☆○
  65.     # プレイ時間ウィンドウを作成
  66.     @playtime_window = Window_PlayTime.new
  67.     @playtime_window.x = 0
  68.     @playtime_window.y = 224
  69.     # 歩数ウィンドウを作成
  70.     @steps_window = Window_Steps.new
  71.     @steps_window.x = 0
  72.     @steps_window.y = 320
  73.     # ゴールドウィンドウを作成
  74.     @gold_window = Window_Gold.new
  75.     @gold_window.x = 0
  76.     @gold_window.y = 416
  77.     # ステータスウィンドウを作成
  78.     @status_window = Window_MenuStatus.new
  79.     @status_window.x = 160
  80.     @status_window.y = 0
  81.     # トランジション実行
  82.     Graphics.transition
  83.     # メインループ
  84.     loop do
  85.       # ゲーム画面を更新
  86.       Graphics.update
  87.       # 入力情報を更新
  88.       Input.update
  89.       # フレーム更新
  90.       update
  91.       # 画面が切り替わったらループを中断
  92.       if $scene != self
  93.         break
  94.       end
  95.     end
  96.     # トランジション準備
  97.     Graphics.freeze
  98.     # ウィンドウを解放
  99.     @command_window.dispose
  100.     @playtime_window.dispose
  101.     @steps_window.dispose
  102.     @gold_window.dispose
  103.     @status_window.dispose
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
  107.   #--------------------------------------------------------------------------
  108.   def update_command
  109.     # B ボタンが押された場合
  110.     if Input.trigger?(Input::B)
  111.       # キャンセル SE を演奏
  112.       $game_system.se_play($data_system.cancel_se)
  113.       # マップ画面に切り替え
  114.       $scene = Scene_Map.new
  115.       return
  116.     end
  117.     # C ボタンが押された場合
  118.     if Input.trigger?(Input::C)
  119.       # パーティ人数が 0 人で、セーブ、ゲーム終了以外のコマンドの場合
  120.       if $game_party.actors.size == 0 and @command_window.index < 4
  121.         # ブザー SE を演奏
  122.         $game_system.se_play($data_system.buzzer_se)
  123.         return
  124.       end
  125.       # コマンドウィンドウのカーソル位置で分岐
  126.       case @command_window.index
  127.       when 0  # アイテム
  128.         # 決定  SE を演奏
  129.         $game_system.se_play($data_system.decision_se)
  130.         # アイテム画面に切り替え
  131.         $scene = Scene_Item.new
  132.       when 1  # スキル
  133.         # 決定 SE を演奏
  134.         $game_system.se_play($data_system.decision_se)
  135.         # ステータスウィンドウをアクティブにする
  136.         @command_window.active = false
  137.         @status_window.active = true
  138.         @status_window.index = 0
  139.       when 2  # 装備
  140.         # 決定 SE を演奏
  141.         $game_system.se_play($data_system.decision_se)
  142.         # ステータスウィンドウをアクティブにする
  143.         @command_window.active = false
  144.         @status_window.active = true
  145.         @status_window.index = 0
  146.       when 3  # ステータス
  147.         # 決定 SE を演奏
  148.         $game_system.se_play($data_system.decision_se)
  149.         # ステータスウィンドウをアクティブにする
  150.         @command_window.active = false
  151.         @status_window.active = true
  152.         @status_window.index = 0
  153.       when 4  # セーブ
  154.         # セーブ禁止の場合
  155.         if $game_system.save_disabled
  156.           # ブザー SE を演奏
  157.           $game_system.se_play($data_system.buzzer_se)
  158.           return
  159.         end
  160.         # 決定 SE を演奏
  161.         $game_system.se_play($data_system.decision_se)
  162.         # セーブ画面に切り替え
  163.         $scene = Scene_Save.new
  164. #○☆====================================================☆○
  165.       when 5  # ロード
  166.     # ロード有効判定
  167.     # セーブファイルがひとつでも存在するかどうかを調べる
  168.     @continue_enabled = false
  169.     for i in 0..3
  170.       if FileTest.exist?("Save#{i+1}.rxdata")
  171.         @continue_enabled = true
  172.       end
  173.     end
  174.     if @continue_enabled
  175.       # 決定 SE を演奏
  176.       $game_system.se_play($data_system.decision_se)
  177.       # グローバル変数に適当な語句を代入
  178.       $menu_load = "marimo"
  179.       # ロード画面に切り替え
  180.       $scene = Scene_Load.new
  181.     else
  182.       # ブザー SE を演奏
  183.       $game_system.se_play($data_system.buzzer_se)
  184.     end
  185.       when 6  # ゲーム終了
  186.         # 決定 SE を演奏
  187.         $game_system.se_play($data_system.decision_se)
  188.         # ゲーム終了画面に切り替え
  189.         $scene = Scene_End.new
  190.       end
  191. #○☆====================================================☆○
  192.       return
  193.     end
  194.   end
  195. end

  196. #==============================================================================
  197. # ■ Scene_Load
  198. #------------------------------------------------------------------------------
  199. #  ロード画面の処理を行うクラスです。
  200. #==============================================================================

  201. class Scene_Load < Scene_File
  202.   #--------------------------------------------------------------------------
  203.   # ● 取消时的处理
  204.   #--------------------------------------------------------------------------
  205.   def on_cancel
  206.     # キャンセル SE を演奏
  207.     $game_system.se_play($data_system.cancel_se)
  208. #○☆====================================================☆○
  209.     if $menu_load == nil
  210.     # タイトル画面に切り替え
  211.     $scene = Scene_Title.new
  212.   else
  213.     # メニュー画面に切り替え
  214.     $scene = Scene_Menu.new(5)
  215.     end
  216. #○☆====================================================☆○
  217.   end
  218. end

  219. #==============================================================================
  220. # ■ Scene_End
  221. #------------------------------------------------------------------------------
  222. #  ゲーム終了画面の処理を行うクラスです。
  223. #==============================================================================

  224. class Scene_End
  225.   #--------------------------------------------------------------------------
  226.   # ● フレーム更新
  227.   #--------------------------------------------------------------------------
  228.   def update
  229.     # コマンドウィンドウを更新
  230.     @command_window.update
  231.     # B ボタンが押された場合
  232.     if Input.trigger?(Input::B)
  233.       # キャンセル SE を演奏
  234.       $game_system.se_play($data_system.cancel_se)
  235. #○☆====================================================☆○
  236.       # メニュー画面に切り替え
  237.       $scene = Scene_Menu.new(6)
  238. #○☆====================================================☆○
  239.       return
  240.     end
  241.     # C ボタンが押された場合
  242.     if Input.trigger?(Input::C)
  243.       # コマンドウィンドウのカーソル位置で分岐
  244.       case @command_window.index
  245.       when 0  # シャットダウン
  246.         command_shutdown
  247.       when 1  # やめる
  248.         command_cancel
  249. #      when 0  # タイトルへ
  250. #        command_to_title
  251. #      when 1  # シャットダウン
  252. #        command_shutdown
  253. #      when 2  # やめる
  254. #        command_cancel
  255.       end
  256.       return
  257.     end
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● コマンド [やめる] 選択時の処理
  261.   #--------------------------------------------------------------------------
  262.   def command_cancel
  263.     # 決定 SE を演奏
  264.     $game_system.se_play($data_system.decision_se)
  265. #○☆====================================================☆○
  266.     # メニュー画面に切り替え
  267.     $scene = Scene_Menu.new(6)
  268. #○☆====================================================☆○
  269.   end
  270. end

复制代码

作者: 独行侠    时间: 2009-10-24 13:03
这种功能除了做自制菜单意外没有别的用处吧………………是不是可以定义两个Scene_Load,比如一个是Scene_Load1,一个是Scene_Load2,一个在标题读取,一个在菜单读取。不过具体没试过
作者: 悠悠炸弹    时间: 2009-10-24 13:08
其实已经有人做出来了= =
<梦大陆物语~密斯利尔>里早就弄出LS所说的东西了..
作者: 上帝的眼睛    时间: 2009-10-24 22:30
  1. #==============================================================================
  2. # ■ Scene_Load
  3. #------------------------------------------------------------------------------
  4. #  处理读档画面的类。
  5. #==============================================================================

  6. class Scene_Load_M < Scene_File
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     # 再生成临时对像
  12.     $game_temp = Game_Temp.new
  13.     # 选择存档时间最新的文件
  14.     $game_temp.last_file_index = 0
  15.     latest_time = Time.at(0)
  16.     for i in 0..3
  17.       filename = make_filename(i)
  18.       if FileTest.exist?(filename)
  19.         file = File.open(filename, "r")
  20.         if file.mtime > latest_time
  21.           latest_time = file.mtime
  22.           $game_temp.last_file_index = i
  23.         end
  24.         file.close
  25.       end
  26.     end
  27.     super("要载入哪个文件?")
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 确定时的处理
  31.   #--------------------------------------------------------------------------
  32.   def on_decision(filename)
  33.     # 文件不存在的情况下
  34.     unless FileTest.exist?(filename)
  35.       # 演奏冻结 SE
  36.       $game_system.se_play($data_system.buzzer_se)
  37.       return
  38.     end
  39.     # 演奏读档 SE
  40.     $game_system.se_play($data_system.load_se)
  41.     # 写入存档数据
  42.     file = File.open(filename, "rb")
  43.     read_save_data(file)
  44.     file.close
  45.     # 还原 BGM、BGS
  46.     $game_system.bgm_play($game_system.playing_bgm)
  47.     $game_system.bgs_play($game_system.playing_bgs)
  48.     # 刷新地图 (执行并行事件)
  49.     $game_map.update
  50.     # 切换到地图画面
  51.     $scene = Scene_Map.new
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 取消时的处理
  55.   #--------------------------------------------------------------------------
  56.   def on_cancel
  57.     # 演奏取消 SE
  58.     $game_system.se_play($data_system.cancel_se)
  59.     # 切换到标题画面
  60.     $scene = Scene_Map.new
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 读取存档数据
  64.   #     file : 读取用文件对像 (已经打开)
  65.   #--------------------------------------------------------------------------
  66.   def read_save_data(file)
  67.     # 读取描绘存档文件用的角色数据
  68.     characters = Marshal.load(file)
  69.     # 读取测量游戏时间用画面计数
  70.     Graphics.frame_count = Marshal.load(file)
  71.     # 读取各种游戏对像
  72.     $game_system        = Marshal.load(file)
  73.     $game_switches      = Marshal.load(file)
  74.     $game_variables     = Marshal.load(file)
  75.     $game_self_switches = Marshal.load(file)
  76.     $game_screen        = Marshal.load(file)
  77.     $game_actors        = Marshal.load(file)
  78.     $game_party         = Marshal.load(file)
  79.     $game_troop         = Marshal.load(file)
  80.     $game_map           = Marshal.load(file)
  81.     $game_player        = Marshal.load(file)
  82.     # 魔法编号与保存时有差异的情况下
  83.     # (加入编辑器的编辑过的数据)
  84.     if $game_system.magic_number != $data_system.magic_number
  85.       # 重新装载地图
  86.       $game_map.setup($game_map.map_id)
  87.       $game_player.center($game_player.x, $game_player.y)
  88.     end
  89.     # 刷新同伴成员
  90.     $game_party.refresh
  91.   end
  92. end
复制代码
调用时使用:
  1. $scene=Scene_Load_M.new
复制代码





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