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

Project1

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

[已经解决] 有关存档界面问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
145
在线时间
698 小时
注册时间
2009-11-15
帖子
538
跳转到指定楼层
1
发表于 2009-12-13 15:58:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我用的是脚本是这个,我自己做了个图片,放上去之后发现显示不出来这是为什么?
  1. class Window_File < Window_Base
  2.   attr_accessor :index
  3.   def initialize(index = 0)
  4.     @backsp = Sprite.new
  5.     @backsp.bitmap = Bitmap.new("Graphics/Pictures/s.png")
  6.    
  7.     super(160,64,480,416)
  8.     #这行可以不用
  9.     self.contents = Bitmap.new(width - 32, height - 32)
  10.     @index = index
  11.     #这里我要说明一句,之所以用sprite是为了放缩图片
  12.     @sprite = Sprite.new
  13.     @sprite.visible = false
  14.     @sprite.z = 100
  15.     @sp_ch = []
  16.     @sp_ch[0] = Sprite.new
  17.     refresh
  18.   end

  19.   def refresh
  20.     self.contents.clear
  21.     for i in @sp_ch
  22.       i.visible = false
  23.     end
  24.     @sprite.visible = false
  25.     if FileTest.exist?(DIR+"Save#{@index}.rxdata")
  26.       @sprite.visible = true
  27.       if FileTest.exist?(DIR+"Save#{@index}.jpg")
  28.         @sprite.bitmap = Bitmap.new(DIR+"Save#{@index}.jpg")
  29.       else
  30.         self.contents.draw_text(32,64,400,32,"截图似乎有点问题……您搞什么了您?

  31. ")
  32.       end
  33.       @sprite.x = 290
  34.       @sprite.y = 96
  35.       @sprite.z = 998
  36.       @sprite.zoom_x = 0.5
  37.       @sprite.zoom_y = 0.5
  38.       file = File.open(DIR+"Save#{@index}.rxdata", "r")
  39.       @time_stamp = file.mtime
  40.       @characters = Marshal.load(file)
  41.       @frame_count = Marshal.load(file)
  42.       @game_system = Marshal.load(file)
  43.       @game_switches = Marshal.load(file)
  44.       @game_variables = Marshal.load(file)
  45.       @total_sec = @frame_count / Graphics.frame_rate
  46.       file.close
  47.       # 描绘游戏时间
  48.       hour = @total_sec / 60 / 60
  49.       min = @total_sec / 60 % 60
  50.       sec = @total_sec % 60
  51.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  52.       self.contents.font.color = normal_color
  53.       self.contents.draw_text(4, 326, 420, 32, time_string, 2)
  54.       # 描绘时间标记
  55.       self.contents.font.color = normal_color
  56.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  57.       self.contents.draw_text(4, 356, 420, 32, time_string, 2)
  58.     else
  59.       self.contents.draw_text(32,32,420,32,"这个存档是空的")
  60.     end

  61.   end
  62.   def dispose
  63.     super
  64.     @sprite.dispose
  65.     @backsp.dispose
  66.     for i in @sp_ch
  67.       i.dispose
  68.     end
  69.   end
  70. end


  71. class Window_File2 < Window_Base
  72.   attr_accessor :index
  73.   def initialize(index = 0)
  74.     @backsp = Sprite.new
  75.     @backsp.bitmap = Bitmap.new("Graphics/Pictures/s.png")
  76.     @backsp.z = 100
  77.     super(160,0,480,480)
  78.     #这行可以不用
  79.     self.contents = Bitmap.new(width - 32, height - 32)
  80.     @index = index
  81.     #这里我要说明一句,之所以用sprite是为了放缩图片
  82.     @sprite = Sprite.new
  83.     @sprite.visible = false
  84.     @sprite.z = 100
  85.     @sp_ch = []
  86.     @sp_ch[0] = Sprite.new
  87.     refresh
  88.   end
  89.   def refresh
  90.     self.contents.clear
  91.     for i in @sp_ch
  92.       i.visible = false
  93.     end
  94.     @sprite.visible = false
  95.     if FileTest.exist?(DIR+"Save#{@index}.rxdata")
  96.       @sprite.visible = true
  97.       if FileTest.exist?(DIR+"Save#{@index}.jpg")
  98.         @sprite.bitmap = Bitmap.new(DIR+"Save#{@index}.jpg")
  99.       else
  100.         self.contents.draw_text(32,64,400,32,"截图似乎有点问题……您搞什么了您?

  101. ")
  102.       end
  103.       @sprite.x = 290
  104.       @sprite.y = 32
  105.       @sprite.z = 998
  106.       @sprite.zoom_x = 0.5
  107.       @sprite.zoom_y = 0.5
  108.       file = File.open(DIR+"Save#{@index}.rxdata", "r")
  109.       @time_stamp = file.mtime
  110.       @characters = Marshal.load(file)
  111.       @frame_count = Marshal.load(file)
  112.       @game_system = Marshal.load(file)
  113.       @game_switches = Marshal.load(file)
  114.       @game_variables = Marshal.load(file)
  115.       @total_sec = @frame_count / Graphics.frame_rate
  116.       file.close
  117.       
  118.       # 描绘游戏时间
  119.       hour = @total_sec / 60 / 60
  120.       min = @total_sec / 60 % 60
  121.       sec = @total_sec % 60
  122.       time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  123.       self.contents.font.color = normal_color
  124.       self.contents.draw_text(4, 390, 420, 32, time_string, 2)
  125.       # 描绘时间标记
  126.       self.contents.font.color = normal_color
  127.       time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  128.       self.contents.draw_text(4, 420, 420, 32, time_string, 2)
  129.     else
  130.       self.contents.draw_text(32,32,420,32,"这个存档是空的")
  131.     end

  132.   end
  133.   def dispose
  134.     super
  135.     @sprite.dispose
  136.     @backsp.dispose
  137.     for i in @sp_ch
  138.       i.dispose
  139.     end
  140.   end
  141. end



  142. $打开自动存档用的开关编号 = 27
  143. $自动存档位置 = 0
  144. $按下F5之后的自动存档的音效 = "Audio/SE/007-System07"
  145. $按下F5之后禁止存档时候的音效 = "Audio/Se/003-System03"
  146. DIR = "Save/"
  147. $打开自动存档开关之后调用的公共事件 = 8 #——默认未定义
  148. $按下F5之后可以存档调用的公共事件 = 0 #——默认未定义
  149. $按下F5之后禁止存档调用的公共事件 = 0 #——默认未定义
  150. class Scene_Map
  151. alias auto_update update
  152. def update
  153. auto_update
  154. #——按下F5的时候自动存档,可以修改为F5,F6,F7,F8,也可以修改成默认按键但是不推荐。
  155. #——注意在不可存档的时候是无效的
  156. if Input.trigger?(Input::F5)
  157.    unless $game_system.map_interpreter.running?
  158.    if $game_system.save_disabled
  159.      Audio.se_play($按下F5之后禁止存档时候的音效)
  160.      $game_temp.common_event_id = $按下F5之后禁止存档调用的公共事件
  161.    else
  162.      Audio.se_play($按下F5之后的自动存档的音效)
  163.      $game_temp.common_event_id = $按下F5之后可以存档调用的公共事件
  164.      auto_save
  165.    end
  166.    end
  167. end
  168. #——当BOSS战之前打开一下定义的开关,即可自动存档
  169. if $game_switches[$打开自动存档用的开关编号] == true
  170.    $game_switches[$打开自动存档用的开关编号] = false
  171.    $game_temp.common_event_id = $打开自动存档开关之后调用的公共事件
  172.    auto_save
  173. end
  174. end
  175. def auto_save
  176. #——这里定义了储存的文件,如果不希望用Save4可以自己修改编号
  177. # 写入存档数据
  178. Screen::shot
  179.      file = File.open( DIR+"Save#{$自动存档位置}.rxdata", "wb")
  180.      auto_save_data(file)
  181.      if FileTest.exist?( DIR+"shot.jpg")
  182.        File.rename( DIR+"shot.jpg", DIR+"Save#{$自动存档位置}.jpg")
  183.      end
  184.      file.close
  185. end
  186. def auto_save_data(file)
  187. #——以下定义内容和Scene_Save的write_save_data(file)完全一样
  188. #——如果你修改过该存档方法,不要忘记用你修改的覆盖这部分内容。
  189. # 生成描绘存档文件用的角色图形
  190. characters = []
  191. for i in 0...$game_party.actors.size
  192.    actor = $game_party.actors[i]
  193.    characters.push([actor.character_name, actor.character_hue, actor])
  194. end
  195. # 写入描绘存档文件用的角色数据
  196. Marshal.dump(characters, file)
  197. # 写入测量游戏时间用画面计数
  198. Marshal.dump(Graphics.frame_count, file)
  199. # 增加 1 次存档次数
  200. $game_system.save_count += 1
  201. # 保存魔法编号
  202. # (将编辑器保存的值以随机值替换)
  203. $game_system.magic_number = $data_system.magic_number
  204. # 写入各种游戏对像
  205. Marshal.dump($game_system, file)
  206. Marshal.dump($game_switches, file)
  207. Marshal.dump($game_variables, file)
  208. Marshal.dump($game_self_switches, file)
  209. Marshal.dump($game_screen, file)
  210. Marshal.dump($game_actors, file)
  211. Marshal.dump($game_party, file)
  212. Marshal.dump($game_troop, file)
  213. Marshal.dump($game_map, file)
  214. Marshal.dump($game_player, file)
  215. end
  216. end







  217. DIR = "Save/"  # 储存文件夹名,请制作游戏时自行建立此文件夹


  218. module Screen  
  219.   @screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), ''
  220.   @readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l

  221. p), 'l'
  222.   @findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
  223.   module_function
  224.   def shot(file = "shot", typ = 1)
  225.     # to add the right extension...
  226.     if typ == 0
  227.       typname = ".bmp"
  228.     elsif typ == 1
  229.       typname = ".jpg"
  230.     elsif typ == 2
  231.       typname = ".png"
  232.     end   
  233.     file_index = 0   
  234.     dir = "Save/"   
  235.     # make the filename....
  236.     file_name = dir + file.to_s + typname.to_s   
  237.     # make the screenshot.... Attention dont change anything from here on....
  238.     @screen.call(0,0,640,480,file_name,handel,typ)
  239.   end
  240.   # find the game window...
  241.   def handel
  242.     game_name = "\0" * 256
  243.     @readini.call('Game','Title','',game_name,255,".\\Game.ini")
  244.     game_name.delete!("\0")
  245.     return @findwindow.call('RGSS Player',game_name)
  246.   end
  247. end


  248. class Scene_Menu
  249.   alias shotsave_main main
  250.   def main
  251.     if @menu_index == 0
  252.       Screen::shot
  253.     end   
  254.     shotsave_main
  255.   end
  256. end

  257. class Interpreter
  258.   #--------------------------------------------------------------------------
  259.   # ● 调用存档画面
  260.   #--------------------------------------------------------------------------
  261.   def command_352
  262.     # 设置战斗中断标志
  263.     $game_temp.battle_abort = true
  264.     # 设置调用存档标志
  265.     $game_temp.save_calling = true
  266.     # 推进索引
  267.     @index += 1
  268.     # 结束
  269.     Screen::shot
  270.     return false
  271.   end
  272. end

  273. #==============================================================================
  274. # ■ Scene_Load
  275. #------------------------------------------------------------------------------
  276. #  处理读档画面的类。
  277. #==============================================================================

  278. class Scene_Load
  279.   #--------------------------------------------------------------------------
  280.   # ● 初始化对像
  281.   #--------------------------------------------------------------------------
  282.   def initialize
  283.     # 再生成临时对像
  284.     $game_temp = Game_Temp.new
  285.     # 选择存档时间最新的文件
  286.     $game_temp.last_file_index = 0
  287.     latest_time = Time.at(0)
  288.     for i in 0..51
  289.       filename = DIR+"Save#{i}.rxdata"
  290.       if FileTest.exist?(filename)
  291.         file = File.open(filename, "r")
  292.         if file.mtime > latest_time
  293.           latest_time = file.mtime
  294.           $game_temp.last_file_index = i
  295.         end
  296.         file.close
  297.       end
  298.     end
  299.   end  
  300.   def main
  301.     @command_window = Window_Command.new(160,["自动存档","进度一","进度二",
  302.     "进度三","进度四","进度五","进度六","进度七","进度八","进度九","进度十",
  303.     "进度十一","进度十二","进度十三","进度十四","进度十五","进度十六",
  304.     "进度十七","进度十八","进度十九","进度二十","进度二一","进度二二",
  305.     "进度二三","进度二四","进度二五","进度二六","进度二七","进度二八",
  306.     "进度二九","进度三十","进度三一","进度三二","进度三三","进度三四",
  307.     "进度三五","进度三六","进度三七","进度三八","进度三九","进度四十",
  308.     "进度四一","进度四二","进度四三","进度四四","进度四五","进度四六",
  309.     "进度四七","进度四八","进度四九","进度五十"])
  310.     @command_window.y = 0
  311.     @command_window.height = 480
  312.     @command_window.index = $game_temp.last_file_index
  313.     @content_window = Window_File2.new($game_temp.last_file_index)
  314.     # 执行过渡
  315.     Graphics.transition
  316.     # 主循环
  317.     loop do
  318.       # 刷新游戏画面
  319.       Graphics.update
  320.       # 刷新输入信息
  321.       Input.update
  322.       # 刷新画面
  323.       update
  324.       # 如果画面被切换的话就中断循环
  325.       if $scene != self
  326.         break
  327.       end
  328.     end
  329.     # 准备过渡
  330.     Graphics.freeze
  331.     @command_window.dispose
  332.     @content_window.dispose
  333.   end
  334.   def update
  335.     @command_window.update
  336.     if @command_window.index != @content_window.index
  337.       @content_window.index = @command_window.index
  338.       @content_window.refresh
  339.     end   
  340.     #——————下面这一部分是原装脚本——————#
  341.     if Input.trigger?(Input::B)  
  342.     # 演奏取消 SE
  343.     $game_system.se_play($data_system.cancel_se)
  344.     # 切换到标题画面
  345.     $scene = Scene_Title.new
  346.     end   
  347.     #———————————————————————#   
  348.     if Input.trigger?(Input::C)
  349.       # 文件不存在的情况下
  350.       unless FileTest.exist?(DIR+"Save#{@command_window.index}.rxdata")
  351.         # 演奏冻结 SE
  352.         $game_system.se_play($data_system.buzzer_se)
  353.         return
  354.       end
  355.       # 演奏读档 SE
  356.       $game_system.se_play($data_system.load_se)
  357.       # 写入存档数据
  358.       file = File.open(DIR+"Save#{@command_window.index}.rxdata",

  359. "rb")
  360.       read_save_data(file)
  361.       file.close
  362.       # 还原 BGM、BGS
  363.       $game_system.bgm_play($game_system.playing_bgm)
  364.       $game_system.bgs_play($game_system.playing_bgs)
  365.       # 刷新地图 (执行并行事件)
  366.       $game_map.update
  367.       # 切换到地图画面
  368.       $scene = Scene_Map.new
  369.     end
  370.     #———————————————————————#
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● 写入存档数据
  374.   #     file : 写入用文件对像 (已经打开)
  375.   #--------------------------------------------------------------------------
  376.   def read_save_data(file)
  377.     # 读取描绘存档文件用的角色数据
  378.     characters = Marshal.load(file)
  379.     # 读取测量游戏时间用画面计数
  380.     Graphics.frame_count = Marshal.load(file)
  381.     # 读取各种游戏对像
  382.     $game_system        = Marshal.load(file)
  383.     $game_switches      = Marshal.load(file)
  384.     $game_variables     = Marshal.load(file)
  385.     $game_self_switches = Marshal.load(file)
  386.     $game_screen        = Marshal.load(file)
  387.     $game_actors        = Marshal.load(file)
  388.     $game_party         = Marshal.load(file)
  389.     $game_troop         = Marshal.load(file)
  390.     $game_map           = Marshal.load(file)
  391.     $game_player        = Marshal.load(file)
  392.     # 魔法编号与保存时有差异的情况下
  393.     # (加入编辑器的编辑过的数据)
  394.     if $game_system.magic_number != $data_system.magic_number
  395.       # 重新装载地图
  396.       $game_map.setup($game_map.map_id)
  397.       $game_player.center($game_player.x, $game_player.y)
  398.     end
  399.     # 刷新同伴成员
  400.     $game_party.refresh
  401.   end
  402. end

  403. #==============================================================================
  404. #  Window_LoadCommand
  405. #------------------------------------------------------------------------------
  406. #  存取档画面选择按钮窗口
  407. #==============================================================================

  408. class Window_LoadCommand < Window_Selectable
  409. #  初始化对象
  410. #--------------------------------------------------------------------------
  411. def initialize
  412.   super(320, 0, 320, 64)
  413.   self.contents = Bitmap.new(width - 32, height - 32)
  414.   @item_max = 3
  415.   @column_max = 3
  416.   @commands = ["", "",""]
  417.   refresh
  418.   self.index = 0
  419. end
  420. #--------------------------------------------------------------------------
  421. #  刷新
  422. #--------------------------------------------------------------------------
  423. def refresh
  424.   self.contents.clear
  425.   for i in 0...@item_max
  426.     draw_item(i)
  427.   end
  428. end
  429. #--------------------------------------------------------------------------
  430. #  描画按钮文字
  431. #--------------------------------------------------------------------------
  432. def draw_item(index)
  433.   x = 4 + index * 160
  434.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  435. end
  436. #--------------------------------------------------------------------------
  437. # ● 项目无效化
  438. #     index : 项目编号
  439. #--------------------------------------------------------------------------
  440.   def disable_item(index)
  441.     draw_item(index, disabled_color)
  442.   end

  443. end

  444. #==============================================================================
  445. #  Scene_Loadsave
  446. #------------------------------------------------------------------------------
  447. # 处理存取档画面的类。
  448. #==============================================================================

  449. class Scene_Loadsave
  450. #--------------------------------------------------------------------------
  451. # ● 初始化对像
  452. #     $last_savefile_index : 记录光标位置
  453. #--------------------------------------------------------------------------
  454.   def initialize
  455.     $last_savefile_index = 0 if $last_savefile_index == nil
  456.     # 再生成临时对像
  457.     $game_temp = Game_Temp.new
  458.     # 选择存档时间最新的文件
  459.     $game_temp.last_file_index = 0
  460.     latest_time = Time.at(0)
  461.     for i in 0..51
  462.       filename = DIR+"Save#{i}.rxdata"
  463.       if FileTest.exist?(filename)
  464.         file = File.open(filename, "r")
  465.         if file.mtime > latest_time
  466.           latest_time = file.mtime
  467.           $game_temp.last_file_index = i
  468.         end
  469.         file.close
  470.       end
  471.     end
  472.   end
  473. #--------------------------------------------------------------------------
  474. #  主处理
  475. #--------------------------------------------------------------------------
  476.   def main
  477.     @savestate = 0
  478.     # 生成窗口
  479.     @help_window = Window_LoadHelp.new
  480.     @help_window.set_text("请选择.")
  481.     @option_window = Window_LoadCommand.new
  482.     @option_window.index = $last_savefile_index
  483.    
  484.     ########################################################
  485.     @command_window = Window_Command.new(160,["自动存档","进度一","进度二",
  486.       "进度三","进度四","进度五","进度六","进度七","进度八","进度九","进度十",
  487.       "进度十一","进度十二","进度十三","进度十四","进度十五","进度十六",
  488.       "进度十七","进度十八","进度十九","进度二十","进度二一","进度二二",
  489.       "进度二三","进度二四","进度二五","进度二六","进度二七","进度二八",
  490.       "进度二九","进度三十","进度三一","进度三二","进度三三","进度三四",
  491.       "进度三五","进度三六","进度三七","进度三八","进度三九","进度四十",
  492.       "进度四一","进度四二","进度四三","进度四四","进度四五","进度四六",
  493.       "进度四七","进度四八","进度四九","进度五十"])
  494.       @command_window.y = 64
  495.       @command_window.height = 416
  496.       @command_window.index = $game_temp.last_file_index
  497.       @content_window = Window_File.new($game_temp.last_file_index)
  498.       @command_window.active = false
  499.         ###############覆盖存档
  500.         @confirm_window = Window_Base.new(120, 188, 400, 64)
  501.         @confirm_window.contents = Bitmap.new(368, 32)
  502.         string = "确定要覆盖这个进度吗?"
  503.         @confirm_window.contents.font.name = "黑体"
  504.         @confirm_window.contents.font.size = 24
  505.         @confirm_window.contents.draw_text(4, 0, 368, 32, string)
  506.         @yes_no_window = Window_Command.new(100, ["覆盖", "取消"])
  507.         @confirm_window.z = 1500
  508.         @yes_no_window.index = 1
  509.         @yes_no_window.x = 270
  510.         @yes_no_window.y = 252
  511.         @yes_no_window.z = 1500
  512.         @confirm_window.visible = false
  513.         @yes_no_window.visible = false
  514.         @yes_no_window.active = false

  515.     # 执行过渡
  516.     Graphics.transition
  517.     # 主循环
  518.     loop do
  519.       # 刷新游戏画面
  520.       Graphics.update
  521.       # 刷新输入信息
  522.       Input.update
  523.       # 刷新画面
  524.       update
  525.       # 如果画面被切换的话就中断循环
  526.       if $scene != self
  527.         break
  528.       end
  529.     end
  530.     # 准备过渡
  531.     Graphics.freeze
  532.     # 释放窗口
  533.     @command_window.dispose
  534.     @content_window.dispose
  535.     @confirm_window.dispose
  536.     @yes_no_window.dispose
  537.     @help_window.dispose
  538.     @option_window.dispose

  539.   end

  540. #--------------------------------------------------------------------------
  541. #  ● 刷新画面
  542. #--------------------------------------------------------------------------
  543.   def update
  544.     # 刷新窗口
  545.     @help_window.update
  546.     @option_window.update
  547. #   @content_window.update
  548.     @command_window.update
  549.     if @yes_no_window.active
  550.         confirm_update
  551.         return
  552.     end
  553.     @content_window.index = @command_window.index
  554.     @content_window.refresh
  555.     case @savestate
  556.     when 0
  557.         if Input.trigger?(Input::B)
  558.         $game_system.se_play($data_system.cancel_se)
  559.         # 淡入淡出 BGM
  560.         Audio.bgm_fade(800)
  561.         # 返回地图
  562.         if $menu_call == false
  563.         # 切换到地图画面
  564.         $scene = Scene_Map.new
  565.           return
  566.         end
  567.         # 切换到菜单画面
  568.         $menu_call = false
  569.         $scene = Scene_Menu.new(7)
  570.      end
  571.       if Input.trigger?(Input::C)
  572.         case @option_window.index
  573.         when 0
  574.           @command_window.active = true
  575.           @option_window.active = false
  576.           $game_system.se_play($data_system.decision_se)
  577.           @help_window.set_text("请选择.")
  578.           @savestate  = 1
  579.           return
  580.         when 1
  581.           @command_window.active = true
  582.           @option_window.active = false
  583.           $game_system.se_play($data_system.decision_se)
  584.           @help_window.set_text("请选择.")
  585.           @savestate = 2
  586.          
  587.           return
  588.         return
  589.         end
  590.       end
  591.     when 1,2
  592.       if Input.trigger?(Input::C)
  593.         if @savestate == 1
  594.           $menu_call = false
  595.           load_file
  596.           return
  597.         else
  598.           # 禁止存档的情况下
  599.           if $game_system.save_disabled
  600.             @help_window.set_text("禁止存储.")
  601.             # 演奏冻结 SE
  602.             $game_system.se_play($data_system.buzzer_se)
  603.             return
  604.           end
  605.          $game_system.se_play($data_system.decision_se)
  606.          $last_savefile_index = @option_window.index
  607.   
  608.          save_file
  609.           return
  610.         end
  611.       end
  612.       # 取消
  613.       if Input.trigger?(Input::B)
  614.         $game_system.se_play($data_system.cancel_se)
  615.         @command_window.active = false
  616.         @help_window.set_text("请选择.")
  617.         @savestate = 0
  618.         @option_window.active = true
  619.         return
  620.       end
  621.       
  622.       if Input.trigger?(Input::B)
  623.         $game_system.se_play($data_system.cancel_se)
  624.         @savestate = 2
  625.         @command_window.active = true

  626.         return
  627.       end
  628.     end
  629.   end
  630. #--------------------------------------------------------------------------
  631. # 建立记录文件索引
  632. #--------------------------------------------------------------------------

  633. #--------------------------------------------------------------------------
  634. #  读取记录文件
  635. #     filename  : 被读取文件
  636. #--------------------------------------------------------------------------
  637. def load_file
  638.       # 文件不存在的情况下
  639.       unless FileTest.exist?(DIR+"Save#{@command_window.index}.rxdata")
  640.         # 演奏冻结 SE
  641.         $game_system.se_play($data_system.buzzer_se)
  642.         return
  643.       end
  644.       # 演奏读档 SE
  645.       $game_system.se_play($data_system.load_se)
  646.       # 写入存档数据
  647.       file = File.open(DIR+"Save#{@command_window.index}.rxdata", "rb")
  648.       read_save_data(file)
  649.       file.close
  650.       # 还原 BGM、BGS
  651.       $game_system.bgm_play($game_system.playing_bgm)
  652.       $game_system.bgs_play($game_system.playing_bgs)
  653.       # 刷新地图 (执行并行事件)
  654.       $game_map.update
  655.       # 切换到地图画面
  656.       $scene = Scene_Map.new
  657. end
  658. #--------------------------------------------------------------------------
  659. # ● 读取存档数据
  660. #     file : 读取用文件对像 (已经打开)
  661. #--------------------------------------------------------------------------
  662.   def read_save_data(file)
  663.     # 读取描绘存档文件用的角色数据
  664.     characters = Marshal.load(file)
  665.     # 读取测量游戏时间用画面计数
  666.     Graphics.frame_count = Marshal.load(file)
  667.     # 读取各种游戏对像
  668.     $game_system        = Marshal.load(file)
  669.     $game_switches      = Marshal.load(file)
  670.     $game_variables     = Marshal.load(file)
  671.     $game_self_switches = Marshal.load(file)
  672.     $game_screen        = Marshal.load(file)
  673.     $game_actors        = Marshal.load(file)
  674.     $game_party         = Marshal.load(file)
  675.     $game_troop         = Marshal.load(file)
  676.     $game_map           = Marshal.load(file)
  677.     $game_player        = Marshal.load(file)
  678.     # 魔法编号与保存时有差异的情况下
  679.     # (加入编辑器的编辑过的数据)
  680.     if $game_system.magic_number != $data_system.magic_number
  681.       # 重新装载地图
  682.       $game_map.setup($game_map.map_id)
  683.       $game_player.center($game_player.x, $game_player.y)
  684.     end
  685.     # 刷新同伴成员
  686.     $game_party.refresh
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ● 写入存档文件
  690.   #--------------------------------------------------------------------------
  691.   def save_file
  692.     if Input.trigger?(Input::C)
  693.       unless FileTest.exist?(DIR+"Save#{@command_window.index}.rxdata")
  694.         # 演奏冻结 SE
  695.         # 演奏存档 SE
  696.           $game_system.se_play($data_system.save_se)
  697.           # 写入存档数据
  698.           file = File.open(DIR+"Save#{@command_window.index}.rxdata", "wb")
  699.           write_save_data(file)
  700.           if FileTest.exist?(DIR+"shot.jpg")
  701.             File.rename(DIR+"shot.jpg", DIR+"Save#{@command_window.index}.jpg")
  702.           end
  703.           file.close
  704.           $game_temp.last_file_index = @command_window.index
  705.           # 如果被事件调用
  706.           if $game_temp.save_calling
  707.             # 清除存档调用标志
  708.             $game_temp.save_calling = false
  709.             @confirm_window.dispose
  710.             # 切换到地图画面
  711.             $scene = Scene_Map.new   
  712.             return
  713.           end
  714.         # 切换到菜单画面
  715.           $scene = Scene_Map.new  
  716.       end
  717.       @yes_no_window.active = true
  718.       @command_window.active = false            
  719.     end
  720.     #———————————————————————#     
  721.   end
  722.   #-------------------------------------------------------------------
  723.   def confirm_update
  724.     @command_index = @command_window.index
  725.     @confirm_window.visible = true
  726.     @confirm_window.z = 1500
  727.     @yes_no_window.visible = true
  728.     @yes_no_window.active = true
  729.     @yes_no_window.z = 1500
  730.     @yes_no_window.update
  731.     if Input.trigger?(Input::C)
  732.       if @yes_no_window.index == 0
  733.           #######################################################
  734.           # 演奏存档 SE
  735.           $game_system.se_play($data_system.save_se)
  736.           # 写入存档数据
  737.           file = File.open(DIR+"Save#{@command_window.index}.rxdata",

  738. "wb")
  739.           write_save_data(file)
  740.           if FileTest.exist?(DIR+"shot.jpg")
  741.             File.rename(DIR+"shot.jpg", DIR+"Save#{@command_window.index}.jpg")
  742.           end
  743.           file.close
  744.           $game_temp.last_file_index = @command_window.index
  745.           # 如果被事件调用
  746.           if $game_temp.save_calling
  747.             # 清除存档调用标志
  748.             $game_temp.save_calling = false
  749.             @confirm_window.dispose
  750.             @content_window.dispose
  751.             # 切换到地图画面
  752.             $scene = Scene_Map.new
  753.    
  754.             return
  755.           end
  756.         # 切换到菜单画面
  757.           $scene = Scene_Map.new        
  758.         else
  759.         $game_system.se_play($data_system.cancel_se)
  760.         @yes_no_window.active = false
  761.         @command_window.active = true
  762.         end
  763.     end
  764.     if Input.trigger?(Input::B)
  765.       $game_system.se_play($data_system.cancel_se)
  766.       @yes_no_window.active = false
  767.       @command_window.active = true
  768.     end
  769.   end
  770.   #--------------------------------------------------------------------------
  771.   # ● 写入存档数据
  772.   #     file : 写入用文件对像 (已经打开)
  773.   #--------------------------------------------------------------------------
  774.   def write_save_data(file)
  775.     # 生成描绘存档文件用的角色图形
  776.     characters = []
  777.     for i in 0...$game_party.actors.size
  778.       actor = $game_party.actors[i]
  779.       characters.push([actor.character_name, actor.character_hue, actor])
  780.     end
  781.     # 写入描绘存档文件用的角色数据
  782.     Marshal.dump(characters, file)
  783.     # 写入测量游戏时间用画面计数
  784.     Marshal.dump(Graphics.frame_count, file)
  785.     # 增加 1 次存档次数
  786.     $game_system.save_count += 1
  787.     # 保存魔法编号
  788.     # (将编辑器保存的值以随机值替换)
  789.     $game_system.magic_number = $data_system.magic_number
  790.     # 写入各种游戏对像
  791.     Marshal.dump($game_system, file)
  792.     Marshal.dump($game_switches, file)
  793.     Marshal.dump($game_variables, file)
  794.     Marshal.dump($game_self_switches, file)
  795.     Marshal.dump($game_screen, file)
  796.     Marshal.dump($game_actors, file)
  797.     Marshal.dump($game_party, file)
  798.     Marshal.dump($game_troop, file)
  799.     Marshal.dump($game_map, file)
  800.     Marshal.dump($game_player, file)
  801.   end
  802. end

  803. #==============================================================================
  804. # ■ Window_LoadHelp
  805. #------------------------------------------------------------------------------
  806. #  存取档画面帮助信息的显示窗口。
  807. #==============================================================================

  808. class Window_LoadHelp < Window_Base
  809. #--------------------------------------------------------------------------
  810. #  初始化对象
  811. #--------------------------------------------------------------------------
  812. def initialize
  813.   super(0, 0, 320, 64)
  814.   self.contents = Bitmap.new(width - 32, height - 32)
  815. end
  816. #--------------------------------------------------------------------------
  817. #  刷新文本
  818. #--------------------------------------------------------------------------
  819. def set_text(text, align = 1)
  820.   if text != @text or align != @align
  821.     self.contents.clear
  822.     self.contents.font.color = normal_color
  823.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  824.     @text = text
  825.     @align = align
  826.     @actor = nil
  827.   end
  828.   self.visible = true
  829. end
  830. end

  831. #==============================================================================
  832. #  Scene_Loadsave
  833. #------------------------------------------------------------------------------
  834. # 处理存取档画面的类。
  835. #==============================================================================

  836. class Scene_Loadsave
  837. #--------------------------------------------------------------------------
  838. # ● 初始化对像
  839. #     $last_savefile_index : 记录光标位置
  840. #--------------------------------------------------------------------------
  841.   def initialize
  842.     $last_savefile_index = 0 if $last_savefile_index == nil
  843.     # 再生成临时对像
  844.     $game_temp = Game_Temp.new
  845.     # 选择存档时间最新的文件
  846.     $game_temp.last_file_index = 0
  847.     latest_time = Time.at(0)
  848.     for i in 0..51
  849.       filename = DIR+"Save#{i}.rxdata"
  850.       if FileTest.exist?(filename)
  851.         file = File.open(filename, "r")
  852.         if file.mtime > latest_time
  853.           latest_time = file.mtime
  854.           $game_temp.last_file_index = i
  855.         end
  856.         file.close
  857.       end
  858.     end
  859.   end
  860. #--------------------------------------------------------------------------
  861. #  主处理
  862. #--------------------------------------------------------------------------
  863.   def main
  864.     @savestate = 0
  865.     # 生成窗口
  866.     @help_window = Window_LoadHelp.new
  867.     @help_window.set_text("请选择.")
  868.     @option_window = Window_LoadCommand.new
  869.     @option_window.index = $last_savefile_index
  870.    
  871.     ########################################################
  872.     @command_window = Window_Command.new(160,["自动存档","进度一","进度二",
  873.       "进度三","进度四","进度五","进度六","进度七","进度八","进度九","进度十",
  874.       "进度十一","进度十二","进度十三","进度十四","进度十五","进度十六",
  875.       "进度十七","进度十八","进度十九","进度二十","进度二一","进度二二",
  876.       "进度二三","进度二四","进度二五","进度二六","进度二七","进度二八",
  877.       "进度二九","进度三十","进度三一","进度三二","进度三三","进度三四",
  878.       "进度三五","进度三六","进度三七","进度三八","进度三九","进度四十",
  879.       "进度四一","进度四二","进度四三","进度四四","进度四五","进度四六",
  880.       "进度四七","进度四八","进度四九","进度五十"])
  881.       @command_window.y = 64
  882.       @command_window.height = 416
  883.       @command_window.index = $game_temp.last_file_index
  884.       @content_window = Window_File.new($game_temp.last_file_index)
  885.       @command_window.active = false
  886.         ###############覆盖存档
  887.         @confirm_window = Window_Base.new(120, 188, 400, 64)
  888.         @confirm_window.contents = Bitmap.new(368, 32)
  889.         string = "确定要覆盖这个进度吗?"
  890.         @confirm_window.contents.font.name = "黑体"
  891.         @confirm_window.contents.font.size = 24
  892.         @confirm_window.contents.draw_text(4, 0, 368, 32, string)
  893.         @yes_no_window = Window_Command.new(100, ["覆盖", "取消"])
  894.         @confirm_window.z = 1500
  895.         @yes_no_window.index = 1
  896.         @yes_no_window.x = 270
  897.         @yes_no_window.y = 252
  898.         @yes_no_window.z = 1500
  899.         @confirm_window.visible = false
  900.         @yes_no_window.visible = false
  901.         @yes_no_window.active = false

  902.     # 执行过渡
  903.     Graphics.transition
  904.     # 主循环
  905.     loop do
  906.       # 刷新游戏画面
  907.       Graphics.update
  908.       # 刷新输入信息
  909.       Input.update
  910.       # 刷新画面
  911.       update
  912.       # 如果画面被切换的话就中断循环
  913.       if $scene != self
  914.         break
  915.       end
  916.     end
  917.     # 准备过渡
  918.     Graphics.freeze
  919.     # 释放窗口
  920.     @command_window.dispose
  921.     @content_window.dispose
  922.     @confirm_window.dispose
  923.     @yes_no_window.dispose
  924.     @help_window.dispose
  925.     @option_window.dispose

  926.   end

  927. #--------------------------------------------------------------------------
  928. #  ● 刷新画面
  929. #--------------------------------------------------------------------------
  930.   def update
  931.     # 刷新窗口
  932.     @help_window.update
  933.     @option_window.update
  934. #   @content_window.update
  935.     @command_window.update
  936.     if @yes_no_window.active
  937.         confirm_update
  938.         return
  939.     end
  940.     @content_window.index = @command_window.index
  941.     @content_window.refresh
  942.     case @savestate
  943.     when 0
  944.         if Input.trigger?(Input::B)
  945.         $game_system.se_play($data_system.cancel_se)
  946.         # 淡入淡出 BGM
  947.         Audio.bgm_fade(800)
  948.         # 返回地图
  949.         if $menu_call == false
  950.         # 切换到地图画面
  951.         $scene = Scene_Map.new
  952.           return
  953.         end
  954.         # 切换到菜单画面
  955.         $menu_call = false
  956.         $scene = Scene_Menu.new(7)
  957.      end
  958.       if Input.trigger?(Input::C)
  959.         case @option_window.index
  960.         when 0
  961.           @command_window.active = true
  962.           @option_window.active = false
  963.           $game_system.se_play($data_system.decision_se)
  964.           @help_window.set_text("请选择")
  965.           @savestate  = 1
  966.           return
  967.         when 1
  968.           @command_window.active = true
  969.           @option_window.active = false
  970.           $game_system.se_play($data_system.decision_se)
  971.           @help_window.set_text("请选择一个文件进行存储.")
  972.           @savestate = 2
  973.          
  974.           return
  975.         return
  976.         end
  977.       end
  978.     when 1,2
  979.       if Input.trigger?(Input::C)
  980.         if @savestate == 1
  981.           $menu_call = false
  982.           load_file
  983.           return
  984.         else
  985.           # 禁止存档的情况下
  986.           if $game_system.save_disabled
  987.             @help_window.set_text("抱歉,这里禁止存储.")
  988.             # 演奏冻结 SE
  989.             $game_system.se_play($data_system.buzzer_se)
  990.             return
  991.           end
  992.          $game_system.se_play($data_system.decision_se)
  993.          $last_savefile_index = @option_window.index
  994.   
  995.          save_file
  996.           return
  997.         end
  998.       end
  999.       # 取消
  1000.       if Input.trigger?(Input::B)
  1001.         $game_system.se_play($data_system.cancel_se)
  1002.         @command_window.active = false
  1003.         @help_window.set_text("请选择.")
  1004.         @savestate = 0
  1005.         @option_window.active = true
  1006.         return
  1007.       end
  1008.       
  1009.       if Input.trigger?(Input::B)
  1010.         $game_system.se_play($data_system.cancel_se)
  1011.         @savestate = 2
  1012.         @command_window.active = true

  1013.         return
  1014.       end
  1015.     end
  1016.   end
  1017. #--------------------------------------------------------------------------
  1018. # 建立记录文件索引
  1019. #--------------------------------------------------------------------------

  1020. #--------------------------------------------------------------------------
  1021. #  读取记录文件
  1022. #     filename  : 被读取文件
  1023. #--------------------------------------------------------------------------
  1024. def load_file
  1025.       # 文件不存在的情况下
  1026.       unless FileTest.exist?(DIR+"Save#{@command_window.index}.rxdata")
  1027.         # 演奏冻结 SE
  1028.         $game_system.se_play($data_system.buzzer_se)
  1029.         return
  1030.       end
  1031.       # 演奏读档 SE
  1032.       $game_system.se_play($data_system.load_se)
  1033.       # 写入存档数据
  1034.       file = File.open(DIR+"Save#{@command_window.index}.rxdata", "rb")
  1035.       read_save_data(file)
  1036.       file.close
  1037.       # 还原 BGM、BGS
  1038.       $game_system.bgm_play($game_system.playing_bgm)
  1039.       $game_system.bgs_play($game_system.playing_bgs)
  1040.       # 刷新地图 (执行并行事件)
  1041.       $game_map.update
  1042.       # 切换到地图画面
  1043.       $scene = Scene_Map.new
  1044. end
  1045. #--------------------------------------------------------------------------
  1046. # ● 读取存档数据
  1047. #     file : 读取用文件对像 (已经打开)
  1048. #--------------------------------------------------------------------------
  1049.   def read_save_data(file)
  1050.     # 读取描绘存档文件用的角色数据
  1051.     characters = Marshal.load(file)
  1052.     # 读取测量游戏时间用画面计数
  1053.     Graphics.frame_count = Marshal.load(file)
  1054.     # 读取各种游戏对像
  1055.     $game_system        = Marshal.load(file)
  1056.     $game_switches      = Marshal.load(file)
  1057.     $game_variables     = Marshal.load(file)
  1058.     $game_self_switches = Marshal.load(file)
  1059.     $game_screen        = Marshal.load(file)
  1060.     $game_actors        = Marshal.load(file)
  1061.     $game_party         = Marshal.load(file)
  1062.     $game_troop         = Marshal.load(file)
  1063.     $game_map           = Marshal.load(file)
  1064.     $game_player        = Marshal.load(file)
  1065.     # 魔法编号与保存时有差异的情况下
  1066.     # (加入编辑器的编辑过的数据)
  1067.     if $game_system.magic_number != $data_system.magic_number
  1068.       # 重新装载地图
  1069.       $game_map.setup($game_map.map_id)
  1070.       $game_player.center($game_player.x, $game_player.y)
  1071.     end
  1072.     # 刷新同伴成员
  1073.     $game_party.refresh
  1074.   end
  1075.   #--------------------------------------------------------------------------
  1076.   # ● 写入存档文件
  1077.   #--------------------------------------------------------------------------
  1078.   def save_file
  1079.     if Input.trigger?(Input::C)
  1080.       unless FileTest.exist?(DIR+"Save#{@command_window.index}.rxdata")
  1081.         # 演奏冻结 SE
  1082.         # 演奏存档 SE
  1083.           $game_system.se_play($data_system.save_se)
  1084.           # 写入存档数据
  1085.           file = File.open(DIR+"Save#{@command_window.index}.rxdata", "wb")
  1086.           write_save_data(file)
  1087.           if FileTest.exist?(DIR+"shot.jpg")
  1088.             File.rename(DIR+"shot.jpg", DIR+"Save#{@command_window.index}.jpg")
  1089.           end
  1090.           file.close
  1091.           $game_temp.last_file_index = @command_window.index
  1092.           # 如果被事件调用
  1093.           if $game_temp.save_calling
  1094.             # 清除存档调用标志
  1095.             $game_temp.save_calling = false
  1096.             @confirm_window.dispose
  1097.             # 切换到地图画面
  1098.             $scene = Scene_Map.new   
  1099.             return
  1100.           end
  1101.         # 切换到菜单画面
  1102.           $scene = Scene_Map.new  
  1103.       end
  1104.       @yes_no_window.active = true
  1105.       @command_window.active = false            
  1106.     end
  1107.     #———————————————————————#     
  1108.   end
  1109.   #-------------------------------------------------------------------
  1110.   def confirm_update
  1111.     @command_index = @command_window.index
  1112.     @confirm_window.visible = true
  1113.     @confirm_window.z = 1500
  1114.     @yes_no_window.visible = true
  1115.     @yes_no_window.active = true
  1116.     @yes_no_window.z = 1500
  1117.     @yes_no_window.update
  1118.     if Input.trigger?(Input::C)
  1119.       if @yes_no_window.index == 0
  1120.           #######################################################
  1121.           # 演奏存档 SE
  1122.           $game_system.se_play($data_system.save_se)
  1123.           # 写入存档数据
  1124.           file = File.open(DIR+"Save#{@command_window.index}.rxdata", "wb")
  1125.           write_save_data(file)
  1126.           if FileTest.exist?(DIR+"shot.jpg")
  1127.             File.rename(DIR+"shot.jpg", DIR+"Save#{@command_window.index}.jpg")
  1128.           end
  1129.           file.close
  1130.           $game_temp.last_file_index = @command_window.index
  1131.           # 如果被事件调用
  1132.           if $game_temp.save_calling
  1133.             # 清除存档调用标志
  1134.             $game_temp.save_calling = false
  1135.             @confirm_window.dispose
  1136.             @content_window.dispose
  1137.             # 切换到地图画面
  1138.             $scene = Scene_Map.new
  1139.    
  1140.             return
  1141.           end
  1142.         # 切换到菜单画面
  1143.           $scene = Scene_Map.new        
  1144.         else
  1145.         $game_system.se_play($data_system.cancel_se)
  1146.         @yes_no_window.active = false
  1147.         @command_window.active = true
  1148.         end
  1149.     end
  1150.     if Input.trigger?(Input::B)
  1151.       $game_system.se_play($data_system.cancel_se)
  1152.       @yes_no_window.active = false
  1153.       @command_window.active = true
  1154.     end
  1155.   end
  1156.   #--------------------------------------------------------------------------
  1157.   # ● 写入存档数据
  1158.   #     file : 写入用文件对像 (已经打开)
  1159.   #--------------------------------------------------------------------------
  1160.   def write_save_data(file)
  1161.     # 生成描绘存档文件用的角色图形
  1162.     characters = []
  1163.     for i in 0...$game_party.actors.size
  1164.       actor = $game_party.actors[i]
  1165.       characters.push([actor.character_name, actor.character_hue, actor])
  1166.     end
  1167.     # 写入描绘存档文件用的角色数据
  1168.     Marshal.dump(characters, file)
  1169.     # 写入测量游戏时间用画面计数
  1170.     Marshal.dump(Graphics.frame_count, file)
  1171.     # 增加 1 次存档次数
  1172.     $game_system.save_count += 1
  1173.     # 保存魔法编号
  1174.     # (将编辑器保存的值以随机值替换)
  1175.     $game_system.magic_number = $data_system.magic_number
  1176.     # 写入各种游戏对像
  1177.     Marshal.dump($game_system, file)
  1178.     Marshal.dump($game_switches, file)
  1179.     Marshal.dump($game_variables, file)
  1180.     Marshal.dump($game_self_switches, file)
  1181.     Marshal.dump($game_screen, file)
  1182.     Marshal.dump($game_actors, file)
  1183.     Marshal.dump($game_party, file)
  1184.     Marshal.dump($game_troop, file)
  1185.     Marshal.dump($game_map, file)
  1186.     Marshal.dump($game_player, file)
  1187.   end
  1188. end
复制代码
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-12-12
帖子
60
2
发表于 2009-12-13 16:01:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
145
在线时间
698 小时
注册时间
2009-11-15
帖子
538
3
 楼主| 发表于 2009-12-16 17:16:19 | 只看该作者
2# 夏季烧烤


也就是说只要改成@sprite.visible = True就行了?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-26 10:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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