Я программирую игру с использованием Visual C++ 2008 Express и Ogre3D sdk.Обновление асинхронного экрана до логики геймплея, C++
Моя основная логика игры рассчитана на 100 раз/секунду. Для простоты я скажу, что это метод под названием «gamelogic()». Это не основано на времени, а это означает, что если я хочу «ускорить» время игры на 1 секунду, я должен вызвать «gamelogic()» 100 раз. «gamelogic()» является легким по сравнению с отображением экрана игры.
У Ogre есть логика «слушателя», которая информирует ваш код, когда он собирается нарисовать кадр, и когда он закончит рисовать рамку. Если я просто назову «gamelogic()» непосредственно перед рендерингом фрейма, то на игровой процесс будет сильно влиять скорость рендеринга экрана, которая может варьироваться от 5 кадров в секунду до 120 кадров в секунду.
Простое решение, которое приходит на ум: вычислить время, прошедшее с момента последнего визуализируемого кадра и называют 'GameLogic() много раз до следующего кадра: 100 * timeElapsedInSeconds
Однако я pressume, что " правильный "способ сделать это с помощью многопоточности; имеют отдельный поток, который запускает «gamelogic()» 100 раз/сек.
Вопрос заключается в том, как я могу достичь этого и что можно сделать, если есть конфликт между двумя отдельными потоками: галогическое изменение содержимого экрана (координаты 3d-объекта), в то время как Ogre одновременно отображает экран.
Большое спасибо заранее.
Игры переключились с фиксированных предположений рендеринга на отслеживание кадров-времени некоторое время назад. Раньше они полагались на то, что процессор работает на частоте 8 Гц. Когда они вышли с 16-граммовыми машинами, они включили «турбо-кнопку» для переключения процессора с 16 Гц до 8 Гц, чтобы игры все равно работали с правильной скоростью. Интересный факт. – Kieveli
Действительно! Были даже небольшие приложения, которые были написаны для «замедления» вашего процессора, чтобы старые игры работали на приемлемых кадрах на более новых машинах. Один из них назывался «MOslo», я думаю. Я помню, как все мои старые игры Ultima работали слишком быстро на новых компьютерах, которые у меня были. – Mark
Это стало еще лучше с временем выполнения turbo pascal, которое создавало бы цельное переполнение при работе на быстрой машине и тем самым разбивало бы все. – tstenner