C ++ и SFML плавно перемещают спрайты

0

Будучи студентом, я всегда хотел стать разработчиком игры. До сих пор мне удалось изучить основы C++ и SFML 2.1

Для моего первого проекта, решив сделать 2D-RPG-иш-игру, я столкнулся с проблемой, что игровой цикл обновляется так быстро, что если я перемещу их на 1 пиксель на кадр, спрайт будет двигаться быстрее, чем я предполагал.

Я реализовал систему движения, определенную кадром (не уверен, что она называла), что независимо от fps, персонаж движется с одинаковой скоростью.

Тем не менее, я не мог решить проблему (это то, что я прошу), что спрайт не будет двигаться плавно. Что происходит в моей сборке, так это то, что игрок будет перемещаться примерно на 1 пиксель за кадр и может быть прерван другими входами. Как я могу это сделать?

TL; DR: Я хочу перенести свой спрайт, как в игры старой школы RPG, плавно перемещая заданные пиксели (или плитки).

  • 3
    Возможно, вам повезет больше на gamedev.stackexchange.com.
  • 0
    Обычно вы хотите, чтобы движение основывалось на времени, а не на кадрах.
Показать ещё 3 комментария
Теги:

1 ответ

0

количество циклов, которое может обрабатываться в секунду, будет статистически случайным. Там много больше происходит в компьютере, и время, когда ваша программа будет предоставлена, не гарантируется постоянной. Вы должны своевременно основывать свое движение.

В SFML мне нравится

window.setFramerateLimit(60);

Это даст мне очень хорошую попытку в 60 кадров в секунду. Это достаточно близко к реальности, что оно неотличимо от глаз.

Оттуда я хотел бы предположить, что каждый кадр получит

float timeStep = 1.0f/60.0f.

Я использую этот шаг времени для управления движениями. Поэтому, если я хочу, чтобы мой автомобиль проехал 10 пикселей в секунду, то на каждой итерации большого игрового цикла мы используем timestep.

currentPosition += carSpeed * timeStep

Ещё вопросы

Сообщество Overcoder
Наверх
Меню