Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему DelphiX притормаживает в ХР, а в 98 летает? [Delphi, Windows]


Vudu ©   (2004-10-20 18:08:00) 

Я тут сделал небольшую 2Д стрелялку (в ХР), потом включил ее в 98 и в ней стала такая скорость что невозможно играть. Можно ли это какнибудь пофиксить?
(я использовал увеличение интервала таймера в ХР до границы неторможения)


DonNikola   (2004-12-22 23:49:00) [1]

Потоки это конечно здорово, но мне кажется, что их использование для этих целей несколько излишне. Я сначала пробовал делать непрерывный вывод, но отказался, сообщения не успевают отрабатываться, другие программы тормозят. Лучше повесить процедуру на мультимедийный таймер, а в ней постить WM_TIMER в главное окно, а уже в обработчике WM_TIMER'а и делать отрисовку. Так оно больше на виндовое приложение похоже, а что больше похоже, то и работать стабильнее будет. Такой метод даже на 5x86 работает.


Sphinx   (2004-12-22 11:26:00) [2]

> DonNikola   (22.12.04 04:39) [11]

Сперва тоже, начитавшись умных книжек делал всё на основе таймера, но потом, не без помощи этого форума, забил на это.
Теперь делаю так: отрисовка непрерывно, а просчет сцены пытаюсь вынести в отдельный поток, где пересчитываю через некоторое число тиков. Пока получается плохо :) да и времени не очень много...работа...сессия :)


DonNikola   (2004-12-22 04:39:00) [3]

А 18 - это то максимальное количество FPS которое можно получить, если использовать стандартный таймер.


DonNikola   (2004-12-22 04:37:00) [4]

2Sphinx: Прошу прощения ошибся, но только в цифре, перепутал 18 и 55, но смысл тот же. Я на форму кинул два таймера, один 1ms, другой  1000ms, первый увеличивает счетчик, а второй его отображает и сбрасывает, результат 19-24, это если ничего вообще кроме таймеров не работает. На WinApi результат почти тот же, разве что нет такого разброса. А с мультимедийным таймером до 500 фреймов в секунду отрабатывает, опять же если никакой другой активности нет.
И, на мой взгляд рассчитывать на то что везде стоит NT лучше не стоит, можно напороться.


Sphinx   (2004-12-21 11:31:00) [5]

> У него разрешение до 1 миллисекунды, а у стандартного ~18,

Для 9х - дискретизация TTimer составляет 55 мс, для систем NT - 10 мс.


Ландграф Павел   (2004-12-21 07:28:00) [6]

По большому счету проблема кривого (созданого не для игр) ДХтаймера, ставь из ПоверДрава, или пиши сам [через пики=)]
А скоростя разные из-за дровов... ну и особенностей 2k виндов, и из-за вышеописанной проблемы


DonNikola   (2004-12-21 05:40:00) [7]

Крайне рекомендую использовать мультимедийный таймер.
У него разрешение до 1 миллисекунды, а у стандартного ~18, и если сидеть на стандартном, то fps выше 50 не будет, даже для простого PutPixel'я.
Смотри в MMSystem функции: timeBeginPeriod, timeSetEvent etc.


Vudu   (2004-10-22 22:54:00) [8]

Кажись дошло. Надо будет попробовать.


miek   (2004-10-22 19:41:00) [9]

Не в интервале дело. Ты должен измерять время от последнего вызова процедуры таймера и в соответствии с ним менять все параметры движений и взаимодействий. Например, прошло Х миллисекунд, двигаем героя на Y пикселей, а если прошло 2*Х мс, то уже двигаем на 2*Y. Это называется FPS-независимость. Доходчиво?


Vudu   (2004-10-22 14:51:00) [10]

Вот и я интервал у таймера увеличивал, но мне кажеться это несерьезно, потому что на разных виндах все равно заметна разница. А если сильно увеличивать то сильно "FPS" падает.


miek   (2004-10-22 08:16:00) [11]

Это ты серьезно? Ну-ну, блажен кто верует, а я уже накололся раз.


Megabyte-ceercop   (2004-10-22 06:53:00) [12]

Если юзаешь таймер, и его интервал не стоит на нуле или единице а где нибудь на 30-50, то проверку FPS делать ненужно, таймер обеспечит синхронизацию на самых ьыстрых машинах, и не очень быстрых. Его частота не зависит от машины.


miek   (2004-10-20 18:21:00) [13]

Игры надо делать FPS-независимыми, тогда не будет неприятных сюрпризов. Когда работаешь по таймеру, обязательно смотри, сколько времени прошло с момента последнего вызова.


Наверх

Титульная страница Поиск, карта сайта Написать письмо