Project1

标题: 你们觉得像我这种带自动存档的游戏怎么样 [打印本页]

作者: zx903193387    时间: 2015-10-22 17:28
标题: 你们觉得像我这种带自动存档的游戏怎么样
我作为一个存档会死星人,经常死于打了半天没存档结果死了白打,所以我在我的游戏中丧心病狂地加入了切换地图和结束战斗自动存档的机制,但是新的问题又出现了。因为我这个游戏是打算做成一个很长的,多周目的游戏,每次周目大概要打个十来个小时,万一玩家脑子抽了选了开始新游戏,那以前打的那么长时间的存档不就GG思密达了,所以我又加入了通过某个可以到处买的消耗品来额外存档的机制,也就是一共有两个档位,一个是系统自动存的档,一个是玩家用物品存的档。但是我还是觉得很不妥,总感觉好像还有隐患,然后出了什么问题玩家肯定又会把这口锅甩我脸上……所以说大家以一个玩家的角度对此怎么看?
作者: lrq20000421    时间: 2015-10-22 17:36
同为存档会死星人表示由衷的赞同
作者: LBQ    时间: 2015-10-22 17:42
程序员表示你的游戏应该加入Ctrl+S快捷键
作者: RaidenInfinity    时间: 2015-10-22 17:43
克服脑抽选新游戏问题的建议:(这是我个人的方法 原理基本上就是新游戏用新档位)
开始游戏时判定有没有存档,没有的话直接开启新游戏
如果已经有存档了 直接开启继续游戏页面
要开新游戏就选空的档位
作者: MeowSnow    时间: 2015-10-22 17:46
开始游戏时选择一个档位,以后自动存档都存到这个档位里,不就好了。(不要说不小心开始游戏又不下心选择了重复的档位。)
作者: 三途亚梦    时间: 2015-10-22 17:51
点开始游戏的时候说明一下会覆盖之前的进度完全重0开始,询问一下yes或no不就好了吗。
作者: zx903193387    时间: 2015-10-22 18:01
{:2_276:}
那你们觉得我现在这种方式还可以么……
脚本改起来太麻烦了……
作者: 喵呜喵5    时间: 2015-10-22 18:37
增加自动存档,保留固定存档,所有的自动存档保存到一个独立的档位,其他固定存档随便存
作者: 枫の叶    时间: 2015-10-22 19:20
建议不是每次战斗什么的就自动存档,可以增加个自动存档间隔时间设置,
玩家可以自己设置间隔多久自动存档一次,当然,也有上限和下限,比如上限 1 小时;下限 1 分钟 什么的。
作者: chd114    时间: 2015-10-22 22:47
我觉得楼主这个游戏挺好的
作者: RyanBern    时间: 2015-10-23 00:04
本帖最后由 RyanBern 于 2015-10-23 14:10 编辑

感觉楼主并没有太听得进去大部分人的建议啊。
看了楼上的回帖,我大致猜一下楼主要的效果(不知道我的理解是否正确):首先档位只有一个的,并且玩家不能使用菜单进行随便存档(否则岂不是给玩家使用S&L大法的机会??)。然后,存档的时机为切换地图时或结束战斗后。最后,由于是有多周目,所以二周目的存档也要用一周目存档的地方。
个人觉得4楼和5楼的方法最好,6楼亚梦的办法适用于不太擅长使用脚本的人。具体来说,就是一个游戏只跟一个档位,以后所有的地方都用这个档位来存(这也是大型单机游戏常用做法)。但是,这样也不能完全防S&L大法,因为总有一些无聊之人利用复制+粘贴方法备份存档。不过,正常玩家也不会这么做。
另外,请不要随便对9楼的办法做出负面的评价。这个“会浪费系统资源”“拖慢游戏运行”的说法完全就没有依据,我相信楼主肯定没有亲自试验过这种办法,没有真正做过一个计时器。否则也不会出这样的结论。例如在XP中,默认脚本会显示一个“运行时间”,这个就是一个计时器,我并没看出运行完这个之后游戏就会卡。相比,倒是不断存档游戏会卡一点,因为对文件的操作要远远慢于对内存数据的操作。
最后,可能是楼主自身的原因,弄脚本麻烦极了,但是一个自动存档脚本并不是非常难弄。
RUBY 代码复制
  1. class Scene_Save
  2.   def autosave(index)
  3.     filename = "Save#{index}.rxdata"
  4.     file = File.open(filename, "wb")
  5.     write_save_data(file)
  6.     file.close
  7.   end
  8. end

然后需要自动存档的时机是切换地图或者是战斗结束。那就请搜索这两个地方:
Scene_Map#transfer_player
Scene_Battle#battle_end
自动存档脚本使用方法:
RUBY 代码复制
  1. save = Scene_Save.new
  2. save.autosave(存档档位)

在适当的位置加上这两句就可以自动存档。


那我重新写一下回帖。
楼主的要求:游戏只有一个档位,但是不小心点击“新游戏”会覆盖之前打过的存档,这样的话会造成进度的丢失。
楼主的解决办法:另外开一个单独的存档,实际则使用游戏中的道具进行储存(道具必须为消耗品,或者是在指定场合下才能使用,否则没有意义),这样一不小心点了“新游戏”,旧档被覆盖了还有备用档可用。
评价楼主的解决办法:除了使用道具存档这个设定比较奇怪以外,其余都还好。缺点在于游戏只有一个存档,如果哪天玩家心血来潮想从一周目重新打,又不想失去原来的进度,这样迫使玩家只能对存档进行复制粘贴。
6L亚梦的解决办法:在点击“新游戏”时游戏会给出警告,由玩家觉得是否继续。
评价亚梦的解决办法:这样可以极大减小错误操作发生频率,也省去了“使用道具存档”的麻烦设定,但是缺点还是游戏只能有一个档,没有办法做到在保留旧存档的前提下重新开始游戏。
4L5L的解决办法:对每个新开的游戏设定固定档位,以后再这个游戏中的自动存档都存在那个位置上。
评价:可以解决楼主提出的问题,但是不知道为什么楼主觉得这样增加档位很不好,每个档位都是独立的,不会互相影响。在一个档上的进度也不会覆盖到另一个档去。许多大型单机游戏不都是这个机制么?楼主难道是觉得这个方案增加了技术难度?好吧,当这些人都没说。
9L的解决办法:更改存档机制。感觉略微跑题。但是我在这里重申一遍:小小的计时器不会影响游戏的运行,更不会出现楼主所说的卡顿的情况,你听说的传闻只能说明那个人实现的计时器效率低下,请不要一概而论,并且我个人感觉做一个能让游戏变卡的计时器也是非常困难的。偶尔的存档当然不会卡顿,实际上我自己也比较喜欢在切地图的时候放自动存档上去。总之,请楼主摆正你的观念。实践出真知
最后,以上的方法实现起来都非常简单。如果楼主依然觉得这些方法都不好(或者是费力不讨好),那么大可不必理会我说的东西。
作者: zx903193387    时间: 2015-10-23 04:58
  1. class Scene_Map < Scene_Base
  2.   def post_transfer  #场所移动后自动储存
  3.     case $game_temp.fade_type
  4.     when 0
  5.       Graphics.wait(fadein_speed / 2)
  6.       fadein(fadein_speed)
  7.     when 1
  8.       Graphics.wait(fadein_speed / 2)
  9.       white_fadein(fadein_speed)
  10.     end
  11.     @map_name_window.open
  12.     common_event = $data_common_events[5]
  13.     DataManager.save_game_without_rescue(0)
  14. end
  15. end
复制代码
姑且分享一下我的切换场景自动存档的代码,其中那个common_event = $data_common_events[5]是执行公共事件5号的队员死亡离队检测
作者: 枫の叶    时间: 2015-10-23 09:44
本帖最后由 枫の叶 于 2015-10-23 09:56 编辑
  1. module Fy
  2.   def auto_save
  3.     f = File.open("Auto_save.rxdata", "wb")
  4.     characters = []
  5.     $game_party.actors.each{|actor| characters.push([actor.character_name, actor.character_hue])}
  6.     Marshal.dump(characters, f)
  7.     Marshal.dump(Graphics.frame_count, f)
  8.     Marshal.dump($game_system, f)
  9.     Marshal.dump($game_switches, f)
  10.     Marshal.dump($game_variables, f)
  11.     Marshal.dump($game_self_switches, f)
  12.     Marshal.dump($game_screen, f)
  13.     Marshal.dump($game_actors, f)
  14.     Marshal.dump($game_party, f)
  15.     Marshal.dump($game_troop, f)
  16.     Marshal.dump($game_map, f)
  17.     Marshal.dump($game_player, f)
  18.     f.close
  19.   end
  20. end
  21. class Game_System; attr_accessor :auto_save_count ; end
  22. class Scene_Map
  23.   alias update_fy update
  24.   def update
  25.     update_fy
  26.     if Graphics.frame_count % Graphics.frame_rate == 0
  27.       $game_system.auto_save_count.nil? ? $game_system.auto_save_count = 1 :
  28.       $game_system.auto_save_count += 1
  29.     end
  30.     Fy.auto_save if $game_system.auto_save_count != nil and
  31.     $game_system.auto_save_count % 600 == 0 # 地图场景10分钟。
  32.   end
  33. end
复制代码

作者: 汪汪    时间: 2015-10-23 12:21
让玩家命名,建立这个名字的玩家的专属存档文件夹。
作者: Mic_洛洛    时间: 2015-10-23 13:03
个人认为LZ应该听取一下大家的意见,
从中选择一个简单的方式去实现存档。

还有,建议LZ在没有足够的项目经验之前,不要做太长、太复杂的游戏,
在没有走通、熟悉开发的流程,却在某项功能、某些细节处死扣是非常致命的。

听我一劝,先做几个“玩法为主的小游戏”或“2小时以内的短篇”,做好做极致了,
再去写点像样的策划案、组起团队,做稍微大点、长点的作品。

即便你点子再好,能力再强,也是需要时间经验的积累,
在不成熟的情况下想要实现心中的游戏是异常艰难的。

饭要一口一口的吃,路要一步一步的走,您觉得呢?

作者: 89444640    时间: 2015-10-23 14:58
存档栏扩展到99个 自动存档放在独立的位置攻击9个 空轨1pc不就是吗 出门都给你存个盘==b
作者: ·雾逝者·    时间: 2015-10-23 17:51
本帖最后由 ·雾逝者· 于 2015-10-23 17:58 编辑

我的游戏没法自主存档,系统完全承包存档任务
而且开始新游戏也洗不掉存档,要重新开始只能删文件
每次游戏可能要开启10+次新游戏
作为参考,喵呜喵5的全局变量脚本可能会有帮助
作者: 落雪鸦杀    时间: 2015-10-23 20:57
支持自动存档+手动存档的功能。
顺带说一句有很多GAL都是这么做的。
作者: zx903193387    时间: 2015-10-24 02:46
本帖最后由 zx903193387 于 2015-10-24 06:01 编辑

我觉得我有些东西没有说清楚,所以我重新整理一下,再清楚,具体地说一下我的机制,顺便加上我今天新修改的方案
1.首先,今天修改过后,游戏有三个存档栏位,分别用于:1号用于游戏正常流程中系统自动的,没有系统提示的自动存档。2号用于每一周目开始前系统没有系统提示的自动存档。3号用于使用道具的,有系统提示的手动存档。在读档界面中,这三个存档位可以自由地进行读取。
2.每一周目的难度是完全相同的只不过开始新的周目之前,可以领取上一周目完成某些剧情所得到的奖励,但是背包物品和人物等级不能继承。那些奖励是玩家自主领取的。你要是想强行模拟没有奖励的一周目的艰辛,可以不领取那些奖励,所以别再说什么以后想玩一周目很不方便的问题了!
3.我之所以对存档进行这些限制的原因,首先是为了排除打了很久忘记存档的损失;其次,是一定程度上防止玩家对于某些偏离真结局的选择的反悔和支线剧情的回避就像GAL一样,无论是主线还是支线,好结局还是坏结局,都是作者的心血,我不希望玩家一路SL回避掉所有偏离真结局的剧情,一路直接打到真结局。所以我不仅对存档做出了限制,还加入了完成某些剧情之后下一周目开始时可以获得的奖励
4.别没头没脑地说“为什么不用什么什么方法,那多好”我现在把所有这种存档设计的方式的目的和优势都介绍出来了。如果你觉得你所知道的方法更好,更适合,请摆事实讲道理好么?
5.我说的这个的存档机制不是一个想象设定,而是一个已经付诸现实的,在程序层面已经完成的机制,所以不需要别人教我这种存档机制应该怎么编写
6.如果你想针对我的想法提出异议,或者是作为一个玩家想发表对这种游戏存档机制的看法请先把上面所有的话全部看完
最后,针对某些朋友之前的回复,我在这里统一正式回复一下
首先感谢5L的回复,开始新游戏会删除存档的提示我之前是真没有想到这茬子,这样更保险了
关于定时器保存的问题,我的意思是那种方法有没有我没有试过,我认同这也许是一种可以运行的方案,但是我的切换地图和战斗结束存档触发频率更加高,而且根据实际测试并没有BUG和卡顿,在我的游戏中是一种已经得到比较大幅度完善和成熟的一种方法,我没有任何理由去抛弃它而去重新选择使用计时器保存法而且计时器存档会卡而且有BUG是听别人说的,他说不行,我又没有闲到看到别人说不行还非要去证明一下
我承认我在各个方面都表述得很含糊不清,造成了非常多方面的误解,所以我先道歉。我喜欢跟技术人员讨论问题,因为这可以让我发现非常多不足的地方。表述不清是我的锅,这锅我背了。
还有脚本不是我自己写的,所以别跟我说脚本问题,我不懂。我只是在脚本基础上进行了类似于土法炼钢的改造并且测试可用,没有发现BUG
最后游戏的制作进程已经完成60%以上了,所以别建议什么先做小游戏熟悉熟悉,我10年前就开始熟悉RM了。我是来讨论一下技术层面的事情,别对我的职业生涯妄加评论好么,我是一个成年人,大学毕业后在正规企业里工作了一年多的社会人,我知道自己在干什么




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