Программа рисования SDL замораживается

Я не уверен, почему моя программа зависает после рисования шестого квадрата. Это расстраивает. Я имею в виду, что это просто один и тот же код снова и снова, почему он исполняется первые 6 раз, а не 7-й? : /

Вот мой код:

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<SDL.h>
using namespace std;

int main (int ,char**)
{
SDL_Init(SDL_INIT_EVERYTHING);
int ProcN=0;
int PageN;
int TProc=0;
int TPage;
int FrameN=0;
srand(time(NULL));
SDL_Surface *screen;
screen=SDL_SetVideoMode(860,540,32,SDL_SWSURFACE);

Uint32 white=SDL_MapRGB(screen->format,0xff,0xff,0xff);
Uint32 green=SDL_MapRGB(screen->format,0x22,0xff,0x22);
Uint32 yellow=SDL_MapRGB(screen->format,0xff,0xbb,0x11);

bool isrunning=true;
const int fps=40;
Uint32 start;
Uint8 *keys = SDL_GetKeyState(NULL);

SDL_FillRect(screen,&screen->clip_rect,white);
SDL_Rect rect[20];
int ff=0;
for(int i=0;i<4;i++)
{
for(int k=0;k<5;k++)
{
rect[ff].x=100+(k)*100+(k)*10;
rect[ff].y=100+(i)*10+(i)*100;
rect[ff].w=100;
rect[ff].h=100;
SDL_FillRect(screen,&rect[ff],yellow);

printf("%d\t%d\t%d\n",ff,rect[ff].x,rect[ff].y);
ff++;
SDL_Flip(screen);
SDL_Delay(1000);
}
}

SDL_Flip(screen);
}

2

Решение

Это потому, что вы не обрабатываете события SDL. Уровень SDL довольно низкий, и это нужно делать вручную. В общем, вы хотите обрабатывать их достаточно часто в тех местах, где расположены циклы печати, чтобы вы могли перемещать окно и получать события клавиатуры и мыши.
Чтобы исправить ваш код заменить строку SDL_Delay(1000); с:

int cnt = 0;
while(++cnt < 1000)
{
SDL_Event event;
SDL_PollEvent( &event );
SDL_Delay(1);
}
3

Другие решения


По вопросам рекламы [email protected]