FPS (Frames Per Second) - количество обновлений (кадров) экрана в секунду.
"Привязка к FPS" - у меня нет определения этому термину.
"Дергание экрана" - бытовая характеристика скачкообразных движений экранных элементов (далее спрайтов).
Я обратил внимание на ряд замечаний касающихся привязки к FPS и так
называемому "дерганию экрана".
Для нашей игры значение FPS может меняться от
10 до 33, причем максимальным (и стандартным) является величина 33. Не потому
что мы не умеем больше, а потому что мы решили прогнать beta-версию именно в
этом диапазоне.
Эффект "дергания" происходит в результате того, что смещение
спрайта за один такт (при FPS=33 1 такт = 1/33=30 мс) производится не на
минимальное количество пикселей (чаще всего минимальное количество = 1 пиксель)
а на большее. В текущей версии Winplex (0.851) смещение производится на 4 - 8
пикселей (справедливости ради уточню, что базовым смещением является 8 пикселей,
при величине спрайта 32, т.е полное смещение спрайта производится в 4 такта), но
об этом после.
Так вот насчет неправильности привязки к FPS. Рассмотрим
ситуацию: каждые 30 мс (1/33 секунды) программа меняет позицию спрайта, какое
значение FPS является минимально достаточным, чтобы синхронно отразить эти
изменения на экране? Мы остановились на значении 33. Для нашего частного случая
более и не требуется. Хотя можно сделать FPS=66 или FPS=99 и так далее лишь бы
кратно 33. Но смысла в этом не вижу никакого, экран будет обновляться вхолостую,
т.к. позиция спрайтов за это время не успеет измениться. Отвязаться от FPS,
разумеется, можно, но тогда придется синхронизировать FPS с частотой изменения
положений спрайта (имеется в виду допустимых изменений). А это все равно
привязка к FPS как не назови подобную синхронизацию, (пусть меня поправят, если
я не прав, аргументарно конечно). А если не синхронизировать вовсе эти две
характеристики то произойдет следующее: экран, обновляясь, часто будет работать
вхолостую, наверно это не страшно, зачем ресурсы компьютера экономить ;) , или,
что еще хуже, будет пропускать изменения положений, чем хуже компьютер, чем чаще
и длительнее пропуски, Pentium II в данном случае будет просто отстойным
компьютером, хотя я это и так знаю, сам за таким сижу ;) .
А теперь вернемся
к дерганию, а именно к нашему случаю. Как вы думаете, многие ли компьютеры
смогут держать FPS >100 при нехитрых действиях небольшого количества спрайтов
в режиме 1024 x 768 (этот режим наиболее оптимален для игры в Winplex)? Непросто
ответить. Наверно, если неплохой компьютер типа Pentium IV или Athlon 1500 иди
Celeron 1800 такая проблема и не встанет. А у всех ли такие компьютеры? Я уверен
- далеко не у всех. Все бедность наша :( В нашем офисе (мы занимаемся
разработкой программного обеспечения) 10 компьютеров. Я сижу за компьютером
Pentium II 433, а мой коллега (а также соавтор Winplex) за компьютером Celeron
700 и это лучший комп в офисе. Ситуация совершенно типичная. Подход к железу
коммерческий - принцип "минимальной необходимости". На моем компьютере предел
FPS=32 (это при разрешение 800 x 600 в полноэкранном режиме) у Сергея (КитаЯца)
FPS=51. Мы поставили на наши машины один из современных, плавных версий
Supaplex-а (я знаю три различных версии этой игры от разных авторов). На моем
компьютере программа запустилась и встала. Т.е. Мерфи вылупился на меня и ни с
места в течение часа, а у Сергея Мерфи двигался со скоростью 1 пиксель в
секунду. Справедливости ради хочу сказать что, поставив на домашние компьютеры,
мы с удовольствием поюзали эту программу. Насладились графикой и плавностью.
Наши домашние компы это Атлоны с частотой более 1000 с акселератором и подсосом
(типа мерседесы-ситроены). Видимо эта игра позиционируется на машинах такого
класса. Я не хочу обижать или рекламировать автора этой версии. Она имеет место
быть, а автор заслуживает уважения (насколько я предпологаю, он один поднимает
этот проект, притом в технологии OpenGl. Или не один? Или не в OpenGl? Или не
поднимает? ;).
Вернемся к нашей проблеме. Напоминаю - у нас происходит
дергание, потому что смещение спрайтов производится на 4-8 пикселей. Так вот это
сделано совершенно осознано, с целью охватить наиболее больший парк компьютеров.
А вот теперь самое главное: это не конечный вариант нашей программы (версия то
beta). В финальной версии появится параметр КОЭФИЦИЕНТ ПЛАВНОСТИ, который можно
будет установить в пределах возможностей Вашей машины. А это значит, что
движения будут в один пиксель для достаточно мощных машин. Не вижу ни одной
причины, чтобы так называемая привязка к FPS помешала этому. Просто в режиме
максимальной плавности FPS должен быть равным 33x8=264. А у кого компьютеры
похуже будут играть в "дискретном режиме". Хотя я лично дергания никакого не
замечаю (теоретически знаю, что он должно быть, но не более того). Привык,
наверное?
Успехов
.
С уважением Голосов Вячеслав
Директор по
проектированию ЗАО "Тольяттинская электронная компания"
19 февраля 2003г.
Комментарий от Сергея
Валерьевича (ака KuTaЯца)
Тэкс…
Своими словами и попроще объясню.
По поводу допустимого FPS мы
вели меж собой продолжительную полемику: суть состояла в следущем: как делать
игру - чтобы все было супер плавно и красиво, или чтобы было ВСЕМ
ДОСТУПНО. Остановились на последнем, т.е Мерфи (ну все прочие объекты в
игре) за один ход смещаются на 8 (в режком случае на 4) пикселя за счет чего мы
ЗНАЧИТЕЛЬНО разгрузили ЦП и нагузку на видео.
Теперь сыпятся жалобы:
"то у вас не плавно", "это у вас дергается"… Тьфу! Сами знаем. Сознательно так
сделали. Теперь (для тех кто из вышепреведенной статьи не понял) по поводу
никого FPS: поскольку объекты за один ход проходят сразу по 8-4 пикселей
большего чем 33 (именно в нашем случае) FPS не требуется, экран будет
обновлятся в холостую!!!
Короче, если мы сейчас перепижем смещение
объектов на 1 пиксель и завяжем FPS по максимуму, т.е сколько компьютер
позволяет, то (извините) количество компьютеров на которых игра будет хоть
сколько-то играбельна резко уменьшится. Вот так вот!
И последнее. Будет
вам плавность, подождите малость. Мы горячку пороть не будем по двум причинам:
программы стараемся не "тяп-ляп" писать, а на это время нужно, и второе (уж
извините) проект полностью держится ТОЛЬКО на интузиазме авторов, так что мы
больно-то никому ничего не должны и никакие сроки нас не поджимают… Извините.
Вот собственно и все. Спасибо и всего хорошего.
PS. Жду комментариев
на форуме. Спасибо.