«Super Meat Boy» - это сложный платформер, недавно вышедший для ПК, требующий исключительного контроля и идеального прыжка в пикселях. Физический код в игре зависит от частоты кадров, которая установлена на 60 кадров в секунду; это означает, что если ваш компьютер не может запустить игру на полной скорости, физика сойдет с ума, в результате чего (среди прочего) ваш персонаж будет работать медленнее и падать сквозь землю. Кроме того, если vsync выключен, игра работает очень быстро.
Могут ли те, кто имеет опыт программирования 2D-игр, объяснить, почему игра была написана таким образом? Разве физический цикл, работающий с постоянной скоростью, не будет лучшим решением? (На самом деле, я думаю, что физический цикл используется для частей игры, так как некоторые из сущностей продолжают нормально двигаться независимо от частоты кадров. С другой стороны, ваш персонаж работает точно [fps / 60] так же быстро.)
Что меня беспокоит в этой реализации, так это потеря абстракции между игровым движком и графическим рендерингом, которая зависит от системных особенностей, таких как монитор, видеокарта и процессор. Если по какой-либо причине ваш компьютер не может справиться с vsync или не может запустить игру со скоростью ровно 60 кадров в секунду, он впечатляюще сломается. Почему шаг рендеринга должен каким-либо образом влиять на физические расчеты? (В настоящее время большинство игр либо замедляют игру, либо пропускают кадры.) С другой стороны, я понимаю, что платформеры старой школы на NES и SNES зависели от фиксированной частоты кадров для большей части их управления и физики. Почему это так, и можно ли создать патформер в этом ключе, не имея зависимости частоты кадров? Обязательно ли происходит потеря точности, если вы отделяете рендеринг графики от остальной части движка?
Спасибо, и извините, если вопрос был запутанным.