|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.08.2009, 15:17 | #13 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Такой вопрос, у меня очень слабый комп. и он не успевает за таймером в 5 миллисекунд, вследствие чего ход процесса игры замедляется, как с этим бороться?
Комп у меня Intel 233 ATI Technology 2mb 32mb DRAM PS: Вспомните "тормоза" в играх, почему они возникают? |
27.08.2009, 17:46 | #14 | |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Цитата:
пыщь
|
|
27.08.2009, 19:14 | #15 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
2. Зачем обрабатывать кадр, который не выведется? 3. Как быть на пересечении этих кадров? Пока медленный комп будет долго и нудно выводить картинку на экран, расчитывать мы не сможем, т.е. чем быстрее комп выведет картинку на экран, тем быстрее кубик полетит. Можно конечно разбить это дело на 2 потока, но тогда появится проблема синхронизации. 4. Что делать, если в игре будут как "полупустые" сцены, так и насыщенные со сложными эффектами? Пусть простенькие сцены так же тормозят, как и сложные, т.е. одиночный кубик пусть так же дёргается, как и сотня кубиков? 4. Что не так в предложенном мной варианте? Лично я проблем никаких не вижу, зато "автоматически" качество движения будет подстраиваться под скорость компа. Один кубик полетит плавно, сотня будет тормозить, если комп не потянет. И реализация вроде бы несложная: Цитата:
Единственный "косяк", который я вижу: можно на низких ФПС сквозь стенку пролететь, например, но тут зависит от алгоритмов расчета физики и т.п. Последний раз редактировалось pu4koff; 27.08.2009 в 19:22. Причина: Чота я с тегом code Погорячился :) |
||
27.08.2009, 19:27 | #16 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
pu4koff, прямо в точку! Привязка ко времени, Sleep(0) засыпание потока для того чтобы винда могла переключиться на др. поток(процесс).
|
27.08.2009, 22:00 | #17 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
pu4koff, нет, имеется ввиду, что используется мультимедийный таймер. Работает он фактически в отдельном потоке, отрисовка и расчёты не обязаны ждать друг друга. А вот если делать всё линейно - то тормоза на загруженной сцене завесят всю игру. Да, всё это дело придётся синхронизировать, но при написании игры это далеко не самая сложная вещь, имхо
Sleep, ну давайте ещё yield вспомним Хорошо работает лишь в теории, на самом деле если в очереди нет потоков, ожидающих выполнения и с более высоким приоритетом (а система 95% времени именно нифига не делает), то планировщик тут же вернёт управление вызывавшему и процессор всё-равно будет загружен по самое не хочу, в том числе резко участившимся переключением задач, а если передать в качастве параметра 0, то при вызове поток ещё и не уберут из очереди
пыщь
Последний раз редактировалось JTG; 27.08.2009 в 22:03. |
28.08.2009, 00:09 | #18 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Ну Sleep я так чисто для галочки привёл. Цитата:
Цитата:
И всёже что будет, если неправильно выставим скорость мультимедийного таймера? Тики там в очередь не встают вроде как, т.е. на старом компе обработается 20 тиков, а на современном, за то же время, положенные 30. Как от этого уберечься? Да и вообще как ни крути, а все программы в циклах крутятся и ничего страшного с процем не происходит. В виндовых прогах в основе лежит цикл обработки сообщений. Для OpenGL в glut есть glutMainLoop. и т.д. Тут конечно свои проблемы будут: Вдруг на каком-то кадре вдруг расчеты сложные резко стали или еще какая фигня, но это всё дотачивается. И кубик скорее всего будет итерациями смещаться, а не тупо по формуле: скорость_кубика * дельта_кадров. По хорошему нужно принять, что за одну итерацию кубик упадёт, допустим, на 2 позиции, а итерация длится 0.05 секунды. Разность кадров, например, составила 0.12с, за это время можно выполнить 2 итерации падения кубика, что в обычном for'е можно будет и сделать. Если же кадр новый отрисовался за 0.03с, то кубик и шевелиться не будет, т.к. по времени в одну итерацию не укладываемся. Возникает только вопрос как определять эту дельту. А тут либо QueryPerformanceCounter (самый быстрый счетчик времени, но свои грабли у него в многопроцессорных системах и если процессор частоту на лету меняет с целью экономии энергии), либо тот же самый мультимедийный таймер (выставляем его на какой-нибудь достаточно короткий промежуток времени, считаем в тиках сколько кадров было прорисовано и по этой информации получаем приближенную дельту для отрисовки кадров). В общем я на все 100% за расчеты кадров на основе дельты, а не каждый тик таймера. Никаких расчетов в таймере и т.п. операций. Таймер может понадобится только для получения дельты, но тут уже кому как нравится. |
|||
28.08.2009, 07:45 | #19 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Да, реализовать это довольно сложно, при том что, если использовать QueryPerformanceCounter, дельта будет не всегда положительная!
Можно почитать на gamedev http://www.gamedev.ru/code/forum/?id=80205 В MSDN http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx Можно реализовать все одним таймером, он копит время, которое потом используется как delta. Посмотрите во вложении, там конечно грубо все сделано, но это работает. |
28.08.2009, 13:16 | #20 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Не работает, виснет через 2-3 секунды после запуска, в колбеке напрямую работать с переменными нельзя
и с параметрами не всё в порядке timeSetEvent(1,0,@Timer,DWORD(self),TIME_PERIODIC);
пыщь
Последний раз редактировалось JTG; 28.08.2009 в 13:25. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как улучшить fps ? | minatavr84 | Компьютерное железо | 2 | 26.03.2009 23:59 |
Как можно замерить и отобразить количество fps | CraZZy RabbIt | Общие вопросы Delphi | 0 | 12.03.2009 21:05 |
FPS Creator | SaiLight | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 12.01.2009 09:57 |
Почему кп показывает низкий fps??? | Samec_92 | Компьютерное железо | 11 | 18.12.2008 20:38 |
Можно ли подсчитать FPS в другом процессе? | Minimus | Win Api | 7 | 26.08.2008 02:08 |