Хотел бы задать пару вопросов по игровому циклу, а именно как ограничить скорость игры, читал статьи, но так и не пришел к самому оптимальному решению.
Расскажу о проблемах с которыми столкнулся. Делаю простенькую игру, пришел к тому что захотелось организовать определенную скорость игры, так как тестировать буду на разных компьютерах. Без ограничений скорости игры, отрисовка и просчет шли параллельно и никаких затруднений не возникало, объект рисовался плавно на экране без каких либо резких перемещений. Далее сделал привязку к таймеру, ограничил fps до 30 кадров в секунду. Примерная реализация была такая:
Code
const int TICKS_PER_SECOND = 30; const int SKIP_TICKS = 1000 / TICKS_PER_SECOND;
Но с такой реализацией пропала плавность движения объекта, он будто застревает на долю секунду. Иначе говоря меня этот вариант не устроил.
Также делал отрисовку кадра не зависящей от скорости игры. Но объект не плавно двигался как и в первом варианте.
Можно ли каким-нибудь способом сделать движение объектов плавным как в случае без ограничений, и сделать отрисовку кадров не зависящей от этого процесса? Если никто не знает, это то же самое, как если бы этого не было вовсе.
сделай 60, вообще часто в движках используют vsync - вертикальная синхронизация, которая ограничивает фпс на любых компьютерах, устройствах конкретно на c++ пример не могу привести), могу привести с другого языка пример как это работает при включенном vsync, и при выключенном когда скорость игры начинает зависеть от конфигурации устройства, что не очень хорошо когда у меня комп тормоз, а другого он более мощьный. вот наглядный пример работы включенного режима vsync , и выключенного в архиве 3 файла 2 exe и 1 файл sprite.png оба exe файла именуются соответствующим образом) link сравни фпс, и загрузку процессора в обоих вариантах
Сообщение отредактировал aalla - Пятница, 16 Ноября 2012, 02:20