Project1

标题: [結帖]緊急!有关全局變量的問題 [打印本页]

作者: david_ng223    时间: 2014-5-1 16:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: 余烬之中    时间: 2014-5-1 16:28
是在哪里进行赋值操作的,事件中吗?

存档读档之间关闭了游戏吗?

如果两个问题的答案都是肯定的 那么这种情况很好理解:存档时 并非完完全全存储了全部的变量 只不过存储了游戏对象(Game Object)而已

参阅DataManager:
  1.   #--------------------------------------------------------------------------
  2.   # ● 生成存档内容
  3.   #--------------------------------------------------------------------------
  4.   def self.make_save_contents
  5.     contents = {}
  6.     contents[:system]        = $game_system
  7.     contents[:timer]         = $game_timer
  8.     contents[:message]       = $game_message
  9.     contents[:switches]      = $game_switches
  10.     contents[:variables]     = $game_variables
  11.     contents[:self_switches] = $game_self_switches
  12.     contents[:actors]        = $game_actors
  13.     contents[:party]         = $game_party
  14.     contents[:troop]         = $game_troop
  15.     contents[:map]           = $game_map
  16.     contents[:player]        = $game_player
  17.     contents
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 展开存档内容
  21.   #--------------------------------------------------------------------------
  22.   def self.extract_save_contents(contents)
  23.     $game_system        = contents[:system]
  24.     $game_timer         = contents[:timer]
  25.     $game_message       = contents[:message]
  26.     $game_switches      = contents[:switches]
  27.     $game_variables     = contents[:variables]
  28.     $game_self_switches = contents[:self_switches]
  29.     $game_actors        = contents[:actors]
  30.     $game_party         = contents[:party]
  31.     $game_troop         = contents[:troop]
  32.     $game_map           = contents[:map]
  33.     $game_player        = contents[:player]
  34.   end
复制代码

作者: satgo1546    时间: 2014-5-1 16:42
最简单的解决方法:直接用事件的变量。
如果要在存档时保存这个变量会比较麻烦(要修改存档的代码
作者: 喵呜喵5    时间: 2014-5-1 16:48
RUBY 代码复制
  1. class << DataManager
  2.   alias m5_20131119_create_game_objects create_game_objects
  3.   alias m5_20131119_make_save_contents make_save_contents
  4.   alias m5_20131119_extract_save_contents extract_save_contents
  5.   def create_game_objects
  6.     m5_20131119_create_game_objects
  7.     $debt = 0
  8.   end
  9.   def make_save_contents
  10.     m5_20131119_make_save_contents
  11.     contents[:debt] = $debt
  12.     contents
  13.   end
  14.   def extract_save_contents(contents)
  15.     m5_20131119_extract_save_contents(contents)
  16.     $debt = contents[:debt]
  17.   end
  18. end


↑存档的时候将你的全局变量保存进存档中
作者: david_ng223    时间: 2014-5-1 16:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: 喵呜喵5    时间: 2014-5-1 16:55
david_ng223 发表于 2014-5-1 16:52
那如果我要再加幾個全局變量,是不是需在第7,11,16行之下添加??


第7行的方法是设置初始值的,不需要的话可以不用添加,另外两个如果你要保存进存档的话就必须添加

另外RM自己不都定义了全局变量$game_variables了吗,为什么还要自己再去定义更多的全局变量?
作者: 余烬之中    时间: 2014-5-1 17:26
想起了很久以前看到的的一个好东西 http://rpg.blue/thread-331928-1-1.html

不过游戏变量已经足够了 真的没必要加上自己的全局变量
作者: taroxd    时间: 2014-5-1 17:28
首先科普一个常识,写脚本尽量不要用到全局变量。(事实上要是我写RGSS我肯定把那些全局变量写成某个类的实例变量)

然后,把全局变量保存下来会比较麻烦,要改许多东西(见4L脚本),还可能和其他脚本产生奇怪的冲突。

如果一定要全局,比较科学的解决方法是,把这些变量做成伪·全局变量。比如把$debt做成$game_party的实例变量@debt,这样就不用担心存档的问题了。比如你当前的金钱($game_party.gold)本质上就是一个“全局”的变量。




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