Крупнейшая говядина с игровыми петлями - PullRequest
2 голосов
/ 19 февраля 2011

Что вам больше всего не нравится в современном игровом цикле? Можно ли улучшить игровой цикл или есть просто лучшая альтернатива, такая как архитектура, управляемая событиями?

Ответы [ 4 ]

1 голос
/ 19 февраля 2011

Кажется, это действительно должен быть CW ...

Я сейчас прохожу курс по программированию игрового движка, и они придерживаются подхода игрового цикла. Конечно, это не значит, что это единственное / лучшее решение, но оно, безусловно, логично. Использование цикла позволяет вам убедиться, что все игровые системы запускаются, не запрашивая свои собственные прерывания по времени или что-то еще. Управление может быть централизованным: в моем текущем проекте у меня есть класс GameManager, который в каждом кадре циклически выполняет функцию Update(float deltaTime) для каждого зарегистрированного объекта по очереди. Мне не нужно отлаживать систему событий или настраивать синхронизированные сигналы, я просто использую цикл для вызова ряда функций. Нет суеты, нет суеты.

Чтобы ответить на ваш вопрос о том, что я больше всего ненавижу, циклический подход логично поддается либеральному использованию наследования и полиморфизма, который может раздуть размер / сложность ваших объектов. Если вы не будете осторожны, это может быть легкой до ужасной ловушки. Если вы осторожны, это может вообще не быть проблемой.

0 голосов
/ 21 февраля 2011

Чтобы быть полностью основанным на событиях, вы можете создать дополнительный поток, который ничего не делает, кроме как помещать событие CPUTick в вашу очередь событий каждые x миллисекунд.

В JavaScript это обычно более естественный маршрут, потому что вы можете таклегко создать дополнительный «поток», который отправляет вам события с помощью setInterval ().

Или, если у вас уже есть цикл в структуре, содержащей вашу игру - как у JS в браузере, или у python с витой- вы можете сказать этому петлителю перезвонить вам через определенные промежутки времени.например:

function gameLoop() {
   // update, draw...
}
window.setInterval(gameLoop, 1000/fps);
0 голосов
/ 19 февраля 2011

Обычно управляемые событиями архитектуры лучше всего подходят для игр (делают что-то, только если пользователь хочет что-то сделать). НО, вам все равно всегда будет нужна нить, постоянно перерисовывающая мир.

0 голосов
/ 19 февраля 2011

Независимо от того, есть ли какое-либо событие в игре или нет, игра должна рисовать себя и обновлять его с фиксированной скоростью, поэтому я не думаю, что сброс игрового цикла возможен.Тем не менее, мне было бы интересно, если кто-нибудь может придумать какой-либо другой вариант игрового цикла.

...