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

Project1

 找回密码
 注册会员
搜索
查看: 1987|回复: 4

[已经解决] 存档修改的问题第二部分

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1733
在线时间
484 小时
注册时间
2006-1-7
帖子
1073
发表于 2015-11-5 00:58:06 | 显示全部楼层 |阅读模式

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

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

x
接上一个问题继续问
怎么在Saves文件夹下,提取出有效的(.rxdata)存档文件数量?
又如何提取出有效的(.rxdata)存档文件名字

在Load界面建立一个 command_window
选择的列表中的选项是上面提取到的文件名字?

@RyanBern  

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

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

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
发表于 2015-11-5 08:23:56 | 显示全部楼层
建一个存档保存创建的存档信息就好..

点评

读取数据 load_data(filename) 你就得到你保存的数据,然后操作就可以..如果是手动删除存档可能就不行了.......所以楼下的比较保险  发表于 2015-11-5 12:57
数据看你要读取什么消息了,比如你可以用hash表,然后操作这个hash表就好, 比如 shuju={} ; shuju[1]={} ; shuju[1]["name"]="汪汪" ;shuju[1]["shijian"]="20151105"   发表于 2015-11-5 12:55
save_data(obj, filename)  发表于 2015-11-5 12:51
这个。。。。不会。求指导,怎么建立,怎么添加数据,怎么读取数据,怎么移除数据?  发表于 2015-11-5 09:24
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9467
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

发表于 2015-11-5 09:03:39 | 显示全部楼层
本帖最后由 RyanBern 于 2015-11-5 23:53 编辑

有效存档如何定义?
RUBY 代码复制
  1. filenames = []
  2. Dir.foreach("Saves") do |s|
  3.   filenames << $1 if /(.+?)\.rxdata/ === s
  4. end

这样执行完之后,如果Saves文件夹下有"A.rxdata","B.txt","Aa.rxdata"
那么最终filenames = ["A", "Aa"]

@filenames 前面要加'@'


