Система воспроизведения для cocos2d с коррекцией FPS

Я создаю систему воспроизведения для моей игры cocos2d-x, она тоже использует box2d.

Игра недетерминированная, поэтому я не могу сохранить пользовательские действия и воспроизвести их, поэтому я занимаюсь сохранением положения и угла спрайта для каждого временного шага в потоке.

Теперь у меня есть файлы воспроизведения в следующем формате

x,y,angle\r\n

Каждая строка представляет состояние спрайта на заданном временном шаге.

Теперь, когда я воспроизвожу его обратно на том же устройстве, все идеально, но, конечно, жизнь не так проста, поэтому возникает проблема, если я хочу воспроизвести ее на разных частотах кадров, как это может произойти?

Есть ли умный способ справиться с этой проблемой?

У меня тоже нет фиксированного временного шага, я скоро его реализую, чтобы вы могли рассмотреть фиксированный временной шаг в своем ответе 🙂

Спасибо !

0

Решение

Хорошо, вы записываете дельта-время вместе с каждым записанным кадром. Лучше всего начать запись первого кадра с дельта-временем 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 ...
}

Альтернатива: создать метод, который возвращает или «применяет» записанный кадр на основе текущей дельты времени. Выберите кадр, чье общее записанное время дельты равно или меньше текущего общего времени дельты.

Чтобы ускорить поиск кадра, запомните индекс самого последнего записанного кадра и начните поиск оттуда (сравните дельта-время каждого кадра), всегда включая также самый последний кадр.

Иногда это будет отображать один и тот же записанный кадр несколько раз, или он может пропускать записанные кадры — в зависимости от фактической частоты кадров устройства и частоты кадров во время записи.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector