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

Project1

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

[已经解决] 请问如何在存档时保存并行事件的进度?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1480
在线时间
406 小时
注册时间
2013-4-8
帖子
41
跳转到指定楼层
1
发表于 2015-4-15 00:35:55 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
今天突然发现在存档的时候,进行了一半的并行事件没有被保存进度
以至读取这个存档时,该事件从头开始执行
比如并行事件的内容是向左移动、向上移动、透明化、向上移动、禁用透明化
在透明化后存档,读取这个存档后该事件会从最前面的“向左移动”开始执行,并且在最开始就是透明的
请问有什么办法可以在存档时同时保存执行的进度吗?

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
发表于 2015-4-15 14:21:31 | 只看该作者
本帖最后由 VIPArcher 于 2015-4-15 14:31 编辑
判约之轮 发表于 2015-4-15 10:45
存档相关的脚本:

#encoding:utf-8
怎么alias掉self修饰的静态函数的方法?我试了很多次最终还是只能复写掉而无法打补丁- -
  1. class << DataManager
  2.   alias_method :old_create_game_objects, :create_game_objects
  3.   def create_game_objects
  4.     oldl_create_game_objects
  5.     #.......
  6.   end
  7. end
复制代码
然后好像默认脚本就有保存执行到的位置的处理。。。其实我也不是很清楚

点评

@喵呜喵5 层主:感谢提醒~最终终于明白作用域是怎么回事,调试成功!  发表于 2015-4-16 08:57
回复楼下点评:  发表于 2015-4-15 23:17
注意他第一行的代码是“class << DataManager”而不是你代码中的“module DataManager”  发表于 2015-4-15 23:16
这个……我试过的,但是不知为何,alias_method和alias不认:self.xxxx这样的参数格式,而:xxxx又会说没有定义- -,简直逼死强迫症  发表于 2015-4-15 15:13
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
帖子
1658
2
发表于 2015-4-15 10:45:29 | 只看该作者
本帖最后由 判约之轮 于 2015-4-16 10:03 编辑

存档相关的脚本:
(经过楼下提醒改写出了兼容性更强的版本,这样如果排序时放在最后面的话,理论上不会和任何其他脚本起冲突了)
RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ DataManager
  4. #------------------------------------------------------------------------------
  5. #  数据库和游戏实例的管理器。所有在游戏中使用的全局变量都在这里初始化。
  6. #==============================================================================
  7. module DataManager
  8.   class << self
  9.     alias_method :create_game_objects_20150416, :create_game_objects
  10.     #--------------------------------------------------------------------------
  11.     # ● 生成各种游戏对象
  12.     #--------------------------------------------------------------------------
  13.     def create_game_objects
  14.       create_game_objects_20150416
  15.       $step               = Hash.new(0)
  16.     end
  17.     #--------------------------------------------------------------------------
  18.     # ● 生成存档内容
  19.     #--------------------------------------------------------------------------
  20.     alias_method :make_save_contents_20150416, :make_save_contents
  21.     def make_save_contents
  22.       contents = make_save_contents_20150416
  23.       contents[:step]          = $step
  24.       contents
  25.     end
  26.     #--------------------------------------------------------------------------
  27.     # ● 展开存档内容
  28.     #--------------------------------------------------------------------------
  29.     alias_method :extract_save_contents_20150416, :extract_save_contents
  30.     def extract_save_contents(contents)
  31.       extract_save_contents_20150416(contents)
  32.       $step               = contents[:step]
  33.     end
  34.   end
  35. end


在事件中需要建立的格式:


数组的下标可以自己写,语法请直接参照Ruby的哈希表(其实冒号加英文字符应该也足够用了吧
记得用完一个变量及时用delete删除,以免存档越来越大

PS:不知是否有大触研究出了怎么alias掉self修饰的静态函数的方法?我试了很多次最终还是只能复写掉而无法打补丁- -


点评

呃,我没注意到你用的是Hash  发表于 2015-4-15 23:37
_(:3」∠)_其实的确是写错了的说,但是这不仅仅是解决一个哟,由于哈希表近乎无限扩展的特性,使用不同的标识符(如$step[:y])就可以保存多个状态  发表于 2015-4-15 15:11
嗯,我要用的并行事件不多  发表于 2015-4-15 14:30
这种方法只能解决一个并行事件,其实不是很推荐。。。。。不过应该可以解决你的问题?  发表于 2015-4-15 14:28
_(:з」∠)_原来如此  发表于 2015-4-15 14:24

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 03:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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