| PMG https://www.forum.pmg.org.ru/ |
|
| Привязка объектов к таймеру https://www.forum.pmg.org.ru/viewtopic.php?f=4&t=75 |
Страница 1 из 1 |
| Автор: | lol [ 14 сен 2005 15:18 ] |
| Заголовок сообщения: | Привязка объектов к таймеру |
Помогите плизззззз. Задолбался я с этими таймерами, куда не глянь, каждый пишет по своему:( Так вот, это правильно(??): (прога на OpenGL) DWORD dwTime = timeGetTime(); dwInterval = dwTime - dwLastTimes[9]; GameThink(); // где движение ВСЕХ объектов связано // с этим таймером // аля object.x += float(dwInterval * 1) * float(0.1); DrawGLScene(); SwapBuffers(hDC); memcpy( &dwLastTimes[0], &dwLastTimes[1], 9 * sizeof(DWORD) ); dwLastTimes[9] = dwTime; |
|
| Автор: | MagicWolf [ 14 сен 2005 15:47 ] |
| Заголовок сообщения: | |
memcpy замени на memmove. У тебя перекрываются области памяти. |
|
| Автор: | lol [ 19 сен 2005 08:28 ] |
| Заголовок сообщения: | |
Всё-таки, похоже, я чего не догоняю:) Вот небольшой тест на 2 компах; первые 32 значения dwInterval: НА моём компе: 0 36 4 15 10 10 10 5 10 10 11 13 12 4 10 10 13 12 5 10 10 12 12 6 10 10 11 12 12 10 НА чужом: 0 125 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0 0 0 0 0 Из-за этого, как мне кажется, на чужом компе моя игра(небольшая аркада), идёт рывками. Может когда dwInterval = 0 не надо делать GameThink(); И DrawGLScene(); |
|
| Автор: | MagicWolf [ 19 сен 2005 08:57 ] |
| Заголовок сообщения: | |
Если dwInterval = 0, то просто delta x (или что-то другое) будет равно 0. Т.е. смещения не будет и отрендериться предыдущая сцена. У тебя на компе таймер на каждом проходе выдает примерно одинаковую разницу, а на чухом компе он меняется рывками. Сам таймер скачет, а не твой код! Видимо точность таймера на чужом компе ограничена 15 мс. По пробуй использовать QueryPerformanceFrequency. Интересно, на "чужом компе" какая система и комп? |
|
| Автор: | lol [ 20 сен 2005 16:18 ] |
| Заголовок сообщения: | |
MagicWolf, комп вроде, нормальный, P2.4 Мгц OS Windows XP, видюха Радион не помню какой. По поводу dwInterval = 0 - это понятно. Просто например в книге: "Game Coding Complete" сцена обновляется(именно вывод графики) не каждый раз: const unsigned int SCREEN_REFRESH_RATE(1000/60); HRESULT MyProcessNextFrame() { // The wise C++ programmer would put these nasty static variables in // a nice class. static DWORD currTick = 0; // time right now static DWORD lastUpdate = 0; // previous time static DWORD lastDraw = 0; // last time the game rendered static bool runFullSpeed = false; // set to true if you want to run full speed // Figure how much time has passed since the last time currTick = timeGetTime(); MyUpdateGameLogic(currTick - lastUpdate); lastUpdate = currTick; // It is time to draw ? if( runFullSpeed || ( (currTick - lastDraw) > SCREEN_REFRESH_RATE) ) { if (S_OK == MyPaint()) { // record the last successful paint lastDraw = currTick; } } return S_OK; } |
|
| Автор: | lol [ 21 сен 2005 08:36 ] |
| Заголовок сообщения: | |
Значения с QueryPerformanceFrequency на чужом компе напрягают ещё больше:) 0.134654 22.435812 1.433703 1.404648 1.374477 1.918120 1.283404 1.441245 1.426719 1.364418 1.336483 1.411073 1.299608 1.399062 1.348494 1.527567 1.361624 1.740447 1.386488 1.263570 1.407442 1.321116 1.334805 1.375594 1.291504 1.386489 1.607466 1.402412 1.355758 1.342907 1.347378 1.278375 |
|
| Автор: | MagicWolf [ 22 сен 2005 08:57 ] |
| Заголовок сообщения: | |
Чем напрягают? Равные интервалы ... |
|
| Автор: | lol [ 23 сен 2005 08:36 ] |
| Заголовок сообщения: | |
MagicWolf, ладно, спасибо. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|