设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4083|回复: 8
打印 上一主题 下一主题

[已经解决] 如何保持$全局变量的值?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
85
在线时间
210 小时
注册时间
2013-7-26
帖子
346
跳转到指定楼层
1
发表于 2014-10-4 11:21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
$ 全局变量的值 存档以后读档 值就没了 重新了

Lv4.逐梦者

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

2
发表于 2014-10-4 11:56:59 | 只看该作者
因为存档不存你自己定义的变量吧 (或许? 一定)
你可以把那个全局变量换成游戏初始脚本里面定义全局变量数组之一 $variables[n]=xxx 你有懂我再说什么的吧
也可以把那个变量储存为文件 每次判断时读取一下就行了

点评

谢谢了  发表于 2014-10-4 12:04
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

3
发表于 2014-10-4 12:28:20 | 只看该作者
也可以直接修改要存档的东西 找到脚本框下 Scene_Save 一栏 里面最下面的    Marshal.dump(variable_name, file) 可以照样添加
比方加个Marshal.dump($xx, file)
有存档就要有读取 然后去Scene_Load一栏   找到     variable_name        = Marshal.load(file)  也是依样添加
对应上面就是  $xx        = Marshal.load(file)

点评

我就是想到这个办法,但是...旧的存档就废了。  发表于 2014-10-4 13:11

评分

参与人数 1星屑 +200 收起 理由
myownroc + 200 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2014-10-4 13:24:12 | 只看该作者
为什么忘了$game_variables?
$game_variables表面上看只能存数字,其实它可以存任何可序列化的对象

点评

我现在用这个…… http://rm.66rpg.com/thread-372131-1-1.html  发表于 2014-10-5 11:59
所以我现在都改用$game_self_switches了,Hash表总不会有错  发表于 2014-10-4 17:17
‘我要$game_variables[5..15]!’那一切全完了 所以还是自己处理自己一块比较简明  发表于 2014-10-4 14:01
局限就在假如有别的脚本插入也有全局变量 修改存档机制会更加灵活 否则这里一个$game_variables[0,10] 那里一个$game_variables[11..20] 然后突然一个脚本说  发表于 2014-10-4 14:00
没关系,$game_variables这么好用的东西应当值得推广  发表于 2014-10-4 13:50
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

5
发表于 2014-10-5 10:28:11 | 只看该作者
因为这个没有存入存档
  1. #==============================================================================
  2. # ■ Scene_Save
  3. #------------------------------------------------------------------------------
  4. #  处理存档画面的类。
  5. #==============================================================================

  6. class Scene_Save < Scene_File
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super("要保存到这个文件吗?")
  12.   end
  13.   #--------------------------------------------------------------------------
  14.   # ● 确定时的处理
  15.   #--------------------------------------------------------------------------
  16.   def on_decision(filename)
  17.     # 演奏存档 SE
  18.     $game_system.se_play($data_system.save_se)
  19.     # 写入存档数据
  20.     file = File.open(filename, "wb")
  21.     write_save_data(file)
  22.     file.close
  23.     # 如果被事件调用
  24.     if $game_temp.save_calling
  25.       # 清除存档调用标志
  26.       $game_temp.save_calling = false
  27.       # 切换到地图画面
  28.       $scene = Scene_Map.new
  29.       return
  30.     end
  31.     # 切换到菜单画面
  32.     $scene = Scene_Menu.new(4)
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 取消时的处理
  36.   #--------------------------------------------------------------------------
  37.   def on_cancel
  38.     # 演奏取消 SE
  39.     $game_system.se_play($data_system.cancel_se)
  40.     # 如果被事件调用
  41.     if $game_temp.save_calling
  42.       # 清除存档调用标志
  43.       $game_temp.save_calling = false
  44.       # 切换到地图画面
  45.       $scene = Scene_Map.new
  46.       return
  47.     end
  48.     # 切换到菜单画面
  49.     $scene = Scene_Menu.new(4)
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 写入存档数据
  53.   #     file : 写入用文件对像 (已经打开)
  54.   #--------------------------------------------------------------------------
  55.   def write_save_data(file)
  56.     # 生成描绘存档文件用的角色图形
  57.     characters = []
  58.     for i in 0...$game_party.actors.size
  59.       actor = $game_party.actors[i]
  60.       characters.push([actor.character_name, actor.character_hue])
  61.     end
  62.     # 写入描绘存档文件用的角色数据
  63.     Marshal.dump(characters, file)
  64.     # 写入测量游戏时间用画面计数
  65.     Marshal.dump(Graphics.frame_count, file)
  66.     # 增加 1 次存档次数
  67.     $game_system.save_count += 1
  68.     # 保存魔法编号
  69.     # (将编辑器保存的值以随机值替换)
  70.     $game_system.magic_number = $data_system.magic_number
  71.     # 写入各种游戏对像
  72.     Marshal.dump($game_system, file)
  73.     Marshal.dump($game_switches, file)
  74.     Marshal.dump($game_variables, file)
  75.     Marshal.dump($game_self_switches, file)
  76.     Marshal.dump($game_screen, file)
  77.     Marshal.dump($game_actors, file)
  78.     Marshal.dump($game_party, file)
  79.     Marshal.dump($game_troop, file)
  80.     Marshal.dump($game_map, file)
  81.     Marshal.dump($game_player, file)
  82.   end
  83. end
