Отправляет email-рассылки с помощью сервиса Sendsay

Исправляем игру Super Mario Clone.

i386-asplinux-linux-gnu)

Привет всем!

Скачал игру Super Mario Clone http://smclone.sourceforge.net .
Понравилась. Решил в ней поковыряться. Добавил поддержку джойстика,
улучшил скрипт конфигурации (confugure), добавил несколько опций
командной строки, добавил поддержку конфигурационного файла. Но
вот заметил в ней такой код:

void
CorrectFrameTime (void)
{
static Uint32 stime = 0;
while (SDL_GetTicks () - stime < 1000 / fps) ;
stime = SDL_GetTicks ();
}

Как видите, для установки заданного fps используется пустой цикл.
Думаю что грузить CPU пустыми циклами нехорошо, и хочу заменить
этот код на:

void
CorrectFrameTime (void)
{
static Uint32 stime = 0;
Sint32 d = 1000 / fps - (SDL_GetTicks () - stime);
if (d > 0) SDL_Delay (d);
stime = SDL_GetTicks ();
}

Но заметив что код игры, в некоторых местах, содержит
проверки __WIN32__, и вспомнив что в винде период
системного таймера 50 мс, я стал думать что лучше пустой цикл или
SDL_Delay(). Есть идеи: сделать проверку на предмет винды с
помощью #ifdef; сделать опцию конфигурирования; сделать опцию
командной строки.

В общем подскажите что лучше сделать.

Ответить   Konstantin Korikov Sun, 14 Mar 2004 02:45:01 +0200 (#102386)

 

Ответы:

#ifdef, наверное, будет намым нормальным решением. Незачем вытаскивать
кривости оси на пользовательский уровень. К тому же, на виндовсе во время игры

редко что кроме неё работает. А на юниксах процессор и правда стоит
поберечь...

Ответить   Mon, 15 Mar 2004 11:29:54 +0500 (#103077)