2D-платформеры: почему физика зависит от частоты кадров?

«Super Meat Boy» - сложный платформер, недавно вышедший для ПК, требующий исключительного контроля и прыжков с точностью до пикселя. Код физики в игре зависит от частоты кадров, которая зафиксирована на уровне 60 кадров в секунду; это означает, что если ваш компьютер не может запустить игру на полной скорости, физика сойдет с ума, в результате чего (среди прочего) ваш персонаж будет бежать медленнее и проваливаться сквозь землю. Кроме того, если vsync выключен, игра работает очень быстро.

Могут ли те, кто имеет опыт программирования 2D-игр, помочь объяснить, почему игра была закодирована таким образом? Разве физический цикл, работающий с постоянной скоростью, не был бы лучшим решением? (На самом деле, я думаю, что в некоторых частях игры используется физический цикл, поскольку некоторые объекты продолжают двигаться нормально независимо от частоты кадров. Ваш персонаж, с другой стороны, работает точно [fps / 60] так же быстро.)

Что беспокоит меня в этой реализации, так это потеря абстракции между игровым движком и графическим рендерингом, которая зависит от системных вещей, таких как монитор, видеокарта и процессор. Если, по какой-то причине ваш компьютер не может обрабатывать vsync или не может запускать игру со скоростью точно 60 кадров в секунду, он сильно сломается. Почему этап рендеринга каким-либо образом должен влиять на вычисления физики? (Большинство игр в настоящее время либо замедляют игру, либо пропускают кадры.) С другой стороны, я понимаю, что платформеры старой школы на NES и SNES зависели от фиксированной частоты кадров для большей части управления и физики. Почему это так, и возможно ли создать патформер в этом ключе без зависимости от частоты кадров? Обязательно ли будет потеря точности, если вы отделите рендеринг графики от остальной части движка?

Спасибо и извините, если вопрос запутал.

7
задан Archagon 27 December 2010 в 19:55
поделиться