quarta-feira, 21 de março de 2007

SDL - Parte 4

Olá pessoal!
Depois de um grande período sem novos posts, finalmente consegui arranjar um tempo para poder adicionar esta continuação do nosso "curso" de SDL.
Objetivos deste artigo:
1. Aprender a utilizar um pequeno evento de fechar janela
2. Aprender como importar imagens de outros formatos, diferentes de BMP.

Vamos lá, dê uma estudada neste código:

#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

int main(int argc, char *argv[]){
SDL_Surface *janela, *imagem;
SDL_Rect rect;
SDL_Event evento;
int x, y;
int sair = 0;

if(SDL_Init(SDL_INIT_EVERYTHING) == -1){
printf("Problema na inicialização do SDL");
exit(1);
}
janela = SDL_SetVideoMode(800, 600, 32, SDL_ANYFORMAT |
SDL_DOUBLEBUF);
if(!janela){
printf("Problema na inicialização da janela");
exit(1);
}

x=100;
y=100;

while(sair == 0){
if(evento.type == SDL_QUIT)
sair = 1;
else{
SDL_PollEvent(&evento);
rect = (SDL_Rect) {x, y, NULL, NULL};
imagem = IMG_Load("imagens/img.jpg");
SDL_BlitSurface(imagem, NULL, janela, &rect);
SDL_Flip(janela);
x = x+10;
y = y+10;
SDL_Delay(30);
}
}

SDL_FreeSurface(imagem);
SDL_FreeSurface(janela);
SDL_Quit();
return 0;
}


Para compilar este código basta utilizar: gcc -o sdl4 sdl_parte4.c -lSDL -lSDL_image
Bom, como você deve ter percebido, temos algumas coisas iguais ao código passado.
O que nos interessa neste novo código é o seguinte:
A biblioteca SDL_image.h que contém as funções para tratamento de imagem.
A linha SDL_Event evento; -> Aqui nós declaramos um evento, com ele podemos fazer algumas coisas bem divertidas, mas isso vou deixar para um próximo post;
Agora na linha if(evento.type == SDL_QUIT) -> nós estamos verificando se a janela foi fechada (com ALT + F4 ou clique mesmo).
Depois o que temos é o seguinte imagem = IMG_Load("imagens/img.jpg");. Esta função não faz nada mais do que procurar a imagem passada como parâmetro e retornar para a surface.
Depois nós somente movimentamos a imagem chamada.
Agora como "lição de casa" que tal adicionar um fundo a janela?

Bom pessoal, por hoje é isso. Fiz este artigo meio que às pressas, portanto qualquer correção ou falha, mande-me um email ou adicione um comentário.
Obrigado e até a próxima!.

segunda-feira, 12 de março de 2007

SDL - Parte 3


Olá pessoal,
Resolvi postar hoje um tutorial como fazer para importar figuras Bitmap para uma interface SDL. Neste artigo estou utilizando somente arquivos bitmap mesmo, ou seja, arquivos com a extensão .BMP. No próximo artigo, pretendo ensinar-lhes como inserir outro formato de imagem.

Bom, vamos nessa:
Dê uma olhada nesse código:

#include <stdio.h>
#include <SDL/SDL.h>

int main(int argc, char *argv[]){
SDL_Surface *janela, *imagem;
SDL_Rect rect;
Uint8 *tecla;
int sair = 0;

if(SDL_Init(SDL_INIT_EVERYTHING) == -1){
printf("Problema na inicialização do SDL");
exit(1);
}
janela = SDL_SetVideoMode(800, 600, 32, SDL_ANYFORMAT |
SDL_DOUBLEBUF);
if(!janela){
printf("Problema na inicialização da janela");
exit(1);
}

rect = (SDL_Rect) {400, 300, NULL, NULL};
imagem = SDL_LoadBMP("/imagens/imagem.bmp");
SDL_BlitSurface(imagem, NULL, janela, &rect);
SDL_Flip(janela);

while(sair == 0){
SDL_PollEvent(NULL);
tecla = SDL_GetKeyState(NULL);
if(tecla[SDLK_ESCAPE]) sair = 1;
}

SDL_FreeSurface(imagem);
SDL_FreeSurface(janela);
SDL_Quit();
return 0;
}


Bom, para compilar todos vocês já devem estar careca de saber né?
gcc -o teste arquivo.c -lSDL

Bom, o que há de novo nesse código?

Temos um novo tipo de dados: SDL_Rect
Este cara, nada mais faz do que indicar a posição da imagem na surface. Você pode perceber que tivemos dois warnings quando compilamos o código, certo? É por causa dele mesmo, mas hoje não vou explicar o que é aquilo.

Ainda temos o imagem = SDL_LoadBMP("/imagens/imagem.bmp"); onde passamos como parâmetro o local da imagem. Pode ser tanto caminho absoluto, quanto sua pasta local.

