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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: zx903193387
打印 上一主题 下一主题

[讨论] 你们觉得像我这种带自动存档的游戏怎么样

[复制链接]

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

11
发表于 2015-10-23 00:04: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的解决办法:更改存档机制。感觉略微跑题。但是我在这里重申一遍:小小的计时器不会影响游戏的运行,更不会出现楼主所说的卡顿的情况,你听说的传闻只能说明那个人实现的计时器效率低下,请不要一概而论,并且我个人感觉做一个能让游戏变卡的计时器也是非常困难的。偶尔的存档当然不会卡顿,实际上我自己也比较喜欢在切地图的时候放自动存档上去。总之,请楼主摆正你的观念。实践出真知
最后,以上的方法实现起来都非常简单。如果楼主依然觉得这些方法都不好(或者是费力不讨好),那么大可不必理会我说的东西。

点评

关于4L5L的问题,首先,开那么多档分开储存并没有意义,因为游戏开局都是一样的,而且还有多周目轮回的设置,所以根本没有必要分开储存。  发表于 2015-10-23 05:25
两个存档起到了互相保险的作用,既能够防止忘记存档造成的杯具,也可以在比较小的程度上SL一下  发表于 2015-10-23 05:21
最后,我所设计的是双存档位的,一个是专门的自动存档,一个是专门的手动存档,读档是可以从这两个档里面选一个读  发表于 2015-10-23 05:19
再说,战斗结束和切换地图存档发生的频率又高,我亲自检验也不卡,比据说很卡的计时存档高到不知道哪里去了,我当然不采用了  发表于 2015-10-23 05:05
综合考虑一下我觉得那些做法都不适合使用,所以当然也就舍弃了。  发表于 2015-10-23 05:03
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
345 小时
注册时间
2011-10-13
帖子
414
12
 楼主| 发表于 2015-10-23 04:58:49 | 只看该作者
  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号的队员死亡离队检测

点评

common_event = $data_common_events[5] 一个临时变量读取公共事件5后,在整个方法里用在了哪儿?  发表于 2015-10-23 14:37
LZ的那段 case .... when ....不能换成下面那2句么?  发表于 2015-10-23 14:36
Graphics.wait(fadein_speed / 2) ; $game_temp.fade_type == 0 ? fadein(fadein_speed) : white_fadein(fadein_speed)  发表于 2015-10-23 14:35
姑且点评一下LZ的脚本。  发表于 2015-10-23 14:35
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
451
在线时间
228 小时
注册时间
2015-2-23
帖子
241
13
发表于 2015-10-23 09:44:39 | 只看该作者
本帖最后由 枫の叶 于 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
复制代码

点评

哦,这是XP。  发表于 2015-10-23 09:48
制作XP特效,找我。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
14
发表于 2015-10-23 12:21:44 | 只看该作者
让玩家命名,建立这个名字的玩家的专属存档文件夹。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

Assassin-K

梦石
0
星屑
3603
在线时间
2281 小时
注册时间
2012-5-23
帖子
4065

贵宾

15
发表于 2015-10-23 13:03:37 | 只看该作者
个人认为LZ应该听取一下大家的意见,
从中选择一个简单的方式去实现存档。

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

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

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

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

点评

既然时间有限,那更该做短小精悍的作品。长篇并不适合当前的你。  发表于 2015-10-23 15:43
3个月后,我不能卖出钱,我就得在家人的逼迫下,回工厂上班,整天搞那些操蛋的电路和机械的编程  发表于 2015-10-23 13:42
现在不是一步一步走的问题,我的经济情况根本不允许我一步一步来,我只能一蹴而就。我只有6个月时间,现在只剩下3个月了。  发表于 2015-10-23 13:39
有道理的建议我当然会去听,前面的建议我全都分析过了,全都指出了不合理和不足的地方,很多建议都无谓地增加了技术难度,而且反而降低了效果  发表于 2015-10-23 13:32

◆ROZONE◆
>洛子又要去流浪地球了……
>如果你看到我在线,又没动静,那只能说明我在挂机……
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
16
发表于 2015-10-23 14:58:25 | 只看该作者
存档栏扩展到99个 自动存档放在独立的位置攻击9个 空轨1pc不就是吗 出门都给你存个盘==b
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
290
在线时间
3599 小时
注册时间
2012-2-29
帖子
3385

黄金编剧

17
发表于 2015-10-23 17:51:34 | 只看该作者
本帖最后由 ·雾逝者· 于 2015-10-23 17:58 编辑

我的游戏没法自主存档,系统完全承包存档任务
而且开始新游戏也洗不掉存档,要重新开始只能删文件
每次游戏可能要开启10+次新游戏
作为参考,喵呜喵5的全局变量脚本可能会有帮助
简化 高效 简约 便捷,为用户体验而思考。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
帖子
1747

开拓者

18
发表于 2015-10-23 20:57:04 | 只看该作者
支持自动存档+手动存档的功能。
顺带说一句有很多GAL都是这么做的。
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
345 小时
注册时间
2011-10-13
帖子
414
19
 楼主| 发表于 2015-10-24 02:46:55 | 只看该作者
本帖最后由 zx903193387 于 2015-10-24 06:01 编辑

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 09:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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