Будучи студентом, я всегда хотел стать разработчиком игры. До сих пор мне удалось изучить основы C++ и SFML 2.1
Для моего первого проекта, решив сделать 2D-RPG-иш-игру, я столкнулся с проблемой, что игровой цикл обновляется так быстро, что если я перемещу их на 1 пиксель на кадр, спрайт будет двигаться быстрее, чем я предполагал.
Я реализовал систему движения, определенную кадром (не уверен, что она называла), что независимо от fps, персонаж движется с одинаковой скоростью.
Тем не менее, я не мог решить проблему (это то, что я прошу), что спрайт не будет двигаться плавно. Что происходит в моей сборке, так это то, что игрок будет перемещаться примерно на 1 пиксель за кадр и может быть прерван другими входами. Как я могу это сделать?
TL; DR: Я хочу перенести свой спрайт, как в игры старой школы RPG, плавно перемещая заданные пиксели (или плитки).
количество циклов, которое может обрабатываться в секунду, будет статистически случайным. Там много больше происходит в компьютере, и время, когда ваша программа будет предоставлена, не гарантируется постоянной. Вы должны своевременно основывать свое движение.
В SFML мне нравится
window.setFramerateLimit(60);
Это даст мне очень хорошую попытку в 60 кадров в секунду. Это достаточно близко к реальности, что оно неотличимо от глаз.
Оттуда я хотел бы предположить, что каждый кадр получит
float timeStep = 1.0f/60.0f.
Я использую этот шаг времени для управления движениями. Поэтому, если я хочу, чтобы мой автомобиль проехал 10 пикселей в секунду, то на каждой итерации большого игрового цикла мы используем timestep.
currentPosition += carSpeed * timeStep