Правильный путь - с дельтой (разница между lastTime и сейчас), что-то вроде этого:
CFTimeInterval time;
time = CACurrentMediaTime();
if (lastTime == 0) {
delta = 0.0;
} else {
delta = time - lastTime;
}
lastTime = time;
Но он должен использовать эту дельту для гораздо большего количества вещей в игре, частота кадров всегданепостоянная вещь, поэтому все, что чувствительно ко времени, должно быть смещено дельтой.
Скажем, вы хотите обновить позицию объекта, который имеет скорость, он должен выглядеть примерно так:
objectXPos.pos = delta/targetDelta*objectXSpeed;
Target Delta была бы идеальной частотой кадров, скажем, 60 кадров в секунду дали бы вам targetDelta 1/60 = 0,0167
Таким образом, игра не будет зависеть от плохой производительности.также включите аварийный режим, скажем, кровавая вещь остановилась на секунду или более, и вы можете не обновлять игровую логику, в этом случае это лучше, чем все, что происходит магическим образом для пользователя.Эта часть зависит от типа игры, секунда может быть излишней, возможно, 0,033 с уже слишком много (половина частоты кадров)