查看: 1932|回复: 7

[結帖]緊急!有关全局變量的問題

[复制链接]
david_ng223 该用户已被删除
发表于 2014-5-1 16:23:20 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-5-1 16:28:25 | 显示全部楼层
是在哪里进行赋值操作的,事件中吗?

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

如果两个问题的答案都是肯定的 那么这种情况很好理解:存档时 并非完完全全存储了全部的变量 只不过存储了游戏对象(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
复制代码

点评

是在事件中,而且有關閉遊戲,那么請問要如何解決了??  发表于 2014-5-1 16:30

评分

参与人数 1星屑 +100 收起 理由
Sion + 100 感谢帮忙

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

梦石
0
星屑
660
在线时间
1286 小时
注册时间
2011-6-14
回帖
3949
发表于 2014-5-1 16:42:52 | 显示全部楼层
最简单的解决方法:直接用事件的变量。
如果要在存档时保存这个变量会比较麻烦(要修改存档的代码
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-5-1 16:48:41 | 显示全部楼层
[pre lang="ruby" line="1"]class << DataManager
  alias m5_20131119_create_game_objects create_game_objects
  alias m5_20131119_make_save_contents make_save_contents
  alias m5_20131119_extract_save_contents extract_save_contents
  def create_game_objects
    m5_20131119_create_game_objects
    $debt = 0
  end
  def make_save_contents
    m5_20131119_make_save_contents
    contents[:debt] = $debt
    contents
  end
  def extract_save_contents(contents)
    m5_20131119_extract_save_contents(contents)
    $debt = contents[:debt]
  end
end[/pre]

↑存档的时候将你的全局变量保存进存档中

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

david_ng223 该用户已被删除
 楼主| 发表于 2014-5-1 16:52:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-5-1 16:55:16 | 显示全部楼层
david_ng223 发表于 2014-5-1 16:52
那如果我要再加幾個全局變量,是不是需在第7,11,16行之下添加??


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

另外RM自己不都定义了全局变量$game_variables了吗,为什么还要自己再去定义更多的全局变量?

评分

参与人数 1星屑 +20 收起 理由
taroxd + 20 不需要全局变量+1

查看全部评分

回复

使用道具 举报

百合控

梦石
0
星屑
6548
在线时间
1275 小时
注册时间
2013-8-21
回帖
3522

开拓者

发表于 2014-5-1 17:26:36 | 显示全部楼层
想起了很久以前看到的的一个好东西 http://rpg.blue/thread-331928-1-1.html

不过游戏变量已经足够了 真的没必要加上自己的全局变量

点评

确实是好东西,虽然用不到,但是这个实现方式学习了~  发表于 2014-5-1 17:34

评分

参与人数 1星屑 +20 收起 理由
taroxd + 20 继续赞同

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-5-1 17:28:40 | 显示全部楼层
首先科普一个常识,写脚本尽量不要用到全局变量。(事实上要是我写RGSS我肯定把那些全局变量写成某个类的实例变量)

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

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部