Я просто хочу сделать простую анимацию (например, в C ++ с использованием OpenGL) некоторого движущегося объекта - скажем, простое горизонтальное перемещение квадрата слева направо.
В OpenGL я могу использовать "метод двойной буферизации и, скажем, пользователь (запускающий мое приложение с анимацией) включил «вертикальную синхронизацию» - так что я могу вызывать некоторую функцию каждый раз, когда обновляется монитор (я могу добиться этого, например, используя Qt toolkit иего функция "swapBuffers").
Итак, я думаю, что "самая плавная" анимация, которую я могу добиться, - это "перемещать квадрат, например, на 1 пиксель (могут быть другие значения) при каждом обновлении монитора").таким образом, в каждом «кадре» квадрат находится на 1 пиксель дальше - «Я это проверил, и он наверняка работает мягко».
Но проблема возникает, когда я хочу иметь «отдельный» поток для «игровой логики»"(перемещение квадрата на 1 пиксель вправо) и для" анимации "(отображение текущей позиции квадрата на экране).Например, игровой логический поток представляет собой цикл while, в котором я перемещаю квадрат на 1 пиксель, а затем «сплю» в течение некоторого времени, например 10 миллисекунд, и мой монитор обновляется, например, каждые 16 миллисекунд - движение квадрата"не будет на 100% гладким", потому что иногда монитор обновляется два раза, когда квадрат перемещается только на 1 пиксель, а не на 2 пикселя (потому что есть две "разные" частоты монитора и игровой логической цепочки) - и движениебудет выглядеть «немного вяло».
Итак, логично, я мог бы остаться с первым супер гладким методом, но его нельзя использовать, например, в многопользовательских (например, «сервер-клиент») играх -потому что разные компьютеры имеют разные частоты монитора (поэтому я должен использовать разные потоки для игровой логики (на сервере) и для анимации (на клиентах)).
Поэтому мой вопрос: есть некоторый метод, использующий разные потоки для игровой логики и анимации, которые делают "100% плавную" анимациюНапример, если движущийся объект существует, пожалуйста, опишите его здесь, или когда у меня просто была какая-то «более сложная сцена для рендеринга», я бы просто не увидел то «маленькое резкое движение», которое я вижу сейчас, когда я двигаю какой-то простой квадрат горизонтальнои я на этом глубоко концентрируюсь :)?