复制代码
这里面有一句
  1. Marshal.dump($game_variables, file)
复制代码
就是用来存变量的···如果去掉的话···

所以只要用同样的方法复制和添加类似的这样一句
  1. Marshal.dump($全局变量, file)
复制代码
其中,
  1. $全局变量
复制代码
是自己的那个要存的全局变量的名字
然后还没结束呢
  1. #==============================================================================
  2. # ■ Scene_Load
  3. #------------------------------------------------------------------------------
  4. #  处理读档画面的类。
  5. #==============================================================================

  6. class Scene_Load < Scene_File
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     # 再生成临时对像
  12.     $game_temp = Game_Temp.new
  13.     # 选择存档时间最新的文件
  14.     $game_temp.last_file_index = 0
  15.     latest_time = Time.at(0)
  16.     for i in 0..3
  17.       filename = make_filename(i)
  18.       if FileTest.exist?(filename)
  19.         file = File.open(filename, "r")
  20.         if file.mtime > latest_time
  21.           latest_time = file.mtime
  22.           $game_temp.last_file_index = i
  23.         end
  24.         file.close
  25.       end
  26.     end
  27.     super("要载入哪个文件?")
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 确定时的处理
  31.   #--------------------------------------------------------------------------
  32.   def on_decision(filename)
  33.     # 文件不存在的情况下
  34.     unless FileTest.exist?(filename)
  35.       # 演奏冻结 SE
  36.       $game_system.se_play($data_system.buzzer_se)
  37.       return
  38.     end
  39.     # 演奏读档 SE
  40.     $game_system.se_play($data_system.load_se)
  41.     # 写入存档数据
  42.     file = File.open(filename, "rb")
  43.     read_save_data(file)
  44.     file.close
  45.     # 还原 BGM、BGS
  46.     $game_system.bgm_play($game_system.playing_bgm)
  47.     $game_system.bgs_play($game_system.playing_bgs)
  48.     # 刷新地图 (执行并行事件)
  49.     $game_map.update
  50.     # 切换到地图画面
  51.     $scene = Scene_Map.new
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 取消时的处理
  55.   #--------------------------------------------------------------------------
  56.   def on_cancel
  57.     # 演奏取消 SE
  58.     $game_system.se_play($data_system.cancel_se)
  59.     # 切换到标题画面
  60.     $scene = Scene_Title.new
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 读取存档数据
  64.   #     file : 读取用文件对像 (已经打开)
  65.   #--------------------------------------------------------------------------
  66.   def read_save_data(file)
  67.     # 读取描绘存档文件用的角色数据
  68.     characters = Marshal.load(file)
  69.     # 读取测量游戏时间用画面计数
  70.     Graphics.frame_count = Marshal.load(file)
  71.     # 读取各种游戏对像
  72.     $game_system        = Marshal.load(file)
  73.     $game_switches      = Marshal.load(file)
  74.     $game_variables     = Marshal.load(file)
  75.     $game_self_switches = Marshal.load(file)
  76.     $game_screen        = Marshal.load(file)
  77.     $game_actors        = Marshal.load(file)
  78.     $game_party         = Marshal.load(file)
  79.     $game_troop         = Marshal.load(file)
  80.     $game_map           = Marshal.load(file)
  81.     $game_player        = Marshal.load(file)
  82.     # 魔法编号与保存时有差异的情况下
  83.     # (加入编辑器的编辑过的数据)
  84.     if $game_system.magic_number != $data_system.magic_number
  85.       # 重新装载地图
  86.       $game_map.setup($game_map.map_id)
  87.       $game_player.center($game_player.x, $game_player.y)
  88.     end
  89.     # 刷新同伴成员
  90.     $game_party.refresh
  91.   end
  92. end