RUBY 代码复制
  1. #-----------------------------------------------------------------------------#
  2. # 脚本设定                                                                    #
  3. #-----------------------------------------------------------------------------#
  4. # 说明:                                                                      #
  5. # ①主要采用了Snap To Bitmap这脚本省去了DLL。                                 #
  6. # ②采用了禁术,各位不用到处改脚本了,不过冲突率也大增==                      #
  7. # ③脚本当中采用的脚本归原作者所有。                                          #
  8. # ④设置区域的变量请自行更改。                                                #
  9. #-----------------------------------------------------------------------------#
  10. #-----------------------------------------------------------------------------#
  11. # 创建存档文件夹                                                              #
  12. #-----------------------------------------------------------------------------#
  13. Dir.mkdir("Saves/") unless FileTest.directory?("Saves/")
  14.  
  15. #-----------------------------------------------------------------------------#
  16. # 存档界面用窗口                                                              #
  17. #-----------------------------------------------------------------------------#
  18. class Window_Save < Window_Base
  19.   #---------------------------------------------------------------------------#
  20.   # 初始化                                                                    #
  21.   #---------------------------------------------------------------------------#
  22.   def initialize
  23.     super(160,64,640-160,480-64)#(160,64,800,736)
  24.     self.contents = Bitmap.new(width-32,height-32)
  25.     @_index = -1
  26.     #refresh(0, nil)
  27.   end
  28.   #---------------------------------------------------------------------------#
  29.   # 刷新                                                                      #
  30.   #---------------------------------------------------------------------------#
  31.   def refresh(index, filename)
  32.     if index != @_index
  33.       # 清除原有资料
  34.       self.contents.clear
  35.       @sprite.dispose if @sprite != nil
  36.       @sprite = nil      
  37.       # 开始读取资料
  38.       @file_index = index
  39.       @filename = filename
  40.       @time_stamp = Time.at(0)
  41.       @file_exist = FileTest.exist?(@filename)
  42.       if @file_exist
  43.         file = File.open(@filename, "r")
  44.         @time_stamp         = file.mtime
  45.         @characters         = Marshal.load(file)
  46.         @frame_count        = Marshal.load(file)
  47.         @game_system        = Marshal.load(file)
  48.         @game_switches      = Marshal.load(file)
  49.         @game_variables     = Marshal.load(file)
  50.         @game_self_switches = Marshal.load(file)
  51.         @game_screen        = Marshal.load(file)
  52.         @game_actors        = Marshal.load(file)
  53.         @game_party         = Marshal.load(file)
  54.         @game_troop         = Marshal.load(file)
  55.         @game_map           = Marshal.load(file)
  56.         @game_player        = Marshal.load(file)
  57.         @bitmap             = @game_system.snap_bitmap
  58.         @total_sec = @frame_count / Graphics.frame_rate
  59.         file.close
  60.         # 描绘角色
  61.         ([email]0...@characters.size[/email]).each do |i|
  62.           x = i*56 + 24
  63.           bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
  64.           self.contents.blt(x,328,bitmap,Rect.new(0,0,bitmap.width/4,bitmap.height/4))
  65.         end
  66.         # 描绘游戏时间
  67.         hour = @total_sec / 60 / 60
  68.         min = @total_sec / 60 % 60
  69.         sec = @total_sec % 60
  70.         time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  71.         self.contents.font.color = normal_color
  72.         self.contents.draw_text(0,320,448,32,time_string,2)
  73.         # 描绘时间标记
  74.         self.contents.font.color = normal_color
  75.         time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  76.         self.contents.draw_text(0,352,448,32,time_string, 2)
  77.       else
  78.         self.contents.draw_text(0,320,448,32,"无存档",1)
  79.       end
  80.       @_index = index
  81.     end
  82.   end
  83.   #---------------------------------------------------------------------------#
  84.   # 释放                                                                      #
  85.   #---------------------------------------------------------------------------#
  86.   def dispose
  87.     super
  88.     @sprite.dispose if @sprite != nil
  89.     @sprite = nil
  90.   end
  91. end
  92.  
  93. #-----------------------------------------------------------------------------#
  94. # 存档界面                                                                    #
  95. #-----------------------------------------------------------------------------#
  96. class Scene_Load
  97.   #---------------------------------------------------------------------------#
  98.   # 初始化                                                                    #
  99.   #---------------------------------------------------------------------------#
  100.   def initialize
  101.     super("要载入哪个文件?")
  102.   end
  103.   #---------------------------------------------------------------------------#
  104.   # 主执行                                                                    #
  105.   #---------------------------------------------------------------------------#
  106.   def main
  107.  
  108.     # 再生成临时对像
  109.     $game_temp = Game_Temp.new
  110.     # 选择存档时间最新的文件
  111.     $game_temp.last_file_index = 0
  112.     latest_time = Time.at(0)
  113.     if @filenames == nil
  114.       @filenames = []
  115.       Dir.foreach("Saves") do |s|
  116.         @filenames << $1 if /(.+?)\.rxdata/ === s
  117.       end
  118.       if @filenames.empty?
  119.         @filenames = ["无存档"]
  120.       end
  121.     end
  122.  
  123.     ([email]0...@filenames.size[/email]).each do |i|
  124.       filename = make_filename(i)
  125.       if FileTest.exist?(filename)
  126.         file = File.open(filename, "r")
  127.         if file.mtime > latest_time
  128.           latest_time = file.mtime
  129.           $game_temp.last_file_index = i
  130.         end
  131.         file.close
  132.       end
  133.     end
  134.  
  135.     @command_window = Window_Command.new(160,@filenames)
  136.     @command_window.height = 480-64#736
  137.     @command_window.y = 64
  138.     @command_window.active = true
  139.     # 存档资料窗口
  140.     @save_window = Window_Save.new
  141.     # 执行过渡
  142.     Graphics.transition
  143.     # 主循环
  144.     loop do
  145.       # 刷新游戏画面
  146.       Graphics.update
  147.       # 刷新输入信息
  148.       Input.update
  149.       # 刷新画面
  150.       update
  151.       # 如果画面切换的话的就中断循环
  152.       if $scene != self
  153.         break
  154.       end
  155.     end
  156.     # 准备过渡
  157.     Graphics.freeze
  158.     # 释放窗口
  159.     @save_window.dispose
  160.     @command_window.dispose
  161.   end
  162.   #---------------------------------------------------------------------------#
  163.   # 刷新                                                                      #
  164.   #---------------------------------------------------------------------------#
  165.   def update
  166.     update_command   
  167.   end
  168.   #---------------------------------------------------------------------------#
  169.   # 选择存档窗口刷新                                                          #
  170.   #---------------------------------------------------------------------------#
  171.   def update_command
  172.     @command_window.update
  173.     filename = @filenames[@command_window.index]
  174.     @save_window.refresh(@command_window.index, filename)
  175.     # 按下取消键
  176.     if Input.trigger?(Input::B)
  177.       # 演奏取消 SE
  178.       $game_system.se_play($data_system.cancel_se)
  179.       # 切换到标题画面
  180.       $scene = Scene_Title.new
  181.     end
  182.     # 按下确定键
  183.     if Input.trigger?(Input::C)
  184.       # 文件不存在的情况下
  185.       unless FileTest.exist?(filename)
  186.         # 演奏冻结 SE
  187.         $game_system.se_play($data_system.buzzer_se)
  188.         return
  189.       end
  190.       # 演奏读档 SE
  191.       $game_system.se_play($data_system.load_se)
  192.       # 写入存档数据
  193.       file = File.open(filename, "rb")
  194.       read_save_data(file)
  195.       file.close
  196.       # 还原 BGM、BGS
  197.       $game_system.bgm_play($game_system.playing_bgm)
  198.       $game_system.bgs_play($game_system.playing_bgs)
  199.       # 刷新地图 (执行并行事件)
  200.       $game_map.update
  201.       # 切换到菜单界面
  202.       $scene = Scene_Menu.new(0)
  203.     end
  204.   end
  205.   #---------------------------------------------------------------------------#
  206.   # 读档                                                                      #
  207.   #---------------------------------------------------------------------------#
  208.   def read_save_data(file)
  209.     # 读取描绘存档文件用的角色数据
  210.     characters = Marshal.load(file)
  211.     # 读取测量游戏时间用画面计数
  212.     Graphics.frame_count = Marshal.load(file)
  213.     # 读取各种游戏对像
  214.     $game_system        = Marshal.load(file)
  215.     $game_switches      = Marshal.load(file)
  216.     $game_variables     = Marshal.load(file)
  217.     $game_self_switches = Marshal.load(file)
  218.     $game_screen        = Marshal.load(file)
  219.     $game_actors        = Marshal.load(file)
  220.     $game_party         = Marshal.load(file)
  221.     $game_troop         = Marshal.load(file)
  222.     $game_map           = Marshal.load(file)
  223.     $game_player        = Marshal.load(file)
  224.     # 魔法编号与保存时有差异的情况下
  225.     # (加入编辑器的编辑过的数据)
  226.     if $game_system.magic_number != $data_system.magic_number
  227.       # 重新装载地图
  228.       $game_map.setup($game_map.map_id)
  229.       $game_player.center($game_player.x, $game_player.y)
  230.     end
  231.     # 刷新同伴成员
  232.     $game_party.refresh
  233.   end
  234. end
  

