[ create a new paste ] login | about

Link: http://codepad.org/h8KILni0    [ raw code | fork ]

shoxsz - C++, pasted on Apr 7:
#include "janela.h"

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();
    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();
        Desenhar();

        int t_final = SDL_GetTicks();
        int t_total = t_final - t_inicial;

        if(t_total <= espera)
            SDL_Delay(espera - t_total);
        else
            atraso += t_total - espera;

    }
}

void Janela::CapturarMouse(bool ativar)
{
    capturarmouse = ativar;
}

void Janela::CapturarTeclado(bool ativar)
{
    capturarteclado = ativar;
}


std::string Janela::UltimoErro()
{
    return erro;
}

void Janela::Eventos()
{
    SDL_Event eventos;

    if(SDL_PollEvent(&eventos))
    {
        switch(eventos.type)
        {
            case SDL_QUIT:
                    AoSair();
                    break;
            case SDL_KEYDOWN:
                    if(capturarteclado)
                        AoPressionarTecla(eventos.key.keysym.sym);
                    break;
            case SDL_KEYUP:
                    if(capturarteclado)
                        AoLiberarTecla(eventos.key.keysym.sym);
                    break;
            case SDL_MOUSEBUTTONDOWN:
                    if(capturarmouse)
                        AoUsarMouse(eventos.button);
                    break;
            case SDL_MOUSEBUTTONUP:
                    if(capturarmouse)
                        AoLiberarMouse(eventos.button);
                    break;
        }
    }
}

Janela::~Janela()
{
    SDL_FreeSurface(janela);
}


Create a new paste based on this one


Comments: