![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#13 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Такой вопрос, у меня очень слабый комп. и он не успевает за таймером в 5 миллисекунд, вследствие чего ход процесса игры замедляется, как с этим бороться?
Комп у меня Intel 233 ATI Technology 2mb 32mb DRAM PS: Вспомните "тормоза" в играх, почему они возникают? |
![]() |
![]() |
![]() |
#14 | |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]() Цитата:
пыщь
|
|
![]() |
![]() |
![]() |
#15 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
2. Зачем обрабатывать кадр, который не выведется? 3. Как быть на пересечении этих кадров? Пока медленный комп будет долго и нудно выводить картинку на экран, расчитывать мы не сможем, т.е. чем быстрее комп выведет картинку на экран, тем быстрее кубик полетит. Можно конечно разбить это дело на 2 потока, но тогда появится проблема синхронизации. 4. Что делать, если в игре будут как "полупустые" сцены, так и насыщенные со сложными эффектами? Пусть простенькие сцены так же тормозят, как и сложные, т.е. одиночный кубик пусть так же дёргается, как и сотня кубиков? 4. Что не так в предложенном мной варианте? Лично я проблем никаких не вижу, зато "автоматически" качество движения будет подстраиваться под скорость компа. Один кубик полетит плавно, сотня будет тормозить, если комп не потянет. И реализация вроде бы несложная: Цитата:
Единственный "косяк", который я вижу: можно на низких ФПС сквозь стенку пролететь, например, но тут зависит от алгоритмов расчета физики и т.п. Последний раз редактировалось pu4koff; 27.08.2009 в 19:22. Причина: Чота я с тегом code Погорячился :) |
||
![]() |
![]() |
![]() |
#16 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
pu4koff, прямо в точку! Привязка ко времени, Sleep(0) засыпание потока для того чтобы винда могла переключиться на др. поток(процесс).
|
![]() |
![]() |
![]() |
#17 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
![]()
pu4koff, нет, имеется ввиду, что используется мультимедийный таймер. Работает он фактически в отдельном потоке, отрисовка и расчёты не обязаны ждать друг друга. А вот если делать всё линейно - то тормоза на загруженной сцене завесят всю игру. Да, всё это дело придётся синхронизировать, но при написании игры это далеко не самая сложная вещь, имхо
Sleep, ну давайте ещё yield вспомним ![]()
пыщь
Последний раз редактировалось JTG; 27.08.2009 в 22:03. |
![]() |
![]() |
![]() |
#18 | |||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
Ну Sleep я так чисто для галочки привёл. Цитата:
Цитата:
И всёже что будет, если неправильно выставим скорость мультимедийного таймера? Тики там в очередь не встают вроде как, т.е. на старом компе обработается 20 тиков, а на современном, за то же время, положенные 30. Как от этого уберечься? Да и вообще как ни крути, а все программы в циклах крутятся и ничего страшного с процем не происходит. В виндовых прогах в основе лежит цикл обработки сообщений. Для OpenGL в glut есть glutMainLoop. и т.д. Тут конечно свои проблемы будут: Вдруг на каком-то кадре вдруг расчеты сложные резко стали или еще какая фигня, но это всё дотачивается. И кубик скорее всего будет итерациями смещаться, а не тупо по формуле: скорость_кубика * дельта_кадров. По хорошему нужно принять, что за одну итерацию кубик упадёт, допустим, на 2 позиции, а итерация длится 0.05 секунды. Разность кадров, например, составила 0.12с, за это время можно выполнить 2 итерации падения кубика, что в обычном for'е можно будет и сделать. Если же кадр новый отрисовался за 0.03с, то кубик и шевелиться не будет, т.к. по времени в одну итерацию не укладываемся. Возникает только вопрос как определять эту дельту. А тут либо QueryPerformanceCounter (самый быстрый счетчик времени, но свои грабли у него в многопроцессорных системах и если процессор частоту на лету меняет с целью экономии энергии), либо тот же самый мультимедийный таймер (выставляем его на какой-нибудь достаточно короткий промежуток времени, считаем в тиках сколько кадров было прорисовано и по этой информации получаем приближенную дельту для отрисовки кадров). В общем я на все 100% за расчеты кадров на основе дельты, а не каждый тик таймера. Никаких расчетов в таймере и т.п. операций. Таймер может понадобится только для получения дельты, но тут уже кому как нравится. |
|||
![]() |
![]() |
![]() |
#19 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]()
Да, реализовать это довольно сложно, при том что, если использовать QueryPerformanceCounter, дельта будет не всегда положительная!
Можно почитать на gamedev http://www.gamedev.ru/code/forum/?id=80205 В MSDN http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx Можно реализовать все одним таймером, он копит время, которое потом используется как delta. Посмотрите во вложении, там конечно грубо все сделано, но это работает. |
![]() |
![]() |
![]() |
#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 |