Исправляем игру 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; сделать опцию конфигурирования; сделать опцию
командной строки.
В общем подскажите что лучше сделать.
#ifdef, наверное, будет намым нормальным решением. Незачем вытаскивать
кривости оси на пользовательский уровень. К тому же, на виндовсе во время игры
редко что кроме неё работает. А на юниксах процессор и правда стоит
поберечь...