sdl-passo-a-passo

download sdl-passo-a-passo

of 48

Transcript of sdl-passo-a-passo

SDL Passo-a-Passo

Guedes, Maurilio - Comunidade PDJ [email protected] Criado em 14 de julho de 2007 Atualizado em 1 de dezembro de 2007

SDL Passo-a-PassoGuedes, Maurilio 1 de dezembro de 2007

1 SDL Passo-a-Passo Distribuda na forma de GFDL (http://www.gnu.org/copyleft/fdl.html). Copyright c 2007 - Guedes, Maurilio. Este livro um livro texto (TextBook), voc pode distribu-lo e/ou modic-lo sob os termos da LICENA PBLICA DE DOCUMENTOS DA GNU (GFDL), conforme publicada pela FREE SOFTWARE FOUNDATION verso 1.2 da licena como qualquer outra verso mais nova. Preservando as sees "no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts". Uma cpia da licena est localizada no captulo LICENA PBLICA DE DOCUMENTOS. Este livro foi desenvolvido para auxiliar no aprendizado da biblioteca grca SDL para o grupo de estudo da comunidade PDJ (www.pdj.com.br).

Guedes, Maurilio

SDL Passo-a-Passo

2

DedicatriaDedico esse livro a minha querida e amada esposa e minhas duas lhas, minha lua e minhas estrelas que iluminam todos os dias minha escurido interna. Aos meus pais que me apoiaram e nanciaram meus estudos. Aos colegas de comunidades que me ajudarm durantes esses longos anos. Aos adeptos da losoa livre.

AgradecimentosA todos os desenvolvedores que trabalham com fontes abertas, programadores de comportamento tico e defensores da total divulgao, sem os quais a evoluo do conhecimento nunca poderia ser realmente alcanada. A comunidade PDJ pelo grande contedo de informaes totalmente livre, onde adquiri muitos conhecimentos. Ao google por ser uma tima ferramente de procura, sem o qual esse livro seria muito mais difcil de ser feito.

Sobre o autorGuedes, Maurilio formado em processamento de dados, atualmente desenvolve aplicativos comerciais e industriais multi-plataforma. Ele tem 14 (Quatorze) anos de experincia em desenvolvimento de aplicativos. Um defensor do cdigo fonte aberto, ele acredita que o Gnu/Linux estvel, seguro e bonito porque aberto e grtis.

Guedes, Maurilio

SDL Passo-a-Passo

SUMRIO

3

Sumrio1 Introduo 1.1 Ao leitor . . . . . . . . . . . . . . . . . . 1.2 Sobre o livro . . . . . . . . . . . . . . . . 1.3 Como ler o livro . . . . . . . . . . . . . . 1.4 Pr Requesito . . . . . . . . . . . . . . . 1.5 O que no ser ensinado . . . . . . . . . 1.6 Perguntas Frequentes . . . . . . . . . . . 1.6.1 O que SDL? . . . . . . . . . . . 1.6.2 Para que ela utilizada? . . . . . 1.6.3 Em qual plataforma ela funciona? 1.6.4 Em qual linguagem ela trabalha? . 1.6.5 Qual a licena? . . . . . . . . . 7 7 7 7 8 8 8 8 9 9 9 9 10 10 14 20 23 29 32 34 35 35 41

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

2

Vdeo Bsico 2.1 Inicializando o vdeo do sdl . . . . . . . . . . . . 2.2 Entendendo a inicializao do vdeo . . . . . . . 2.3 Inicializando a tela de vdeo . . . . . . . . . . . 2.4 Entendendo a inicializao da tela de vdeo . . . 2.5 Vericando se um modo de resoluo suportado 2.6 Exerccio . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

A Aplicativos Utilizados para Fazer o Livro B Licena Pblica de Documentos B.1 Licena de Documento Livre GNU . . . . . . . . . . . . . . . . . . . . . . . . B.2 GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . .

Guedes, Maurilio

SDL Passo-a-Passo

LISTA DE FIGURAS

4

Lista de Figuras2.1 2.2 2.3 2.4 2.5 Inicializando o vdeo do sdl . . . . . . . . . . . . Entendendo a inicializao do vdeo . . . . . . . Inicializando a tela de vdeo . . . . . . . . . . . Entendendo a inicializao da tela de vdeo . . . Vericando se um modo de resoluo suportado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 19 23 28 32

Guedes, Maurilio

SDL Passo-a-Passo

LISTA DE TABELAS

5

Lista de Tabelas2.1 2.2 Parmetros das funes SDL_Init() e/ou SDL_InitSubSystem() . . . . . . . . . Parmetro da funo SDL_SetVideoMode() . . . . . . . . . . . . . . . . . . . 14 24 34

A.1 Aplicativos utilizados para fazer o livro . . . . . . . . . . . . . . . . . . . . .

Guedes, Maurilio

SDL Passo-a-Passo

LISTINGS

6

Listings2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Dica - Funo SDL_WasInit() . . . . . . . . . . Inicializando o vdeo do sdl . . . . . . . . . . . . Dica - Inicializando vrios sub-sistemas . . . . . Entendendo a inicializao do vdeo . . . . . . . Inicializando a tela de vdeo . . . . . . . . . . . Falha - Tipo de Varivel SDL_Surface . . . . . . Entendendo a inicializao da tela de vdeo . . . Vericando se um modo de resoluo suportado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 14 15 20 24 25 29

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 1. INTRODUO

7

Captulo 1 IntroduoAntes de demonstrar a biblioteca multimdia SDL precisamos saber algumas coisas antes, esse captulo fundamental para o aproveitamento deste livro.

1.1

Ao leitor

Depois de muitos anos jogando jogos eletrnicos, voc sentiu desejo em aprender como desenvolver um jogo eletrnico. Como faz-lo? Qual linguagem usar? Qual biblioteca multimdia usar? Foram suas perguntas iniciais, depois de muito pesquisa e estudo, voc j conhece as respostas para essas perguntas, e agora, voc precisa aprender como utilizar a biblioteca multimdia SDL com C/C++. Voc ir aprender as principais funes da biblioteca multimdia SDL de uma maneira fcil e eciente, com exemplos teis, dicas de cdigo, cuidados no cdigo para evitar possveis falhas, informaes para melhorar seu cdigo para ter uma melhor performace e entre outras coisas mais.

1.2

Sobre o livro

Este livro foi desenvolvido com o objetivo de reunir os vrios conhecimentos de programao utilizando a biblioteca multimdia SDL, e servir de base para um curso autodidata para a comunidade PDJ. O objetivo passar ao estudante, as noes de programao eciente da biblioteca multimdia SDL de uma forma rpida e direta, sendo desejvel o acompanhamento dos estudos por programador com experincia atravs do FORUM (http://www.pdj.com.br/forum/viewforum.php?f=19). Ao longo da apresentao dos temas, so includos exemplos e exerccios. O aluno deve ler todos os tpicos e vericar o funcionamento com os exemplos. muito importante compilar os exemplos e vericar o seu funcionamento.

1.3

Como ler o livro

Para facilitar a leitura do livro, foram criadas algumas indicaes: Dica: Ao longo dos captulos so apresentadas algumas dicas. Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 1. INTRODUO Performance: So dicas de como aumentar o desempenho de seus jogos. Falha: Cuidados para evitar a presena de falhas em seus cdigos. Prottipo: Dene a sintaxe de determinado comando, aparece em MonoEspaado.

8

Exemplo informativo: No so cdigos completos, so apenas pedaos de cdigo, para ilustrar e determinar a caracterstica. Exemplo: So cdigos completos, que ilustram vrios comandos para realizar um determinado objetivo. Compilao: So linhas de comando para compilar o cdigo completo no compilador GCC. Figura: Imagem da tela de como ser o resultado nal. Termo em ingls: Ser feito uma verso em portugus, com o termo original em itlico e entre "()"(Parnteses).

1.4

Pr Requesito

O pr requesito para aproveitar todo o potencial do livro : Conhecimento de lgica de programao; Conhecimento da losoa orientado a objeto; Conhecimento da linguagem de programao C++; Conhecimento de programao multi-plataforma; Ser autodidata.

1.5

O que no ser ensinado

No ser ensinado lgica de programao, conceito orientado a objeto, programao multiplataforma, a linguagem de programao C++ e a biblioteca tridimensional (3D) OpenGL.

1.6

Perguntas Frequentes

Nessa seo respondido as peguntas mais frequentes.

1.6.1

O que SDL?

uma biblioteca multimdia e multi-plataforma, designada em acessar em nvel baixo o udio, teclado, rato (mouse), manete (joystick), acelerao 3D via mquina (3D Hardware) atravs do OpenGL, e quadro de memria 2D (2D Video FrameBuffer). Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 1. INTRODUO

9

1.6.2

Para que ela utilizada?

utilizada em vrios programas de tocadores de MPEG (vdeo e udio), emuladores e em vrios jogos populares, incluindo o vencedor do prmio portabilidade para Linux (Linux port) o "Civilization: Call To Power".

1.6.3

Em qual plataforma ela funciona?

Ela funciona em Gnu/Linux, Windowsm Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX e QNX.

1.6.4

Em qual linguagem ela trabalha?

Ela escrita em C, mas trabalha nativamente em C++, e tem amarrao com vrias outras linguagens, incluindo Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby e Smalltalk.

1.6.5

Qual a licena?

Ela distribuda sob a Licena Pblica Geral Menor GNU verso 2 (GNU LGPL version 2). Essa licena permite que voc use a SDL livremente em programas comerciais contanto que voc aponte (link) para a biblioteca dinmica (dynamic library). Para mais informaes acesse http://www.gnu.org/copyleft/lesser.html

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

10

Captulo 2 Vdeo BsicoEsse captulo tem o objetivo de ensinar as manipulaes bsicas do vdeo.

2.1

Inicializando o vdeo do sdl

A biblioteca SDL composta por oito sub-sistemas, tais como, udio, unidade de CD (cdrom), manipulao de evento (event handling), entrada e sada de arquivo (le I/O), manipulao de manete (joystick handling), encadeamento (threading), cronmetro (timers) e vdeo. Antes de voc poder usar alguns desses sub-sistemas necessrio inicializ-los chamando a funo SDL_Init() ou SDL_InitSubSystem(). A SDL_Init() deve ser chamado antes de qualquer outra funo SDL. Ela inicializa automaticamente a manipulao de evento (event handling), entrada e sada de arquivo (le I/O) e o sub-sistema encadeamento (threading). Para inicializar o sub-sistema padro e o sub-sistema vdeo voc deve chamar: SDL_Init(SDL_INIT_VIDEO) Para inicializar o sub-sistema padro, o vdeo e o cronmetro (timers) voc deve chamar: SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) A SDL_Init() complementada pela SDL_Quit() ou SDL_QuitSubSystem(). A SDL_Quit() desliga todos os sub-sistemas, incluindo o padro. Voc sempre deve cham-la antes de sair da aplicao SDL. Com SDL_Init() e SDL_Quit() rmemente embutido em seu cdigo voc pode escrever seu primeiro e a maior parte bsica de uma aplicao SDL. Por outro lado, ns devemos nos preparar para os cabealhos de erros (handle erros). Muitas funes SDL retornam um valor e indicam se uma funo foi bem sucedida ou falhou, SDL_Init(), por exemplo, retorna -1 (menos um) se ela no puder inicializar o sub-sistema. O SDL fornece um facilitador til que permite voc determinar exatamente qual problema ocorreu, a qualquer momento pode ocorrer um erro dentro do SDL e uma mensagem armazenada para que voc possa peg-la usando a funo SDL_GetError(). Use-a freqentemente, voc nunca pode saber quando ocorrer um erro. Dica: Antes de inicializar algum sub-sistema utilize a funo SDL_WasInit() para vericar se a mesma j est inicializada, como por exemplo: Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO... if ( SDL_WasInit ( SDL_INIT_TIMER ) == 0 ) { SDL_InitSubSystem ( SDL_INIT_TIMER ) ; } ...

11

Listing 2.1: Dica - Funo SDL_WasInit()1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

/ SDL P a s s o aP a s s o C o p y r i g h t ( C ) 2007 Guedes , M a u r i l i o E s t e a r q u i v o p a r t e do l i v r o SDL P a s s o aP a s s o O mesmo s o f t w a r e l i v r e ; v o c pode r e d i s t r i b u l a e / ou m o d i f i c l a s o b o s t e r m o s da L i c e n a P b l i c a G e r a l Menor do GNU conforme p u b l i c a d a p e l a Free Software Foundation ; t a n t o a v e r s o 2 . 1 da L i c e n a , ou ( a s e u c r i t r i o ) q u a l q u e r v e r s o p o s t e r i o r . E s t e a r q u i v o d i s t r i b u d o na e x p e c t a t i v a de que s e j a t i l , porm , SEM NENHUMA GARANTIA ; nem mesmo a g a r a n t i a i m p l c i t a de COMERCIABILIDADE OU ADEQUAO A UMA FINALIDADE ESPECFICA . C o n s u l t e a L i c e n a P b l i c a G e r a l Menor do GNU p a r a m a i s d e t a l h e s . Voc d e v e t e r r e c e b i d o uma c p i a da L i c e n a P b l i c a G e r a l Menor do GNU j u n t o com e s t a b i b l i o t e c a ; s e no , e s c r e v a p a r a a F r e e S o f t w a r e F o u n d a t i o n , I n c . , no e n d e r e o 59 Temple S t r e e t , S u i t e 3 3 0 , Boston , MA 02111 1307 USA . b i l l g u e d e s @ t e r r a . com . b r / #include < i o s t r e a m > #ifdef WIN32 / / Caso s e j a Windows #include "SDL.h" #include "windows.h" #else / / Caso s e j a n i x #include #endif using namespace std ; #define DEBUG / / A t i v a a d e p u r a o class Sdl { public : Sdl ( ) ; / / I n i c a l i z a o p a d r o virtual ~Sdl ( ) ; / / D e s t r u i d o r p a d r o void InicializarVideo ( ) ; / / I n i c i a l i z a o v d e o private : / / E x e c u t a um mensagem de e x e c e o void ExecutarExcecao ( const string& mensagem ) ; } ; / / Fim S d l

Sdl : : Sdl ( ) { 47 #ifdef DEBUG 48 cout