我正在从事赛车游戏,只是实现了一个幽灵精灵来重播过去的比赛。我使用物理引擎,经过大量阅读后得出的结论是,存储重影数据以进行重放的最佳方法是在给定的时间点记录汽车的位置和旋转,例如此处所述:https:// gamedev。 stackexchange.com/a/8380/26261。
但是,在重播期间找到这些时间点的一种好方法是什么?一个示例是具有以下数据的记录:
time: +3.19932 (seconds since race start)
position: 180,40 (position at that time)
rotation: 30.4 (rotation at that time)
但是我有几个问题:
重新播放时,不太可能再次达到3.19932的确切时间点-更有可能的是,我的时间点大约是3.1,必须找到最接近的匹配记录。插值时,即使是上下最接近的匹配。听起来效率很低,很费时间吗?
我可以在哪个列表结构中存储这些记录以供以后重播?数组?难道不是说比赛时间越长,匹配特定时间记录的搜索时间会增加吗?
我应该为时间点使用哪个频率?每个帧都是-我猜想是过大了,相反,我应该保存,即每第n帧并在它们之间进行插值,这使存储问题在2中更加困难。
那么这个想法甚至是正确的方法吗?如果是,我如何有效地存储和检索数据?请注意,我通常希望使用上面的数据结构,而不是确定性的游戏状态和记录用户输入等。
谢谢你的帮助!
编辑:我意识到我应该描述我使用的环境:iPhone的Cocos2D。有一种方法update:(ccTime)delta
。理想情况下,每1/60秒调用一次此方法,但不能保证- delta
是自上次游戏结束以来经过的实际时间,并且可能多于或少于1/60。我想用这种方法存储当前的游戏状态。