点评

未测试,自己改着改着就改好了。看来是要自己多用用p了,才知道怎么个情况了。还是多谢了。我改好的部分在4楼编辑。  发表于 2015-11-6 00:04
见编辑  发表于 2015-11-5 22:46
另外,filenames << $1 if /Saves\/(.+?)\.rxdata/ === s,这样做后 p filenames 显示是 [];filenames << s if s != "." && s != ".."这样返回的就是[XXXX.rxdata],不含路径。   发表于 2015-11-5 22:36
【@save_window.refresh(@command_window.index, filenames[@command_window.index])】→undeifined local variable or method 'filenames' for #<Scene_load:0x38bb4e0>  发表于 2015-11-5 22:30
@filenames[@command_window.index] 这样可以取出选中存档的文件名  发表于 2015-11-5 13:57

评分

参与人数 1星屑 +150 收起 理由
无忧谷主幻 + 150 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1733
在线时间
484 小时
注册时间
2006-1-7
帖子
1073
 楼主| 发表于 2015-11-5 10:43:14 | 显示全部楼层
本帖最后由 白鬼 于 2015-11-6 00:06 编辑

自己修改好了。主要是多用p,看看获得的值对不对,差在哪里就找到了。
多谢了!@RyanBern

Load界面


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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1733
在线时间
484 小时
注册时间
2006-1-7
帖子
1073
 楼主| 发表于 2015-11-5 23:44:37 | 显示全部楼层
RyanBern 发表于 2015-11-5 09:03
有效存档如何定义?
filenames = []
Dir.foreach("Saves") do |s|

前面加 '@' 就是一个空的数组。我真的搞不定。

点评

正则表达式我已经改了啊,难道还有问题?  发表于 2015-11-5 23:46
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-18 16:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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