如何实现游戏录像功能

比如 一场游戏的演算的参数只有一个 就是时间

那么如果给定一个时间点 比如1210214毫秒 那这个时间点的所有节点的位置肯定是能通过游戏本身的逻辑算出来的

游戏本身用的随机种子也是这个时间参数,所以同一时间,随机出来的数也是永远一样

但理论是这样却不知道怎么实现,比如 一个节点以每秒1米的速度先向右飞行2秒,然后以每秒1米的速度再向下飞行2秒,那么理想状态是4秒之后再给节点在原来右下角的位置,但实际情况如果向右飞行的时候卡顿了4秒的话那么4秒之后再给节点只会在原来右边2米的位置

这种类似的问题怎么解决呢,如果解决了不仅录像能用,服务器也能用,玩家之间的PK同步问题也能用,会不会dota1和皇室战争就是这样做的呢,我看卡顿的时候AI还在继续打,也就是说客户端是继续模拟的

按帧算按帧算

这样更不行啊。。。特别卡的话节点慢的要死 而且服务器帧跟客户端帧更不同步了

游戏 replay 记录的内容一般是:

  1. 随机数种子
  2. 带时间戳的用户输入

在 replay 重放时,由一个单独计时的输入模拟器按照时间戳的时间依次重现用户输入。至于受帧率影响导致运动结果不准确这一点应该由游戏的核心系统负责解决,和 replay 系统没有太大关系,也就是说,就算是玩家实时在玩的时候如果帧率出现波动,也不应该影响玩家按时输入后的运动结果。

具体的方法最简单的就是 update(dt) 的时候按照 dt 的参考来计算位移,如果发现有用 action 系统导致运动不平滑的情况可以报 bug。

1赞

“如果发现有用 action 系统导致运动不平滑的情况可以报 bug”这句话是啥意思呢,不平滑不是正常的吗,比如手机卡了就不平滑了呗,报bug让自己知道也没有办法解决问题啊,,,dt的时间是不确定的,如果卡的话会很大,就像我上面举的例子,如果卡了4秒那么dt就是4,那么就会出现我上面说的误差了。。。

help~666666

如果编程正确,手机卡了只会导致当前帧静止一瞬间,不会导致最终运动结果有任何区别

卡4秒的话正常情况下应该先解决卡的问题吧,实在解决不了再添加一个事后补正的逻辑

4秒只是举的一个放大的例子,其实有可能是4毫秒。。。