Почти все игровые движки обрабатывают обновления, пропуская время с последнего кадра и имея движения и т. Д. ... ведут себя пропорционально времени, любая другая реализация, кроме этой, неисправна.
Хотя предложение CodeInChaos отвечает на ваш вопрос,и может работать частично в некоторых сценариях, это просто плохая практика.
Ограничение частоты кадров до желаемых 60 кадров в секунду будет работать только тогда, когда компьютер работает быстрее.Однако, во-вторых, если фоновое задание израсходует некоторую мощность процессора (например, запускается virusscanner), и ваша игра падает ниже 60 кадров в секунду, все будет идти намного медленнее.Даже при том, что ваша игра может быть идеально играема на скорости 35 кадров в секунду, это сделает невозможным играть в нее, потому что все идет наполовину быстрее.
Такие вещи, как сон, не помогут, потому что они останавливают ваш процесс в пользу другого процесса., этот процесс должен быть сначала остановлен, sleep (1ms) просто означает, что после 1ms ваш процесс возвращается в очередь, ожидающую разрешения на выполнение, поэтому sleep (1ms) может легко занять 15ms в зависимости от других запущенных процессов и их приоритетов.
Поэтому я предлагаю вам как можно быстрее использовать переменную "elapsedSeconds", которую вы используете во всех ваших методах обновления, чем раньше вы ее встроили, тем меньше будет работы, это также обеспечит совместимость.с МОНО.
Если у вас есть 2 части вашего движка, скажем, физика и движок рендеринга, и вы хотите запустить их на разных частотах кадров, просто посмотрите, сколько времени прошло с последнего кадра, а затем решите обновитьфизический движок или нет, если вы включите время с момента последнего обновления в свои вычисления, у вас все будет хорошо.
Также никогда не рисуйте чаще, чем двигаете.Рисовать в 2 раза один и тот же экран бесполезно, поэтому если единственный способ что-то изменить на экране, это обновить физический движок, а затем синхронизировать обновления движка рендеринга и физического движка.