好的,您记录增量时间以及每个记录的帧。最好以 0 的增量时间开始记录第一帧,并假设回放的第一帧相同。
然后在您的更新方法中累积当前的增量时间:
-(void) update:(ccTime)delta
{
if (firstFrame)
{
totalTime = 0;
totalRecordedTime = 0;
firstFrame = NO;
}
else
{
totalTime += delta;
}
totalRecordedTime += [self getRecordedDeltaForFrameIndex:recordedFrameIndex];
if (totalTime > totalRecordedTime)
{
[self advanceRecordedFrameIndex];
}
// alternative:
id recordedFrameData = [self getRecordedFrameForDeltaTime:totalTime];
// apply recorded data ...
}
替代方案:创建一个基于当前时间增量返回或“应用”记录帧的方法。选择记录的总增量时间等于或低于当前总增量时间的帧。
为了更快地搜索帧,请记住最近记录的帧的索引并从那里开始搜索(比较每个帧的增量时间),始终包括最近的帧。
有时这会多次显示相同的记录帧,或者它可能会跳过记录的帧 - 取决于实际的设备帧率和录制期间的帧率。