游戏的录制与回放

首先,要搞清楚一种设计模式:命令模式

我对命令模式的理解:将所有的操作都封装为对象

游戏的录制:游戏录制其实很简单,就是重新开一把游戏,然后把所有的命令重新执行一遍。

那游戏回放呢,是不是也很简单喽?将回放部分的命令重新执行一遍,对么?嗯。。。这样想是没有错,可是得知道执行前游戏所有的状态吧,游戏录制之所以简单,是因为游戏开始时的状态很容易获取到。但是游戏回放是从游戏中开始执行命令的,因此我们需要获取到回放开始帧的游戏状态。我开始的想法是通过命令的撤回来获取到回放开始帧的游戏状态,但是在实现这个想法的时候遇到了困难。

1:当前游戏运行到800帧,我想回放500帧,那么回放开始帧就是300,可如果300帧这个时候有命令正在执行呢?我的解决方法是给命令添加一个方法ExcuteAt(FrameNo),使命令可以从某一帧开始播放,比如这个命令开始帧是260,那么就让该命令从40帧开始播放,其他的命令都正常播放。

2:如何判断哪些命令正在执行,我们只知道命令的开始帧,而命令的结束帧是很难获取的,因为命令结束的原因有多种,比如我给角色发出了移动命令,那结束原因就有移动到了目标位置、被控制、被击杀等等,虽然可以在该命令的结束位置设置命令结束帧,但我觉得这是个很复杂的工作,而且很容易出错。我的解决方法是单命令模式,并将命令链式存储。也就是说我执行一个命令的时候就将上一个命令结束,如果是被动结束,比如被控制,那么只需将当前进行的命令结束。

展示下效果:


猜你喜欢

转载自blog.csdn.net/w_whenhao/article/details/80680384
今日推荐