LINUX.ORG.RU

С, SDL, FPS

 , ,


0

3

Ни как не пойму, где косяк. Вот код:

    while(!quit) {
	int ticks;
	ticks = SDL_GetTicks(); //Стартовое время
		
        while(SDL_PollEvent(&event)) {
			switch (event.type) {
				case SDL_QUIT: {
					quit = 1;
				} break;
				case SDL_MOUSEBUTTONDOWN: {
					if (event.button.button == SDL_BUTTON_LEFT) {
						map_open(event.button.x, event.button.y);
						map_draw();
					} else if (event.button.button == SDL_BUTTON_RIGHT) {
						map_set_flag(event.button.x, event.button.y);
						map_draw();
					}
				} break;
			}
        }
        //(SDL_GetTicks() - ticks) - время потраченное на выполнение игрового цикла
        if((SDL_GetTicks() - ticks) < 1000 / 30) { //если оно >1000/30 - значит все глючит
            //делаем паузу равную 1/30 секунды минус затраченное время, чтобы, собственно, попадать в диапазон 1/30
            SDL_Delay( ( 1000 / 30 ) - SDL_GetTicks() - ticks);
        }
    }

Оно не работает. Зависает и все, в чем проблема? Может я не правильно события обрабатываю?

Deleted
Ответ на: комментарий от Dron

это у меня просто форматирование поехало.

Да на ЛОРе оно тоже отображается не так хорошо, как в редакторе.

Deleted
()
Ответ на: комментарий от Deleted

Компилируй, запускай и смотри в каком месте ступор у тебя, так как хрен его знает чего у тебя тут не так ::)

while(!quit)
{
    printf("step_1\n");
    unsigned int ticks;
    ticks = SDL_GetTicks();
    printf("step_2\n");
    while(SDL_PollEvent(&event))
    {
        printf("step_3\n");
        switch (event.type)
        {
        case SDL_QUIT:
        {
            quit = 1;
        }
        break;
        case SDL_MOUSEBUTTONDOWN:
        {
            if (event.button.button == SDL_BUTTON_LEFT)
            {
                printf("step_4\n");
                map_open(event.button.x, event.button.y);
                printf("step_5\n");
                map_draw();
                printf("step_6\n");
            }
            else if (event.button.button == SDL_BUTTON_RIGHT)
            {
                printf("step_7\n");
                map_set_flag(event.button.x, event.button.y);
                printf("step_8\n");
                map_draw();
                printf("step_9\n");
            }
        }
        break;
        }
    }
    printf("step_10\n");
    if((SDL_GetTicks() - ticks) < 1000 / 30)
    {
        printf("step_11\n");

        SDL_Delay( ( 1000 / 30 ) - SDL_GetTicks() - ticks);

        printf("step_12\n");
    }
}

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)

отрицательное значение: printf(«%d\n», (1000 / 30) - SDL_GetTicks() - ticks))

ozkriff
()

SDL_Delay( ( 1000 / 30 ) - SDL_GetTicks() - ticks);

Сдаётся мне, здесь нужно SDL_Delay( ( 1000 / 30 ) - (SDL_GetTicks() - ticks) );

E ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.