Форум: "Игры";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизПочему DelphiX притормаживает в ХР, а в 98 летает? Найти похожие ветки
← →
Vudu (2004-10-20 18:08) [0]Я тут сделал небольшую 2Д стрелялку (в ХР), потом включил ее в 98 и в ней стала такая скорость что невозможно играть. Можно ли это какнибудь пофиксить?
(я использовал увеличение интервала таймера в ХР до границы неторможения)
← →
miek (2004-10-20 18:21) [1]Игры надо делать FPS-независимыми, тогда не будет неприятных сюрпризов. Когда работаешь по таймеру, обязательно смотри, сколько времени прошло с момента последнего вызова.
← →
Megabyte-ceercop © (2004-10-22 06:53) [2]Если юзаешь таймер, и его интервал не стоит на нуле или единице а где нибудь на 30-50, то проверку FPS делать ненужно, таймер обеспечит синхронизацию на самых ьыстрых машинах, и не очень быстрых. Его частота не зависит от машины.
← →
miek (2004-10-22 08:16) [3]Это ты серьезно? Ну-ну, блажен кто верует, а я уже накололся раз.
← →
Vudu (2004-10-22 14:51) [4]Вот и я интервал у таймера увеличивал, но мне кажеться это несерьезно, потому что на разных виндах все равно заметна разница. А если сильно увеличивать то сильно "FPS" падает.
← →
miek © (2004-10-22 19:41) [5]Не в интервале дело. Ты должен измерять время от последнего вызова процедуры таймера и в соответствии с ним менять все параметры движений и взаимодействий. Например, прошло Х миллисекунд, двигаем героя на Y пикселей, а если прошло 2*Х мс, то уже двигаем на 2*Y. Это называется FPS-независимость. Доходчиво?
← →
Vudu (2004-10-22 22:54) [6]Кажись дошло. Надо будет попробовать.
← →
DonNikola (2004-12-21 05:40) [7]Крайне рекомендую использовать мультимедийный таймер.
У него разрешение до 1 миллисекунды, а у стандартного ~18, и если сидеть на стандартном, то fps выше 50 не будет, даже для простого PutPixel"я.
Смотри в MMSystem функции: timeBeginPeriod, timeSetEvent etc.
← →
Ландграф Павел © (2004-12-21 07:28) [8]По большому счету проблема кривого (созданого не для игр) ДХтаймера, ставь из ПоверДрава, или пиши сам [через пики=)]
А скоростя разные из-за дровов... ну и особенностей 2k виндов, и из-за вышеописанной проблемы
← →
Sphinx (2004-12-21 11:31) [9]> У него разрешение до 1 миллисекунды, а у стандартного ~18,
Для 9х - дискретизация TTimer составляет 55 мс, для систем NT - 10 мс.
← →
DonNikola (2004-12-22 04:37) [10]2Sphinx: Прошу прощения ошибся, но только в цифре, перепутал 18 и 55, но смысл тот же. Я на форму кинул два таймера, один 1ms, другой 1000ms, первый увеличивает счетчик, а второй его отображает и сбрасывает, результат 19-24, это если ничего вообще кроме таймеров не работает. На WinApi результат почти тот же, разве что нет такого разброса. А с мультимедийным таймером до 500 фреймов в секунду отрабатывает, опять же если никакой другой активности нет.
И, на мой взгляд рассчитывать на то что везде стоит NT лучше не стоит, можно напороться.
← →
DonNikola (2004-12-22 04:39) [11]А 18 - это то максимальное количество FPS которое можно получить, если использовать стандартный таймер.
← →
Sphinx (2004-12-22 11:26) [12]> DonNikola (22.12.04 04:39) [11]
Сперва тоже, начитавшись умных книжек делал всё на основе таймера, но потом, не без помощи этого форума, забил на это.
Теперь делаю так: отрисовка непрерывно, а просчет сцены пытаюсь вынести в отдельный поток, где пересчитываю через некоторое число тиков. Пока получается плохо :) да и времени не очень много...работа...сессия :)
← →
DonNikola (2004-12-22 23:49) [13]Потоки это конечно здорово, но мне кажется, что их использование для этих целей несколько излишне. Я сначала пробовал делать непрерывный вывод, но отказался, сообщения не успевают отрабатываться, другие программы тормозят. Лучше повесить процедуру на мультимедийный таймер, а в ней постить WM_TIMER в главное окно, а уже в обработчике WM_TIMER"а и делать отрисовку. Так оно больше на виндовое приложение похоже, а что больше похоже, то и работать стабильнее будет. Такой метод даже на 5x86 работает.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c