Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2009, 15:11   #21
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Точным таймером можно задавать только счет, но не производить внутренние сложные процедуры. Виснет программа из за того, что обработка не успела выполниться за указанный промежуток времени. Я применил точный таймер на обработку кадка и повесил программу, поскольку код не уложился в 10 мс в один из моментов. Теперь представьте, что CPU будет не совсем свободен, процедура затянется, таймер как считал так и будет считать, не уложившись программа выдаст ошибку и повиснет, или просто тупо повиснет не сказав ни слова.
Пусть точный таймер выполняет обработку состояний объектов и считает такт, от которого отталкивается обработка сцены, ...а сама сцена выводится по обычному таймеру, не зависящему от точного, способному удлинить свой интервал, если внутренняя процедура не успела. В результате, состояние и положение объектов в игре будет у всех одинаковое, а вот отображение на слабых машинах будет прерывистое, но все объекты будут на тех же местах как и у всех, ...на быстрых машинах все будет плавно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.08.2009, 16:04   #22
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Да, согласен, с эти VCl и таймером не первой точности, хотел как можно быстрее набросать.
Вот пример, точного таймера QueryPerformanceCounter и QueryPerformanceFrequency
Его работу тестил на разных машинах, на шустрых точность до ~0,0001 миллисекунды, на более слабых ~2 миллисекунды, все это естественно с промежуточными расчетами/обработкой сообщений, в общем delta кадра
Sleep(1) ~16 миллисекунд выполняется, как и следовало ожидать, тут до точности, как до Нептуна))
В общем прошу потестить
Вложения
Тип файла: rar Delta.rar (6.9 Кб, 11 просмотров)

Последний раз редактировалось Kostia; 28.08.2009 в 16:07.
Kostia вне форума Ответить с цитированием
Старый 28.08.2009, 17:50   #23
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Считаю Sleep не подходящим методом для установки "прерывания", иначе это никак не назовешь. Если не ошибаюсь, в это время идет просто пауза, не реагирует на управление форма допустим, так или нет?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.08.2009, 18:09   #24
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Хы, я VCL никогда в таких целях не использовал, все обычно происходит в WM_PAINT или где-то тут
Код:
while True do
  begin
    if GetMessage(pMsg,0,0,0) then
    begin
      TranslateMessage(pMsg);
      DispatchMessage(pMsg);
    end else Break;
  end;
PS: нужно было все WP_PAINT засунуть и не париться. другой стороны, точно просчитать время не удастся...
Sleep(1) - это просто засыпание потока, ведь на процых выполняются линейные программы, а в винде можно создать кучу потоков, которые как бы выполняются параллельно, т.к. винда это контролирует, если поток ничем не занят, то винда его "усыпляет" и передает управление другому потоку, так винда распределяет процессорное время между всеми потоками и создается ощущение параллельности. Sleep как раз усыпляет поток и винда не дает ему процессорного времени, пока не истечет время сна. Поэтому окно и зависает, но нагрузки при этом на процессор нет.(я не помню где читал, так бы дал ссылку)

Последний раз редактировалось Kostia; 28.08.2009 в 18:14.
Kostia вне форума Ответить с цитированием
Старый 06.09.2009, 17:27   #25
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

ну, например, поэтому:
Цитата:
вот решил сделать на омеге игру
Ну если на омеге, то там есть обычные таймеры и системные процедуры.
Системная процедура инициализации:
Код:
  OE_RegProcedure( SYS_INIT, @Init );
вывода графики (тут должен быть только вывод графики, никаких рассчетов!!!!):
Код:
  OE_RegPRocedure( SYS_DRAW, @Draw );
процедура выхода:
Код:
  OE_RegPRocedure( SYS_QUIT, @Quit );
А код игры повторяющийся постоянно должен быть сдесь:
Код:
  Timer_Create( @Timer1, 10, 0 );
Если пренебрегать этими правилами то будут проблемы. Лично у меня все работает хорошо на всех компьютерах.

Последний раз редактировалось Вадим Буренков; 06.09.2009 в 17:30.
Вадим Буренков вне форума Ответить с цитированием
Старый 07.09.2009, 16:22   #26
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
А код игры повторяющийся постоянно должен быть сдесь:
Код:
Timer_Create( @Timer1, 10, 0 );
А за что 3-параметр отвечает у таймера?
VintProg вне форума Ответить с цитированием
Старый 07.09.2009, 17:15   #27
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Низнаю. По всем вопросам смотри файл справки в комплекте с двигом.
Вадим Буренков вне форума Ответить с цитированием
Старый 07.09.2009, 17:18   #28
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

У меня вот такая проблема сделал
Timer_Create( @Timer1, 1, 0 );
у меня скорость нормальная, а у друга сумашедшая.
VintProg вне форума Ответить с цитированием
Старый 07.09.2009, 21:49   #29
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Зачем ставить 1, поставь 10. Все будет работать нормально. При таких высоких скоростях процессор нагружается на максимум, ничего хорошего от этого не будет.
Вадим Буренков вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как улучшить 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