Project1

标题: 如何保存自建窗口和自建全局变量? [打印本页]

作者: 黄亦天    时间: 2011-1-20 23:10
标题: 如何保存自建窗口和自建全局变量?
本帖最后由 黄亦天 于 2011-1-22 18:24 编辑

我用这个方法自建了一个窗口
http://rpg.blue/thread-163500-1-1.html
但是存档后再读取就无效了……
如何才能让其保存到存档里?
另外我在事件脚本里将一个全局变量$aaa 带入了一个数值,如何才能将这个变量其保存到存档中?


黄亦天于2011-1-20 23:31补充以下内容:
另外想再问一下,如何判定这个窗口是否建立?
作者: fux2    时间: 2011-1-21 07:34
回复 黄亦天 的帖子

scene_file定义很清楚了,要保存什么就自己dump啊.
  1.   def write_save_data(file)
  2.     characters = []
  3.     for actor in $game_party.members
  4.       characters.push([actor.character_name, actor.character_index])
  5.     end
  6.     $game_system.save_count += 1
  7.     $game_system.version_id = $data_system.version_id
  8.     @last_bgm = RPG::BGM::last
  9.     @last_bgs = RPG::BGS::last
  10.     Marshal.dump(characters,           file)
  11.     Marshal.dump(Graphics.frame_count, file)
  12.     Marshal.dump(@last_bgm,            file)
  13.     Marshal.dump(@last_bgs,            file)
  14.     Marshal.dump($game_system,         file)
  15.     Marshal.dump($game_message,        file)
  16.     Marshal.dump($game_switches,       file)
  17.     Marshal.dump($game_variables,      file)
  18.     Marshal.dump($game_self_switches,  file)
  19.     Marshal.dump($game_actors,         file)
  20.     Marshal.dump($game_party,          file)
  21.     Marshal.dump($game_troop,          file)
  22.     Marshal.dump($game_map,            file)
  23.     Marshal.dump($game_player,         file)
  24.   end
复制代码
窗口是否建立P一下不就知道了,判断是否为空
作者: 黄亦天    时间: 2011-1-21 13:12
回复 fux2 的帖子

感谢的说……
之前我改错地方了……
变量的保存已经没问题了……
可是这个窗口的保存还是没弄明白,试了好几次都失败了……
如果要保存这个窗口应该怎么写呢……
作者: shua1125    时间: 2011-1-22 02:45
12小时了……
自顶一下……
作者: 雪流星    时间: 2011-1-22 03:06
其實最簡單的方法就是用系統變量來存
$game_variables[1] = 某數值或窗口等等...
作者: fux2    时间: 2011-1-22 13:17
本帖最后由 fux2 于 2011-1-22 13:19 编辑

回复 shua1125 的帖子

$game_variables[1]保存窗口对象不行么?
你创建窗口总要有类似
@item = Window_Item.new这样的代码吧?
把@item这个对象传递给存档的方法或者用全局变量保存
$item = Window_Item.new
保存的时候再dump进去好了
这个窗口对象内的一切变量都会保存.(一般的)

作者: 亿万星辰    时间: 2011-1-22 13:53
窗口并不是保存的,窗口是重新生成的,你只要保证窗口里需要的数据都保存就好了。
作者: 黄亦天    时间: 2011-1-22 13:57
本帖最后由 黄亦天 于 2011-1-22 13:58 编辑

回复 fux2 的帖子

OTZ 我完全混乱了……
我在事件里是这么写的:
  1. $t2t = 7200
复制代码
  1. $t2x = -5   # X坐标
  2. $t2y = -5   # Y坐标
  3. size = 30   # 字号
  4. $timer2 = Window_Base.new($t2x,$t2y,600,90)
  5. $timer2.contents.font.size = size
  6. $timer2.contents.font.name = "黑体"  
  7. R = 255     
  8. G = 174     
  9. B = 0      
  10. $timer2.contents.font.color=Color.new(R,G,B)
  11. $timer2.opacity = 0
复制代码
然后开启开关1,执行并行事件
内容如下:
  1. $t2 = "#{$t2t}帧"
  2. $timer2.contents.clear
  3. if $game_switches[2] == false
  4. $timer2.contents.draw_text(0,0,550,35,$t2)
  5. end
复制代码
我只知道该怎么保存$t2t这个变量,但是不知道该怎么保存这个窗口……
用系统变量的话,应该是替换掉什么呢……依旧是各种错误弹窗……
作者: 因幡·帝    时间: 2011-1-22 13:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 一箭烂YiJL    时间: 2011-1-22 18:16
嗯~上楼(八云?)说得对,不能储存物件的,
只能储存数据,不然出错。

新建一个自己用来储存数据的类,
$XXXXX = 那个类
再用实例变量,将数据记录下来,
最后就是在save。

然而,要读取时就要这样:
比如在Map里可以在可以修改Spriteset_Map的设置,
或者参考:【强势更新!】计时器/秒标强及美化 v1.3 (多计时,顺倒数)
的做法,话说最初弄成多计时器的时候,是用$game_system(Game_System)来储存活动块,
导致存档失误,于是把活动块改在Spriteset_Map和Spriteset_Battle里存放。
要不我给个那个无法存档的版本给你。
作者: 因幡·帝    时间: 2011-1-22 18:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: 苏小脉    时间: 2011-1-22 23:35
回复 因幡·帝 的帖子

Window 有 Bitmap 类型的成员,因此。理论上这些 RGSS 对象都是可以序列化的,只要去定义一下 marshal_dump、marshal_load 或者 _dump、_load 等方法即可。柳之一以前提出的那个 Marshal Bitmap 的算法就是一切的基础。




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