赞 | 0 |
VIP | 5 |
好人卡 | 14 |
积分 | 15 |
经验 | 110639 |
最后登录 | 2015-10-15 |
在线时间 | 1157 小时 |
Lv3.寻梦者 小柯的徒弟
- 梦石
- 0
- 星屑
- 1530
- 在线时间
- 1157 小时
- 注册时间
- 2008-5-24
- 帖子
- 3085
|
本帖最后由 「旅」 于 2011-2-10 09:08 编辑
回复 okasssss 的帖子
恩这个提问很赞哦~~~问得很好,是学习脚本必须知道的一个重要内容哟~~~
喵那个,在RGSS里其实是有两种方式可以存储、读取数据的~~~我们先来认识较简单的一种吧~~~- @time_m = load_data(filename)
- save_data(@time_m, filename)
复制代码 如上~第一行是"读取"了filename的数据后赋值到@time_m变量里,而第二行则是将@time_m的数据"写入"到filename里面~
filename是一个字符串哦~~~它的内容是某个文件的路径~~~例如:- @time_m = load_data("Data/Actors.rxdata")
- p @time_m
复制代码 这时你测试时弹出的内容其实就是"Data/Actors.rxdata"这个文件的数据了(角色的数据库)~~~- save_data("你好吗?", "RMXP.rxdata")
复制代码 还有储存操作~~~如果在路径上没有那个文件的话,他就会自己生成一个哦~现在你可以看看游戏目录下多出什么了~~
好的,接下来讲第二种储存和读取的方法~~~你可以打开Scene_Save和Scene_Load的73~82行看看~~~- # 储存
- Marshal.dump($game_system, file)
- Marshal.dump($game_switches, file)
- Marshal.dump($game_variables, file)
- Marshal.dump($game_self_switches, file)
- Marshal.dump($game_screen, file)
- Marshal.dump($game_actors, file)
- Marshal.dump($game_party, file)
- Marshal.dump($game_troop, file)
- Marshal.dump($game_map, file)
- Marshal.dump($game_player, file)
复制代码
- # 读取
- $game_system = Marshal.load(file)
- $game_switches = Marshal.load(file)
- $game_variables = Marshal.load(file)
- $game_self_switches = Marshal.load(file)
- $game_screen = Marshal.load(file)
- $game_actors = Marshal.load(file)
- $game_party = Marshal.load(file)
- $game_troop = Marshal.load(file)
- $game_map = Marshal.load(file)
- $game_player = Marshal.load(file)
复制代码 如上~~~知道为什么这个东西和之前讲的那种有区别吗?应该很容易就可以判断出来哟~~~
恩没错,这个东西的特点在于它是多个数据的~~~它可以一次性把很多的数据放在同一个文件哦~~~
但是为什么把它放在新建页面测试时出现错误了呢?嘿嘿大家可以搜索一下write_save_data和read_save_data哟~~~
搜索的第二个结果就是我们上面的那些内容~~~而第一个内容,如下:- file = File.open(filename, "rb")
- read_save_data(file)
- file.close
复制代码- file = File.open(filename, "wb")
- write_save_data(file)
- file.close
复制代码 这个就是原因了~~~固定格式之一哦~~~必须在首尾写上那两个东西~~~
另外读取的话,File.open的第2个参数是"rb"。写入则是"wb"~~是和write和read对应的~~~
可能同学们就会奇怪了,为什么需要这么麻烦呢……喵我来告诉大家~~
因为这个是多个数据写入或读取于一个文件,为了确保不会出现意外就要这样哦~(如果重新使用等,就会很乱了)
另外要注意的是,我们存入什么数据的顺序,和读取的顺序一定要一定哦~~~写入第一个是$game_system的话,那么读取第一个也要是$game_system~~不然数据就会全都乱套了~~~
最后呢,继续解答okasssss酱的疑问~~~喵那个@time_m的话,最好就是放在一个数据类里哦~~~不然如果每个变量都需要保存、读取的话,那样代码会很长,而且效率会很低的~~~
那么什么是数据类呢?其实就是脚本最前端的Game_Temp、Game_System、Game_Xxxx这些类……
他们的好处在于,保存或读取时可以一次性把类里的实变量都一同保存、读取~~~很方便的~~~~
p.s他们实例的变量是$game_temp、$game_system、$game_xxx。
喵示范一下~~~首先把@time_m放入Game_System(我个人建议这个数据类)的initialize里初始化。p.s如果不初始化的话,很容易发生错误的~~~
然后模仿上面的attr_accessor :xxxx...写一个吧~~~(如果不知道这个的话,可以看我上篇解答的附加内容2)恩就这样,然后就没有了~~~(啥居然没有了!?)恩对的哦~~~
接下来我们进入游戏测试吧~~~
p.s因为要新建游戏或读取游戏后Game_System才有在$game_system生成,所以我们到游戏地图上的事件里测试~~~- p $game_system.time_m
- $game_system.time_m += 100
- p $game_system.time_m
复制代码 喵最后测试成功~~~
好了终于废话完了~~语言表达不是很好的说,各位看的时候辛苦了>< |
|