SDL C++ [RESOLVIDO]

1. SDL C++ [RESOLVIDO]

Paulo
paulo_moc

(usa Ubuntu)

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;

}
}


O cálculo do FPS foi baseado em um tutorial do Pontov onde ele mostra como manter a taxa de fps constante, mas o que eu queria saber é se existe algo no código que possa travar o programa, quando eu inicio ele fica lento:


int main(int argc, char* argv[])
{

Jogo jogo;

jogo.Iniciar();

return 0;
}


Jogo é uma classe que é derivada da classe janela, o seu construtor apenas chama o construtor da classe mae, o método Iniciar foi descrito acima.

Agradeço a quem puder ajudar


  


2. MELHOR RESPOSTA

???
gokernel

(usa Linux Mint)

Enviado em 07/04/2013 - 09:49h

verifique se o evento do SDL está sendo chamado no loop principal.

e para facilitar, se possível organizar todo codigo em um unico arquivo ...


3. Re: SDL C++ [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 07/04/2013 - 06:12h

o pouco do código que vc postou não ajudou bastante para tentar saber onde fica o problema, portanto se possível postar o código completo.

e também ajuda se usar o ( http://codepad.org ), lembrando de enviar o link.



4. Re: SDL C++ [RESOLVIDO]

Paulo
paulo_moc

(usa Ubuntu)

Enviado em 07/04/2013 - 07:13h

Tudo bem, aqui link para janela.h:

http://codepad.org/p1XoyiBs

janela.cpp:
http://codepad.org/h8KILni0

main.cpp:
http://codepad.org/sde4DZiC

erro.h
http://codepad.org/Zu0hLRzd

Esses são todos os arquivos usados. :)


5. Re: SDL C++ [RESOLVIDO]

Paulo
paulo_moc

(usa Ubuntu)

Enviado em 07/04/2013 - 10:40h

hmm tem razão, ele não estava tratando os eventos, valeu ae.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts