Enviado em 06/04/2013 - 23:27h
Olá pessoal, ultimamente os programas que crio utilizando SDL estão travando muito, não sei o que há de erado no código que possa causar esse tipo de erro,eles parecem funcionar aleatoriamente(uns funcionam, outros nao, outros sim...) aqui está a minha classe janela que cria uma janela:
Janela::Janela(int fps, int flags, std::string titulo, int largura, int altura, int bpp, bool telacheia)
{
espera = 1000/fps;
this->flags = flags;
aberta = false;
capturarmouse = true;
capturarteclado = true;
if(SDL_Init(flags) == -1)
{
this->erro = SDL_GetError();
throw (Erro("Não foi possível inicializar os subsistemas da SDL."));
}
this->largura = largura;
this->altura = altura;
this->bpp = bpp;
this->telacheia = telacheia;
///Configurando as flags para criar a janela
int f = SDL_HWPALETTE;
if(telacheia)
f |= SDL_FULLSCREEN;
const SDL_VideoInfo* video = SDL_GetVideoInfo();
if(video->hw_available)
f |= SDL_HWSURFACE;
else
f |= SDL_SWSURFACE;
if(video->blit_hw)
f |= SDL_HWACCEL;
///
janela = SDL_SetVideoMode(largura, altura, bpp, f);
if(janela == NULL)
{
erro = SDL_GetError();
throw (Erro("Não foi possível criar a janela."));
}
SDL_WM_SetCaption(titulo.c_str(), NULL);
aberta = true;
}
void Janela::Iniciar()
{
this->AoIniciar();//virtual
int atraso=0;//tempo de atraso a cada quadro
///Loop Principal que mantém a janela aberta
while(aberta)
{
int t_inicial = SDL_GetTicks();
while(atraso > espera)
{
Logica();
atraso -= espera;
}
Logica();//virtual
Desenhar();//virtual
int t_final = SDL_GetTicks();
int t_total = t_final - t_inicial;
if(t_final <= espera)
SDL_Delay(espera - t_final);
else
atraso += t_final - espera;
}
}
int main(int argc, char* argv[])
{
Jogo jogo;
jogo.Iniciar();
return 0;
}