找回密码
 点一下
查看: 1098|回复: 10

想实现一个功能

[复制链接]
发表于 2015-6-30 17:35:19 来自手机 | 显示全部楼层 |阅读模式
有没有办法实现一个功能,比方说:一场游戏打完了,在游戏结束时随机为玩家播放刚刚游戏的精彩片段。头目,小彬等大神来帮帮忙
发表于 2015-6-30 21:10:00 | 显示全部楼层
哇!,好高级
回复

使用道具 举报

发表于 2015-6-30 21:16:35 | 显示全部楼层
本帖最后由 yxxiaobin 于 2015-7-1 10:30 编辑

这个很难实现。粗略的想一下,有这么几个难题:
1.游戏不支持在游戏中直接播放录像,所以不能用录像功能来实现。那么剩余的实现方案基本上就是记录玩家操作和环境状态,然后顺次重复它们。单纯这样做并不算困难,但是还有下边的问题。
2.怎么才算精彩,这个显然是需要算法的。
3.即便是能判断哪个算精彩,重播时也要播放“精彩”瞬间发生以前一小段时间,直接就是“精彩”内容,很突兀。
4.某些技能或武器是涉及到概率的,所以直接进行操作重演仍然有可能出现与原来状态不符的情况,比如原来没出暴击,敌人剩一丝血皮,现在暴击一下,敌人挂掉了等等。
最后总结问题所在:记录操作和环境并不难,但全程记录显然并不现实,我们只能选择性的记录精彩瞬间前后一小段时间。但是精彩瞬间是不可预知的,当算法判定“精彩”发生时,其前边一小段时间已经无法还原了。当然,你也可以采用像行车记录仪一样的模式:循环记录抹除,当记录载体要满时,抹除前边的内容,当判定“精彩”发生时,将其前后一小段时间的记录转存到一个不会被抹除的区域。当需要重播时,调取这一区域的记录就好了。
即便是顺利记录了,也无法控制某些概率情况的出现,除非你有一套对应的武器或技能,在关键时刻换上去,这样的工程量箭支是难以想象的。

这个用文字描述似乎原理很简单,但实现起来很难,可以说,你相当于重做了录像系统,这需要大量的代码,严谨的逻辑,和让人崩溃的调试。为了实现这样一个没有太大实际作用的功能而耗费这样巨大的精力,似乎不太值。
回复

使用道具 举报

 楼主| 发表于 2015-7-4 00:56:53 来自手机 | 显示全部楼层
这么麻烦啊,那还是放弃吧,其实我按照你后面的思路试了一下,效果不是很好,就放弃了
回复

使用道具 举报

发表于 2015-7-4 08:53:46 | 显示全部楼层
有一点你要是做到了就不用担心概率问题:
  1. 在还原当时状态的同时你还需把随机种子的状态也还原。也就是随机种子的初始值和调用了的次数。
复制代码

点评

这种事是不存在的,因为重演不是完整的,是片段的,就算你使用了相同的随机数种子,但是因为游戏历程不同,后边的随机数基本上也是不可能相同的。  详情 回复 发表于 2015-7-6 22:39
回复

使用道具 举报

发表于 2015-7-4 08:57:20 | 显示全部楼层
精彩瞬间如果和dota很类似的话其实还是很好找。例如首杀,tripple kill, monster kill, godlike 的时候~~~ 只要播放这些声音,那就是保存点~ 其他精彩:例如血量很少杀几个,也可以定位时间点。
回复

使用道具 举报

发表于 2015-7-5 00:44:59 | 显示全部楼层
提醒楼上,当“First Blood”(或其他)音效播放的时候,首杀(或相应的击杀)已经完成了,因而“精彩时间”也已经完全过去。根本不能用作保存点。
回复

使用道具 举报

发表于 2015-7-6 22:39:14 | 显示全部楼层
windywel 发表于 2015-7-4 08:53
有一点你要是做到了就不用担心概率问题:

这种事是不存在的,因为重演不是完整的,是片段的,就算你使用了相同的随机数种子,但是因为游戏历程不同,后边的随机数基本上也是不可能相同的。

点评

额...计算机所有的随机数都是伪随机的...种子相同,调用的次数相同,那么结果也会相同的..... 随机函数本来就是这样实现的....  详情 回复 发表于 2015-7-6 22:58
回复

使用道具 举报

发表于 2015-7-6 22:58:33 | 显示全部楼层
yxxiaobin 发表于 2015-7-6 22:39
这种事是不存在的,因为重演不是完整的,是片段的,就算你使用了相同的随机数种子,但是因为游戏历程不同 ...

额...计算机所有的随机数都是伪随机的...种子相同,调用的次数相同,那么结果也会相同的..... 随机函数本来就是这样实现的....

点评

你没明白我的意思,随机数即便种子相同, 也要顺次相同才能一样,比如你用一样的种子,第2次和第10次的就多半不相同。所以当游戏历程不同时,相同的随机数种子也不能产生相同的随机数。事实上,正是因为玩家的参与,  详情 回复 发表于 2015-7-7 19:29
回复

使用道具 举报

发表于 2015-7-6 23:26:28 | 显示全部楼层
这玩意叫暴雪做估计也得想想才做的出
保存游戏状态肯定不行,保存actor的状态还差不多,然后做成实时cutscene
回复

使用道具 举报

发表于 2015-7-7 19:29:23 | 显示全部楼层
本帖最后由 yxxiaobin 于 2015-7-7 19:30 编辑
windywel 发表于 2015-7-6 22:58
额...计算机所有的随机数都是伪随机的...种子相同,调用的次数相同,那么结果也会相同的..... 随机函数本 ...


你没明白我的意思,随机数即便种子相同, 也要顺次相同才能一样,比如你用一样的种子,第2次和第10次的就多半不相同。所以当游戏历程不同时,相同的随机数种子也不能准确的提供相同的随机数。
事实上,正是因为玩家的参与,这种随机才能做到真正的随机,因为玩家的操纵总是不可完美重复的(即使是刻意去重复),是真正的随机。否则只是程序化的东西,几乎都是伪随机的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-23 21:01 , Processed in 0.125379 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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