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