PMG

Форумы по созданию игр
Текущее время: 23 апр 2024 12:03

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Привязка объектов к таймеру
СообщениеДобавлено: 14 сен 2005 15:18 
Не в сети
Новичок

Зарегистрирован: 14 сен 2005 15:01
Сообщения: 5
Помогите плизззззз.
Задолбался я с этими таймерами, куда не глянь, каждый пишет по своему:(
Так вот, это правильно(??):
(прога на 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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 14 сен 2005 15:47 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
memcpy замени на memmove. У тебя перекрываются области памяти.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 сен 2005 08:28 
Не в сети
Новичок

Зарегистрирован: 14 сен 2005 15:01
Сообщения: 5
Всё-таки, похоже, я чего не догоняю:)
Вот небольшой тест на 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();


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 сен 2005 08:57 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Если dwInterval = 0, то просто delta x (или что-то другое) будет равно 0. Т.е. смещения не будет и отрендериться предыдущая сцена.

У тебя на компе таймер на каждом проходе выдает примерно одинаковую разницу, а на чухом компе он меняется рывками. Сам таймер скачет, а не твой код! Видимо точность таймера на чужом компе ограничена 15 мс. По пробуй использовать QueryPerformanceFrequency.

Интересно, на "чужом компе" какая система и комп?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 20 сен 2005 16:18 
Не в сети
Новичок

Зарегистрирован: 14 сен 2005 15:01
Сообщения: 5
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;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 сен 2005 08:36 
Не в сети
Новичок

Зарегистрирован: 14 сен 2005 15:01
Сообщения: 5
Значения с 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 сен 2005 08:57 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Чем напрягают? Равные интервалы ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 сен 2005 08:36 
Не в сети
Новичок

Зарегистрирован: 14 сен 2005 15:01
Сообщения: 5
MagicWolf, ладно, спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB