quarta-feira, 7 de março de 2007

SDL - Parte 2


Olá pessoal!
Postando hoje, a segunda parte de nosso tutorial de SDL.

Objetivos:
- Poder criar uma janela;
- Configurar esta janela como Fullscreen;
- Configurar a tecla ESC (Escape) para terminar o SDL e sair do programa.

Prontos?

Como vimos no último artigo criamos uma janela, com um determinado tamanho e utilizamos um Delay para finalizar a janela.

Lembram-se quando eu falei das Flags no último tutorial?
Então, hoje vamos utilizar um flag novo para poder deixar esta tela em fullscreen.
Vamos lá?


zimmermann@Anakin:~$ vim testeSDL2.c


Vamos incluir os headers e o que desejamos dentro deste atquivo:

#include <stdio.h> //Entrada e saida para o C
#include <SDL/SDL.h> //Header principal do SDL
#include <stdlib.h> //Para usar o exit

int main(){
SDL_Surface *janela; //Nossa surface que será a janela
Uint8 *teclas; //Nossas teclas do teclado
int sair = 0; //Uma variavel para segurar o software

if(SDL_Init(SDL_INIT_EVERYTHING) == -1){ //SDL iniciando tudo
printf("Problema na inicialização do SDL\nSaindo"); //Imprime o erro
SDL_Quit(); //Termina o SDL
exit(1); //Retorna 1 para o sistema, indicando erro
}

janela = SDL_SetVideoMode(540, 480, 16, SDL_ANYFORMAT | SDL_DOUBLEBUF
| SDL_FULLSCREEN);
if(!janela){ //Se janela for nulo é porque não iniciou a surface
printf("Não pude inicializar a janela!\nSaindo"); //Mensagem de erro
SDL_Quit(); //Sai do SDL
exit(1); //Retorna erro ao sistema
}

while(sair == 0){ //Laço que segura o software inteiro
SDL_PollEvent(NULL); //Verifica todos os eventos que ocorrem
teclas = SDL_GetKeyState(NULL);
//Armazena na pilha os eventos de teclado
if(teclas[SDLK_ESCAPE]){ //Se a tecla ESCAPE (Esc) for apertada
sair = 1; //Então saia
SDL_Quit(); //Termina o SDL
}
}

return 0; //Retorna ao sistema
}



Para compilar este código:

zimmermann@Anakin:~$ gcc -o testeSDL2 testeSDL2.c -lSDL


Depois de compilado, execute o programa:

zimmermann@Anakin:~$ ./testeSDL2


O que ocorrerá é que aparecerá uma "belíssima" tela preta dominando todo o seu ambiente gráfico!
Bom, você pode perceber que uma das linha eu não comentei.
Deixei isso para fazer agora:

janela = SDL_SetVideoMode(540, 480, 16, SDL_ANYFORMAT | SDL_DOUBLEBUF
| SDL_FULLSCREEN);


O que eu fiz nessa linha?
Iniciei uma janela, com 540 pixels de largura, 480 de altura, 16 bits por pixel, e com as flags:
SDL_ANYFORMAT -> Previne para que o SDL crie uma surface, e não a sua placa de vídeo
SDL_DUBLEBUFF -> Permite um SDL_Flip (veremos mais para frente quando importarmos figuras
SDL_FULLSCREEN -> Deixa a apicação como FullScreen

Bom pessoal, por hoje é isso que eu quero passar. Comentem, critiquem, ... Mas quando o fizer, mande seu email junto, para podermos manter um melhor contato.
Obrigado pelo apoio e até mais!

3 comentários:

Daniel Braga disse...

Estou gostando desses artigos. Sempre quis aprender SDL. Estarei aguardando cada postagem :)

Anônimo disse...

POSTEI DUAS VEZES SORRY!
ei diego tipo, vc ta dando nocoes de SDL eu ja dei uma olhada e tal e curti!
sera que em vez de criar tuts para criacao de jogos, voce poderia postar tuts sobre GUI's em SDL.
pq isso em portugues axo meio dificil!

BooT disse...

Daniel, obrigado pelo apoio, e continuarei postando artigos periodicamente.

Fred, estas noções que estou postando, servem tanto para jogos, quanto para interfaces, basta adapta-las ao que você deseja. Mas futuramente, pretendo postar alguns programas inteiros para que você tenha noção desta biblioteca e sua facilidade de uso.

A todos, por favor, caso desejem manter contato comigo, ou insiram email de vocês, ou mandeme um email diretamente, ficará mais fácil para responder, e ao invés de aguradar resposta, terão diretamente ela em seu email.

Obrigado pelo apoio!
Até mais

buscapé

dell
Saiba onde tem o melhor preço antes de comprar