Project1

标题: 怎么建立一个公共的变量? [打印本页]

作者: 兔毛鹿    时间: 2014-9-23 15:34
标题: 怎么建立一个公共的变量?
比如建立一个变量 $ss,游戏中赋值 $ss = 9 ,保存为存档1。然后进入新游戏或者读取存档2,能判断出 $ss 变量的值依然是9
作者: 蝉岭Cicada    时间: 2014-9-23 17:12
核心代码


存储
Marshal.dump($ss, file)


读取
$ss = Marshal.load(file)
作者: RyanBern    时间: 2014-9-23 19:55
本帖最后由 RyanBern 于 2014-9-26 08:56 编辑

公共变量放在了一个单独的文件中储存,发生改变的时候就即时存档。
在游戏中$game_common_variables表示公共变量,可以像$game_variables一样使用。
未测试。缺点就是如果文件被删除,内容就要重置。
在Scene_Title中载入数据库的后面加上这个:
RUBY 代码复制
  1. unless FileTest.exist?("CommonVar.rxdata")
  2.   $game_common_variables = load_data("CommonVar.rxdata")
  3. else
  4.   $game_common_variables = Game_CommonVariables.new
  5. end

下面这个新建一个脚本插入即可:
RUBY 代码复制
  1. class Game_CommonVariables
  2.   def initialize
  3.     @data = {}
  4.   end
  5.   def [](id)
  6.     @data[id] == nil ? 0 : @data[id]
  7.   end
  8.   def []=(id, val)
  9.     @data[id] = val
  10.     filename = "CommonVar.rxdata"
  11.     file = File.open(filename, "wb")
  12.     Marshal.dump($game_common_variables, file)
  13.     file.close
  14.   end
  15. end

作者: 573932914    时间: 2014-9-23 20:53
本帖最后由 573932914 于 2014-9-23 20:54 编辑

存档时建立文件,文件名字就用变量的数值,读档后再判断名字←←
作者: 兔毛鹿    时间: 2014-9-24 08:11
RyanBern 发表于 2014-9-23 19:55
首先这个公共的变量是不是要随时保存(即只要发生了变化就保存)?还是只有特定情况才保存(比方说存档了) ...

如果我要保存的变量比较多,比如大概有三十多个,需要随时保存,用什么方法比较好?
作者: 蝉岭Cicada    时间: 2014-9-24 12:29
那就选30+个ID放变量
作者: taroxd    时间: 2014-9-24 12:38
兔毛鹿 发表于 2014-9-24 08:11
如果我要保存的变量比较多,比如大概有三十多个,需要随时保存,用什么方法比较好? ...

1.
如果我要保存的变量比较多,比如大概有三十多个

建立一个 变量id -> 值 的哈希表,dump 到外部文件

2.
需要随时保存

重定义 Game_Variables#[]= (我不清楚XP,但这样应该可以。如果是VA的话可以重定义 on_change),使得变量每次改变的时候都存档




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