复制代码
在Scene_Load里面还有类似这样的句子
  1. $game_variables     = Marshal.load(file)
复制代码
同样的,去掉
  1. $game_variables     = Marshal.load(file)
复制代码
,你读档就会发现···变量变成了···
还是添加类似
  1. $全局变量     = Marshal.load(file)
复制代码
的东西,需要注意的是
  1. $全局变量
复制代码
需要和存档时的那个
  1. $全局变量
复制代码
的名称保持一致,否则就会出现不能读取的错误···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
6
发表于 2014-10-7 15:52:15 | 只看该作者
本帖最后由 寒冷魔王 于 2014-10-7 15:54 编辑
chd114 发表于 2014-10-5 10:28
因为这个没有存入存档这里面有一句就是用来存变量的···如果去掉的话···

所以只要用同样的方法复制和 ...


$game_variable=$全局变量
或者加个外壳也可以。
比如
RUBY 代码复制
  1. def varx(x,y,inc)
  2.   $game_variable[x][y] = inc
  3. end
  4. varx(x,y,$全局变量)

然后再定义一个class Data_Var
设定各种方法输入输出进行读取写入操作

看起来很麻烦其实用起来很简便的说~
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

7
发表于 2014-10-7 15:53:38 | 只看该作者
寒冷魔王 发表于 2014-10-6 22:52
$game_variable=$全局变量
或者加个外壳也可以。
比如

那还弄什么全局变量···这样套不是在折腾人吗- -|||
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
8
发表于 2014-10-7 15:56:01 | 只看该作者
chd114 发表于 2014-10-7 15:53
那还弄什么全局变量···这样套不是在折腾人吗- -|||


全局变量为了方便观看。
比如
  1. $勇者属性 = 2
  2. #这样写
  3. def varx(x,y,inc)
  4. return $game_variable[x][y] = inc
  5. end
  6. $勇者属性 =varx(1,1,2)
复制代码
或者用一个公共事件随时=

点评

要看的时候直接P不是一样吗···  发表于 2014-10-7 16:07
因为制作的是样板,需要方便使用……  发表于 2014-10-7 16:03
别笑……我的Mota·RMXP系统就是打算这么做的……  发表于 2014-10-7 16:03
······  发表于 2014-10-7 16:00
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
9
发表于 2019-11-29 09:10:07 | 只看该作者
chd114 发表于 2014-10-5 10:28
因为这个没有存入存档这里面有一句就是用来存变量的···如果去掉的话···

所以只要用同样的方法复制和 ...

请问下按照这个方法那要是存多个全局变量改咋弄呢?还有那个variable改掉后会有什么影响呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 10:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表