Мне кажется, таймеры могут быть переусложнением в данном случае. Если речь идет о том, чтобы существа не носились как угорелые при избытке процессорного времени, то может подойти самый простой (и, вероятно, самый распространенный вариант): померять сколько времени прошло с предыдущей обработки/отрисовки, сравнить с желаемой скоростью и подождать разницу.
В этом случае для ожидания используется какой-нибудь Sleep, который запросто дает погрешность в 10-15 миллисекунд (в отдельных случаях -- и того больше) и поэтому считается плохим средством в требовательных к точности играх, но как правило это если в игре есть физика и сеть. В простых случаях наличие погрешности будет означать лишь то, что длительность одного фрейма обработки или отрисовки (скорость чего там ограничивается) будет плавать в некоторых пределах: хотим по 30 мс, а реально будет то 33, то 25, то 35; в среднем все равно выйдет 30, просто будет разброс.
Таймеры для графики имеет смысл применять если язык или инструментарий располагают к этому, например фреймворк такой. Если уж у нас такое серьезное приложение, что небольшой разброд и шатание длительности фрейма недопустимы, то ограничивать скорость вывода вообще следует через задействование вертикальной синхронизации: это и цель достигает, и тиринг (tearing) убирает.
Еще с таймером через сообщения в очередь (как, например, WM_TIMER) есть такая закавыка, что если в обработки очереди встречается ожидание через такой же Sleep (PeekMessage + Sleep если нет сообщений), то результирующая точность таймера получится ничем не лучше варианта без таймера.
Вопросы новичка по роглайк разработке.
Модераторы: Sanja, Максим Кич
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Вопросы новичка по роглайк разработке.
Пытается раскуклиться
Re: Вопросы новичка по роглайк разработке.
Если всё это под Windows, то вот вменяемый обзор типов системных таймеров http://www.codeproject.com/Articles/123 ... s-Tutorial
Реализацию Обёртку QueueTimer для дельфи можно взять тут http://code.google.com/p/kstools/downlo ... ols050.zip (юнит ksTimers.pas). Блог автора https://sergworks.wordpress.com/2010/04 ... rogrammer/
Поведение колбэков таймеров лучше всего проверять самому на тестах.
Лично я не полагаюсь на таймеры как на источник точного (по времени) вызова. Это просто источник оживления периодически вызываемого кода. А решение "не пора-ли что-то сделать" лучше принимать после опроса времени (GetTickCount, RDTSC, QueryPerformanceCounter и т.п.) Но и они не панацея. На многоядерных процессорах сомнительно RDTSC. С появлением динамической скорости процессоров - QPC начинает требовать частой калибровки (Measure). В общем всё плохо -)
В спойлере модуль для опроса QPC.
Реализацию Обёртку QueueTimer для дельфи можно взять тут http://code.google.com/p/kstools/downlo ... ols050.zip (юнит ksTimers.pas). Блог автора https://sergworks.wordpress.com/2010/04 ... rogrammer/
Поведение колбэков таймеров лучше всего проверять самому на тестах.
Лично я не полагаюсь на таймеры как на источник точного (по времени) вызова. Это просто источник оживления периодически вызываемого кода. А решение "не пора-ли что-то сделать" лучше принимать после опроса времени (GetTickCount, RDTSC, QueryPerformanceCounter и т.п.) Но и они не панацея. На многоядерных процессорах сомнительно RDTSC. С появлением динамической скорости процессоров - QPC начинает требовать частой калибровки (Measure). В общем всё плохо -)
В спойлере модуль для опроса QPC.
Скрытый текст: ПОКАЗАТЬ
Последний раз редактировалось karagy 17 дек 2015, 16:01, всего редактировалось 1 раз.
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: Вопросы новичка по роглайк разработке.
Забавно будет посмотреть на новую df-like
Re: Вопросы новичка по роглайк разработке.
Большое спасибо всем за ответы. Пришёл к выводу, что время выполнения программы лучше высчитывать через частоту процессора и количество тактов процессора, просто частоту процессора надо каждый раз будет запрашивать, т.к. она на современных процессорах имеет свойство очень часто меняться.
Ну а ожидание - через Sleep, тем более что системны таймер можно переустановить на меньшую дискретность - вполне реальна дискретность в 1мс с точностью около 10%, этого вполне достаточно. Написать свою процедуру можно конечно, но она будет грузить процессор, что и видно в DF - ядро всегда загружено на 100%, хоть у тебя 1 гном, хоть 100.
Хотя с частотой процессора тоже не всё гладко - в режиме TurboBoost Core i5 разгоняется до 3.2 гГц, но видит это только специальная утилита, винда же пишет, что частота 2.6 гГц, хотя для того же DF эти 20% не принципиальны.
Ну а ожидание - через Sleep, тем более что системны таймер можно переустановить на меньшую дискретность - вполне реальна дискретность в 1мс с точностью около 10%, этого вполне достаточно. Написать свою процедуру можно конечно, но она будет грузить процессор, что и видно в DF - ядро всегда загружено на 100%, хоть у тебя 1 гном, хоть 100.
Хотя с частотой процессора тоже не всё гладко - в режиме TurboBoost Core i5 разгоняется до 3.2 гГц, но видит это только специальная утилита, винда же пишет, что частота 2.6 гГц, хотя для того же DF эти 20% не принципиальны.
Re: Вопросы новичка по роглайк разработке.
Про проблемы с RDTSC раскрыто тут http://habrahabr.ru/company/intel/blog/260113/ начиная со строки "Трудная судьба инструкции RDTSC".
Re: Вопросы новичка по роглайк разработке.
Поиграй!петрушка писал(а):Сам я в этом жанре нуб, почти не играл в них.
Не принципиально.петрушка писал(а):Сколько обычно в среднем предметов в хорошем роглайке? А сколько типов существ?
Играбельность. Пошаговость, способность контролировать время. Т.е. если ты чувствуешь драйв, то не должен тормозить из-за того, что перс перемещается на соседнее поле за N - секунд. Это должно быть (почти) мгновевнно.петрушка писал(а):А что для вас самое важное в рогаликах?
Видимость прогресса, исследование карты. Я этим у себя пренебрёг, и зря.
И да, хорошие буквы лучше плохих тайлов. И даже средне-хороших тайлов - если их нельзя отключить.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 28 гостей