Depois temos: rect = (SDL_Rect) {400, 300, NULL, NULL}; Este cara é o SDL_Rect que declaramos lá em cima, onde dizemos a posição de origem dele (400, 300), os outros parâmetros passarei depois para que servem também, caso estejam com pressa, man SDL_Rect ;-)

Agora o SDL_BlitSurface(imagem, NULL, janela, &rect); este cara, é a função que vai indicar onde que vai ser inserida a imagem que acabamos de pedir. ou seja, insira a imagemna janela com o rect, ou seja na posição indicada por rect.

Bom pessoal, por hoje é isso que eu queria postar, já sabem né: Comentem, corrijam, critiquem ....
É isso ai, obrigado e uma ótima semana a todos!
Fui!

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!

segunda-feira, 5 de março de 2007

SDL - Parte 1


Olá Pessoal!
É com grande satisfação que eu anuncio hoje (05/05/2007) que meu blog estará com um novo rumo, porém mantendo os objetivos iniciais, que eram configuração de sistema, tutorias, etc...
Bom, como vocês devem ter notado na chamada do post, este irá se tratar de SDL.

O que é SDL?
SDL é uma API gráfica que cuida de gerenciamentos de janelas e/ou controle de entrada de dados.
O SDL é um conjunto de funções onde se pode fazer quase tudo, digo quase porque eu ainda não utilizei a biblioteca inteira, mas pretendo hehehe.
Então chega de bla bla bla e vamos começar.
Vou partir do princípio que todos vocês já sabem ao menos um básico de C ou C++ e que já tem a biblioteca do SDL instalada no diretório padrão (/usr/include). Pelo que eu sei, e o Ubuntu e os Debian's Like não vem com a SDL instalada por padrão, mas nada que um APT não resolva.

Bom vamos lá.
Crie um arquivo com extensão .c

zimmermann@Anakin:~$ vi testeSDL.c


Dica: Se você deseja utilizar o VI, pode usar o meu arquivo .vimrc e seja felize heheheh. Ou caso você tenha uma máquina parruda, você pode utilizar o Eclipse para desenvolver em C/C++ perfeitamente.

Agora, vamos ao que interessa:

#include <stdio.h> //Biblioteca padrão
#include <SDL/SDL.h> //Biblioteca do SDL

int main(int argc, char **argv){ //Main normal

SDL_Surface *janela; //Surface SDL

if(SDL_Init(SDL_INIT_VIDEO) == -1){ //Inicializando o vídeo e checando erros
printf("Problema na inicializacao do SDL, saindo!"); // Mensagem de DEBUG
exit(0); //Saia do programa
}
janela = SDL_SetVideoMode(540, 480, 16, SDL_ANYFORMAT | SDL_DOUBLEBUF); //Iniciando a janela

SDL_Delay(2000); //Tempo até fechar a janela
SDL_Quit(); //Fechando todo o SDL
return 0; //Retornando ao sistema
}



Para compilar este código, basta usar o seguinte comando:

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


Bom, como se pode perceber, inicializar uma janela em SDL não é muito complicado não né?
Então deixa eu explicar o que ocorre lá em cima:
na linha #include //Biblioteca do SDL estamos importando a biblioteca que precisamos.
Já na linha SDL_Surface *janela; //Surface SDL estamos inicializando uma surface chamada janela. Quase tudo que iremos utilizar, tanto para imagens e quanto a janelas, será uma surface.
Agora na linha if(SDL_Init(SDL_INIT_VIDEO) == -1) estamos inicializando o video para podermos utilizar a interface.
E na linha janela = SDL_SetVideoMode(540, 480, 16, SDL_ANYFORMAT | SDL_DOUBLEBUF); estamos inicializando uma janela de 540x480 com 16 bits por pixel e com algumas flags. Não vou entrar em detalhes sobre flags ainda, mas este é um assunto muito interessante.
E na linha SDL_Delay(2000); é o tempo até a janela se fechar automaticamente.
E por fim, na linha SDL_Quit(); estamos fechando toda a SDL que está em memória.

Bom por hoje é só pessoal. Qualquer dúvida, por favor mail-me

diego.c.zimmermann at gmail dot com

Até mais e obrigado, logo logo mais artigos de SDL frente.

quinta-feira, 1 de março de 2007

Futuras postagens

Boa noite pessoal,
só para não deixar em branco esta semana, estou postando aqui o que pretendo futuramente postar pra galera.
Minha idéia é a seguinte: Como estou trabalhando agora na área de jogos eletrônicos, vou começar a postar aqui algumas dicas de como programar em C + SDL.
Mas hoje é só isso que pretendo postar, vamos ver se nesse final de semana dá ânimo, dai eu ponho algo realmente interessante para vocês aqui, OK?
Obrigado pelo apoio, e até mais!
Falow!!!!

buscapé

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