09 апреля 2011

Игровой таймер

Медленно но верно делаю Tank of Destiny. Дошел до таймеров. Это такая ерундовина которая нам очень нужна. Таймер нужен чтобы отмерять время внутри игры, например для ограничения времени на прохождения уровня. Помните была такая игра Super Mario Bros., так вот там на прохождение уровня давалось ограниченное время.

Я много видел статей про то как можно этот самый таймер сделать (правда ни одной найти сейчас не могу), так там часто было так, что таймер работал отдельным потоком. Это конечно здорово. Мы получаем таймер который выполниться через точный промежуток времени, но нам это не нужно. Честно.

Почему же нам не нужен такой таймер? Да потому что это игровой таймер. Ну зачем нам от него точность? Игра - это симуляция. Симуляция - это моделирование. Ну это грубо конечно, но дело в том, что в моделировании время может быть представлено как дискретные отрезки или как отрезки переменной длины, от события к событию. Это тоже в общем-то грубо, но идея я надеюсь понятна. В игре лучше всего использовать дискретные отрезки, так проще, как мне кажется.

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

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

Реализацию ждите в скором времени в репозитории, а сейчас вот вам картинка с алгоритмом работы всего этого безобразия.