OK、記録された各フレームとともにデルタ時間を記録します。デルタ タイム 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 ...
}
別の方法: 現在のタイム デルタに基づいて、記録されたフレームを返すか「適用」するメソッドを作成します。記録された合計デルタ時間が現在の合計デルタ時間以下であるフレームを選択します。
フレームの検索を高速化するには、最後に記録されたフレームのインデックスを記憶し、そこから検索を開始します (各フレームのデルタ時間を比較します)。常に最新のフレームも含めます。
実際のデバイスのフレームレートと記録中のフレームレートによっては、同じ記録済みフレームが複数回表示されるか、記録済みフレームがスキップされることがあります。