Power Duckets
Olá,Caro Visitante!
quer ter a permissão de ver Link's Fazer Tutoriais
e Saber mas sobre o fórum? Registre-se Já O melhor conteúdo encontra-se aqui

Já é um Membro?
Logue-se e faça parte do nosso Mundo de Lazer.

Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Membro
Membro
Localização Localização : sub-mundo da informatica
Ver perfil do usuário

[tutorial] SDL em c/c++ - 1º parte

em Ter Jul 30, 2013 12:57 pm
bom galera eu ia fazer a 16º parte do tutorial gtk em c mais resolvi mudar um pouco, como eu to estudando um pouco sdl vou da uma breve introduçao a ela, diferente do gtk o sdl permite manipulaçao de audio e video ela é mais adequada para criaçao de jogos, existe outras api para criaçao de jogos entre elas temos alegro (o jogo mugen foi criado nela eu acho), opengl (boa api para criar graficos 3d), direct-draw/directx (essas duas dizem q é equivalente ao sdl e opengl porem so para windows diferente do sdl/opengl q é multi-plataforma), nao vou ensinar instalar o sdl pq e facil basta baixar os modulos e linkar com seu compilador ou IDE

[Você precisa estar registrado e conectado para ver este link.]

para começar temos q declarar a biblioteca SDL/SDL.h (quando eu começei a pesquisar sobre ela lembro de ver alguns tutorias dizendo para declarar apenas SDL.h mais nunca funciono aq, deve ser para outros sistemas ou versao sei la '-' )

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
}

agora falta agente iniciar o sdl com a funçao SDL_Init, para ser mais especifico temos q iniciar determinada parte do sdl q pode ser o audio ou video entre outras coisas, por hora vamos iniciar apenas o video entao passamos como argumento para a funçao a constante SDL_INIT_VIDEO

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
   SDL_Init(SDL_INIT_VIDEO);
}

agora temos q usar uma funçao para finalizar o programa q seria o SDL_Quit

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
   SDL_Init(SDL_INIT_VIDEO);
   SDL_Quit();
}

para agente compilar temos q linkar com SDL

gcc fts.c -o hack -l SDL

para criar uma janela usamos a funçao SDL_SetVideoMode passamos como argumento a largura, altura, tamanho em bytes, e como ela sera criada(memoria ram, memoria da placa video etc), no caso vou criar uma janela 600,400x32 e na memoria ram (SDL_SWSURFACE), tambem temos q atribuir a funçao a um ponteiro do tipo SDL_Surface

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
   SDL_Surface *janela;
   SDL_Init(SDL_INIT_VIDEO);
   janela = SDL_SetVideoMode(600,400,32,SDL_SWSURFACE);
   SDL_Quit();
}

quando executar o programa vai finalizar rapidamente isso ocorre devido o sdl nao ter um loop infinito para evento diferente do gtk q tinha gtk_main, para agente criar um basta criar uma variavel do tipo int com um valor verdadeiro no caso 1 e passar ele como argumento para um laço while

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
   SDL_Surface *janela;
   int loop = 1;
   SDL_Init(SDL_INIT_VIDEO);
   janela = SDL_SetVideoMode(600,400,32,SDL_SWSURFACE);
   while(loop)
   {
   }
   SDL_Quit();
}

o programa vai ficar em um loop infinito mais sem esperar evento, para fazer ele ficar checando evento usamo outro loop while passamos como argumento a funçao SDL_PollEvent dentro dessa funçao passamos o endereço de memoria de uma variavel do tipo SDL_Event

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
   SDL_Surface *janela;
   SDL_Event e;
   int loop = 1;
   SDL_Init(SDL_INIT_VIDEO);
   janela = SDL_SetVideoMode(600,400,32,SDL_SWSURFACE);
   while(loop)
   {
      while(SDL_PollEvent(&e))
      {
      }
   }
   SDL_Quit();
}

dentro do while usamos a condiçao if passamos e comparamos o atributo type do evento com a constante SDL_QUIT e dentro do escopo atribuimos a variavel q segura o primeiro o loop o valor 0 para finalizar (traduzindo tudo quando aperta no x o programa fecha '-' )

Código:
#include <stdio.h>
#include <SDL/SDL.h>

int main(void)
{
   SDL_Surface *janela;
   SDL_Event e;
   int loop = 1;
   SDL_Init(SDL_INIT_VIDEO);
   janela = SDL_SetVideoMode(600,400,32,SDL_SWSURFACE);
   while(loop)
   {
      while(SDL_PollEvent(&e))
      {
         if(e.type == SDL_QUIT)
         {
            loop = 0;
         }
      }
   }
   SDL_Quit();
}

[Você precisa estar registrado e conectado para ver esta imagem.]

bom galera isso e so uma introduçao, logo logo vou fazer a continuaçao dele ^^

by hfts315
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum