Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

SDL - Ótimo para criação de jogos ( Linux )

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ SDL - Ótimo para criação de jogos ( Linux )

    A biblioteca SDL foi criada para facilitar a criação de jogos em Linux, *BSD, MacOS, Win32 e BeOS. Por ser uma biblioteca multi-plataforma, você terá um único código de seu jogo para diferentes sistemas operacionais. Neste artigo abordarei o básico sobre o uso dessa poderosa biblioteca.
    Por: Hunz

    Inicializando o uso do SDL em seu código
    Primeiramente temos que incluir a biblioteca em nosso código, da seguinte maneira (todos os aplicativos SDL precisam dessa linha):

    Código:
    #include <SDL/SDL.h>
    SDL é composto de 8 subsistemas. Neste artigo abordaremos 3 deles, os quais eu julgo serem os principais para o desenvolvimento de um jogo de pequeno porte:

    * Manipulação de eventos;
    * Entrada/Saída de dados;
    * Vídeo.


    Cada um desses subsistemas é inicializado através da função SDL_Init, também pode ser usada a função SDL_InitSubSystem, mas a função SDL_Init tem que ser usada antes de qualquer outra função SDL e ela inicializa automaticamente alguns subsistemas, como Entrada/Saída de dados e Manipulação de eventos.

    Para iniciar o subsistema de Vídeo e os outros subsistemas padrões, devemos usar a função:

    Código:
    SDL_Init( SDL_INIT_VIDEO );
    A função SDL_Init é completada com a função SDL_Quit, que deve ser usada quando terminada o uso da biblioteca SDL, esta função fecha todos os subsistemas inicializados.

    Já sabemos como iniciar e como finalizar o uso da biblioteca SDL, o que nos permite criar a aplicação mais básica em SDL, mas de qualquer modo, precisamos aprender a manipular erros. Muitas funções SDL retornam um valor e indicam onde a função teve sucesso e onde ela falhou. Por exemplo, SDL_Init retorna -1 caso não seja possível iniciar um subsistema. SDL possui uma função muito prática para saber no que ocorreu o erro, sempre após ocorrer algum erro este erro é armazenado e podemos recorrer a ele usando a função SDL_GetError. Sempre use isso com freqüência, creio que você não pode ter muito conhecimento sobre um erro sem usar essa função.

    Agora que já sabemos o básico, vamos ao primeiro exemplo:

    Código:
    #include <SDL/SDL.h>
    #include <stdio.h>
    
    int main()
    {
       printf("Iniciando SDL...\n");
    
       if ( SDL_Init(SDL_INIT_VIDEO) == -1) {
          printf("Impossível iniciar SDL.. %s\n", GetError());
          exit(-1);
       }
    
       printf("SDL iniciado...\n");
    
       printf("Fechando SDL...\n");
        
       SDL_Quit();
        
       printf("Fechando o aplicativo...\n");
    
       exit(0);
    }
    Para compilar:

    $ gcc teste.c -o teste -lSDL

    Vídeo e gráficos
    Vamos falar primeiramente sobre o vídeo, praticamente é para isso que o SDL é usado. Todos os programas em SDL tem que usar essa função de qualquer maneira.

    Aqui vai um exemplo com comentários:

    Código:
    /* Cria uma surface SDL */  
    SDL_Surface *screen;  
      
    /* Inicia o vídeo */  
    if (SDL_Init(SDL_INIT_VIDEO) == -1) {  
       printf("Impossível iniciar SDL %s",SDL_GetError());  
       exit(-1);  
    }  
      
    /* Usando esta função não precisamos usar a SDL_Quit antes de  
    usar a função exit */*
    atexit(SDL_Quit);  
      
    /* Aqui iremos iniciar o vídeo em resolução 640x480 com 16  
    bits-per- pixel, usando o Hardware */*
    screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE);  
      
    /* Caso ele não consiga usar este modo de vídeo */  
    if (screen == NULL) {  
       printf("Impossível trocar modo de vídeo. %s", SDL_GetError());  
       exit(-1);  
    }
    Agora que iniciamos o vídeo, não queremos que a nossa janela fique vazia, né? Então vamos carregar um BMP e colocá-lo no vídeo usando uma função.

    Código:
    void mostrar_bmp(char *arquivo)
    {
       SDL_Surface *imagem;  
      
       /* Carrega o Bitmap na surface criada */  
       imagem = SDL_LoadBMP(arquivo);  
       if (imagem == NULL) {  
           printf("Impossível carregar o arquivo %s: %s", arquivo, SDL_GetError());
          exit(-1);
       }
    
       /* Coloca a imagem na tela */
       if (SDL_BlitSurface(imagem, NULL, screen, NULL) < 0) {
          printf("Erro no BlitSurface: %s", SDL_GetError());
          exit(-1);
       }
    
       /* Atualiza toda a tela */
       SDL_UpdateRect(screen, 0,0,0,0);
    
       /* Desaloca a imagem */
       SDL_FreeSurface(imagem);
    }
    Manipulação de eventos do teclado
    Abordarei apenas a manipulação de eventos do teclado, mas a biblioteca SDL suporta a manipulação de eventos do mouse e de joysticks.

    Creio eu que é mais fácil ver um código bem comentado do que várias linhas sobre teoria. Segue um exemplo com comentários.

    Código:
    * Cria um manipulador de eventos, usado tanto para
    teclado/*ouse/joystick */
    SDL_Event event;
    /* Inicia SDL */
    ....
    /* Muda o Vídeo */
    ....
    /* Principal Loop do jogo */
    while (1) {
      /* Se algum evento for registrado */
      while (SDL_PollEvent(&event)) {
        /* Que tipo de evento foi registrado? */
        switch (event.type) {
          /* Pressionou tecla */
          case SDL_KEYDOWN:
            /* Qual tecla pressionada? */
            switch (event.key.keysym.sym) {
              case SDLK_ESCAPE:
                printf("ESC pressionado.\n");
                break;
              case SDLK_UP:
                printf("Seta para cima pressionada.\n");
                break;
              case SDLK_a:
                printf("A pressionado.\n");
                break;
            }
        }
      }
    }
    Simples, não? Aqui segue uma lista com todos eventos disponíveis no teclado (copiado do site SDLdoc):

    Links
    Site oficial do SDL:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...


    SDL Library Documentation - Um pouco desatualizado, porém útil:

    * Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    Fonte: vivaoLinux
    Postado Por: RedDeviL

  • Font Size
    #2
    Sem dúvida a SDL é uma excelente biblioteca.
    Tutorial bem interessante apesar da sintese ser excessiva.

    Comment


    • Font Size
      #3
      Muito bom vlw ai vai me ajuda muito no meu curso de criacao de games quando eu estiver abito a fazer umas video aulas vou posta aki para o pessoal...
      sigpic

      Comment


      • Font Size
        #4
        O cara vlw.. Com certeza isso vai ajudar...
        Se souber algo de jogo por favor entre aqui

        Comment


        • Font Size
          #5
          Biblioteca legal, vou pesquisar mais um pouco, e tentar fazer algumas coisas aqui fazendo o uso dela :P .

          Valeu pelo post .




          Comment

          X
          Working...
          X