<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Vítor Baptista &#187; SDL</title>
	<atom:link href="http://vitorbaptista.com/category/artigos/sdl/feed/" rel="self" type="application/rss+xml" />
	<link>http://vitorbaptista.com</link>
	<description>&#34;Você deve ser a mudança que deseja ver no mundo.&#34; Gandhi</description>
	<lastBuildDate>Thu, 02 Feb 2012 16:37:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Exemplo da SDL_gfx</title>
		<link>http://vitorbaptista.com/exemplo-da-sdl_gfx/</link>
		<comments>http://vitorbaptista.com/exemplo-da-sdl_gfx/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 02:52:17 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/07/05/sdl_gfx-sdl-programacao-c-programacao-jogos/</guid>
		<description><![CDATA[Depois de configurarmos a SDL_gfx, vamos usá-la! 1 #include &#34;SDL/SDL_gfxPrimitives.h&#34; Incluímos as headers da SDL_gfx que iremos usar. No main, temos diversos métodos para desenhar. Cada um abaixo acompanha a descrição de seus parâmetros. 2 3 //Desenha uma linha com anti-aliasing, para aumentar a qualidade aalineRGBA&#40;tela, 500, 20, 550, 150, 0, 0, 0, 255&#41;; int [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de configurarmos a <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a>, vamos usá-la!</p>
<div style="text-align: center"><img src='http://vitorbaptista.com/wp-content/uploads/2007/07/exemplosdlgfx.png' alt='Exemplo SDL_gfx' /></div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &quot;SDL/SDL_gfxPrimitives.h&quot;</span></pre></td></tr></table></div>

<p>Incluímos as headers da <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a> que iremos usar.</p>
<p>No main, temos diversos métodos para desenhar. Cada um abaixo acompanha a descrição de seus parâmetros.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>2
3
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Desenha uma linha com anti-aliasing, para aumentar a qualidade</span>
aalineRGBA<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000dd;">500</span>, <span style="color: #0000dd;">20</span>, <span style="color: #0000dd;">550</span>, <span style="color: #0000dd;">150</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>int aalineRGBA(SDL_Surface * destino, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha);</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
5
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Desenha um círculo</span>
filledCircleRGBA<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000dd;">50</span>, <span style="color: #0000dd;">50</span>, <span style="color: #0000dd;">30</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>int filledCircleRGBA(SDL_Surface * destino, Sint16 x, Sint16 y, Sint16 raio, Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha);</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>6
7
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Desenha uma elipse</span>
filledEllipseRGBA<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000dd;">200</span>, <span style="color: #0000dd;">300</span>, <span style="color: #0000dd;">100</span>, <span style="color: #0000dd;">50</span>, <span style="color: #0000dd;">125</span>, <span style="color: #0000dd;">125</span>, <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>int filledEllipseRGBA(SDL_Surface * destino, Sint16 x, Sint16 y, Sint16 raiox, Sint16 raioy, Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha);</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>8
9
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Desenha um retângulo</span>
boxRGBA<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000dd;">400</span>, <span style="color: #0000dd;">300</span>, <span style="color: #0000dd;">600</span>, <span style="color: #0000dd;">350</span>, <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>int boxRGBA(SDL_Surface * destino, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha);</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>10
11
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Desenha um triângulo</span>
filledTrigonRGBA<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000dd;">200</span>, <span style="color: #0000dd;">20</span>, <span style="color: #0000dd;">300</span>, <span style="color: #0000dd;">20</span>, <span style="color: #0000dd;">240</span>, <span style="color: #0000dd;">90</span>, <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">255</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>int filledTrigonRGBA(SDL_Surface * destino, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Sint16 x3, Sint16 y3, Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha);</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>12
13
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Desenha uma string</span>
stringRGBA<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000dd;">100</span>, <span style="color: #0000dd;">400</span>, <span style="color: #FF0000;">&quot;www.vitorbaptista.com&quot;</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">255</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>int stringRGBA(SDL_Surface * destino, Sint16 x, Sint16 y, char *string, Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha);</p>
<p>Agora já temos quase todo o conhecimento necessário para começar a desenvolver nosso Pong.<br />
No próximo artigo irei mostrar uma forma de detecção de colisões bem básica, mas que irá servir bem para o que queremos.</p>
<blockquote><p>Baixe os fontes deste exemplo <a href='http://vitorbaptista.com/wp-content/uploads/2007/07/03_sdl_gfx.zip'>aqui</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/exemplo-da-sdl_gfx/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Instalando extensões para a SDL &#8211; Windows</title>
		<link>http://vitorbaptista.com/instalando-extensoes-para-a-sdl-windows/</link>
		<comments>http://vitorbaptista.com/instalando-extensoes-para-a-sdl-windows/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 02:46:13 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/07/05/extensoes-windows-biblioteca-c-jogos-sdl_gfx-sdl/</guid>
		<description><![CDATA[Como visto no post anterior, iremos instalar a SDL_gfx no Dev-C++, porém os passos aqui podem ser usados para instalar qualquer outra extensão que você precise. Como de costume com o Dev-C++, temos duas opções para instalar a extensão. Ou baixa os fontes e instala manualmente, ou usa um .DevPak. Não vou tentar te ensinar [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://vitorbaptista.com/wp-content/uploads/2007/06/devcpp.png" alt="Dev C++" /><br />
Como visto no post anterior, iremos instalar a <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a> no <a href="http://www.bloodshed.net/devcpp.html" target="_blank">Dev-C++</a>, porém os passos aqui podem ser usados para instalar qualquer outra extensão que você precise.</p>
<p>Como de costume com o Dev-C++, temos duas opções para instalar a extensão. Ou baixa os fontes e instala manualmente, ou usa um .DevPak.<br />
Não vou tentar te ensinar como instalar manualmente pois, por não usar mais o Windows, não sei. Caso precise, não deve ser muito complicado. Você pode baixar a SDL_gfx de seu <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">site oficial</a> e seguir as instruções de instalação.</p>
<p>Vamos começar a instalação com o .DevPak. </p>
<ol>
<li>Baixe o arquivo <a href="http://old.devpaks.org/show.php?devpak=160" target="_blank">aqui</a>;</li>
<li>Vá em <em>Tools</em>/<em>Package Manager</em>;</li>
<li>Clique em <em>Install</em>;</li>
<li>Uma tela irá aparecer para você mostrar aonde está o <em>.DevPak</em>;</li>
</ol>
<p>Pronto! Seu Dev-C++ já deve estar configurado.<br />
No próximo post irei dar um exemplo do SDL_gfx.</p>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/instalando-extensoes-para-a-sdl-windows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando extensões para a SDL &#8211; Linux</title>
		<link>http://vitorbaptista.com/instalando-extensoes-para-a-sdl-linux/</link>
		<comments>http://vitorbaptista.com/instalando-extensoes-para-a-sdl-linux/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 00:39:10 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/07/05/instalando-extensoes-para-a-sdl-linux/</guid>
		<description><![CDATA[A base da SDL se limita a algumas funções mais básicas, gerais pra diversos tipos de aplicações. Porém, em praticamente todos os jogos que você for fazer, você irá precisar de alguns métodos que a base da SDL não possui. As extensões oficiais podem ser encontradas aqui, porém não vamos usá-las agora. Como esses artigos [...]]]></description>
			<content:encoded><![CDATA[<p>A base da SDL se limita a algumas funções mais básicas, gerais pra diversos tipos de aplicações. Porém, em praticamente todos os jogos que você for fazer, você irá precisar de alguns métodos que a base da SDL não possui.<br />
As extensões oficiais podem ser encontradas <a href="http://www.libsdl.org/projects/" target="_blank">aqui</a>, porém não vamos usá-las agora.<br />
Como esses artigos são preparatórios para nosso primeiro jogo, um clone do Pong, vou ensinar como instalar a <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a>, que adiciona funções para desenharmos, por exemplo, círculos, retângulos, etc.. A usaremos mais tarde para desenhar a bola e as barras do Pong.</p>
<p>Apesar de eu só mostrar como instalar a <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a>, o procedimento é análogo para qualquer outra extensão.</p>
<p>As principais distribuições possuem a <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a> em seus repositórios. Caso você use o <a href="http://www.gentoo.org" target="_blank">Gentoo</a>, basta digitar, como root:</p>
<blockquote><p>emerge sdl-gfx</p></blockquote>
<p>Caso use o <a href="http://www.ubuntu.com" target="_blank">Ubuntu</a>,</p>
<blockquote><p>apt-get install libsdl-gfx1.2-dev</p></blockquote>
<p>Para as distribuições baseadas no <a href="http://www.fedoraproject.org" target="_blank">Fedora</a>, no próprio site da <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a> há um .rpm para download, mas é de uma versão mais antiga. Baixe o SDL_gfx-devel-x.x.x-x.i386.rpm.</p>
<p>Se você usar outra distribuição, procure um pacote para ela. Caso não consiga encontrar, ou queira uma versão mais nova não disponível em seus repositórios, baixe os fontes e siga as instruções.</p>
<p>Depois de instalada a <a href="http://www.ferzkopp.net/joomla/content/view/19/14/" target="_blank">SDL_gfx</a>, sigamos com o artigo.<br />
Iremos ver como configurá-la no <a href="http://anjuta.sourceforge.net/" target="_blank">Anjuta</a> e no shell.</p>
<p align="center"><img src="http://blog.vitorbaptista.com/wp-content/uploads/2007/06/anjuta.png" alt="Anjuta" /><br />
<strong>Anjuta</strong></p>
<ol>
<li>Abra o <a href="http://anjuta.sourceforge.net/" target="_blank">Anjuta</a> e vá em <em>Settings</em>/<em>Compiler and Linker Settings&#8230;</em>;</li>
<li>Vá na aba <em>Libraries</em>, escreva <em>SDL_gfx</em> no campo de texto e clique em <em>Add.</em></li>
</ol>
<p>Pronto, seu <a href="http://anjuta.sourceforge.net/" target="_blank">Anjuta</a> está configurado corretamente. Siga até o final deste artigo e tente compilar o programa-teste para checar se está tudo certo.</p>
<p align="center"><img src="http://blog.vitorbaptista.com/wp-content/uploads/2007/06/screenshot-20070613015228.png" alt="Shell" /><br />
<strong>Shell</strong></p>
<ol>
<li>Compile usando:<br />
<blockquote><p>g++ -o programa programa.cpp -lSDL -lSDL_gfx</p></blockquote>
</li>
</ol>
<p>Pronto, a SDL_gfx já deve estar configurada agora. Em um próximo post irei mostrar um exemplo do uso dela. Até lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/instalando-extensoes-para-a-sdl-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao tratamento de eventos na SDL</title>
		<link>http://vitorbaptista.com/introducao-ao-tratamento-de-eventos-na-sdl/</link>
		<comments>http://vitorbaptista.com/introducao-ao-tratamento-de-eventos-na-sdl/#comments</comments>
		<pubDate>Sun, 01 Jul 2007 19:09:38 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/07/01/introducao-ao-tratamento-de-eventos-no-sdl/</guid>
		<description><![CDATA[Neste artigo da série irei mostrar brevemente o que são eventos e como funciona o tratamento deles no SDL, modificando nosso Hello World para ser finalizado caso o usuário aperte ESC ou clique no botão de fechar(aquele no canto superior direito da janela). Vamos começar. O que é um evento? Eventos são ações que o [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo da série irei mostrar brevemente o que são eventos e como funciona o tratamento deles no SDL, modificando nosso <em>Hello World</em> para ser finalizado caso o usuário aperte ESC ou clique no botão de fechar(aquele no canto superior direito da janela).<br />
Vamos começar.</p>
<p><strong>O que é um evento?</strong></p>
<blockquote><p>Eventos são ações que o usuário executa para interagir com o programa.<br />
Como exemplos podemos citar clicar/mover com o mouse, apertar/soltar uma tecla, mexer num joystick, etc.. Existem diversos eventos diferentes.<br />
Uma lista completa dos eventos tratados pela SDL pode ser encontrada na <a href="http://www.libsdl.org/cgi/docwiki.cgi/SDL_20Event_20Structures" target="_blank">parte de eventos de sua documentação</a>.</p></blockquote>
<p>A SDL nos dê várias ferramentas para tratar eventos. Uma delas é a estrutura SDL_Event, uma das mais importantes na SDL. Ela é usada principalmente para ler os eventos que estão na fila da SDL, mas também pode ser usada para colocar eventos nessa fila, normalmente para simular um evento feito pelo usuário.</p>
<p>A estrutura dela é bem simples, sua definição é:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">union</span><span style="color: #008000;">&#123;</span>
  Uint8 type<span style="color: #008080;">;</span> <span style="color: #666666;">//Tipo de evento</span>
  SDL_ActiveEvent active<span style="color: #008080;">;</span> <span style="color: #666666;">//Janela ganha/perde foco</span>
  SDL_KeyboardEvent key<span style="color: #008080;">;</span> <span style="color: #666666;">//Evento do teclado</span>
  SDL_MouseMotionEvent motion<span style="color: #008080;">;</span> <span style="color: #666666;">//Movimento do mouse</span>
  SDL_MouseButtonEvent button<span style="color: #008080;">;</span> <span style="color: #666666;">//Clique do mouse</span>
  SDL_JoyAxisEvent jaxis<span style="color: #008080;">;</span> <span style="color: #666666;">//Movimento da axis do joystick</span>
  SDL_JoyBallEvent jball<span style="color: #008080;">;</span> <span style="color: #666666;">//Movimento da trackball do joystick</span>
  SDL_JoyHatEvent jhat<span style="color: #008080;">;</span> <span style="color: #666666;">//Movimento da hat do joystick</span>
  SDL_JoyButtonEvent jbutton<span style="color: #008080;">;</span> <span style="color: #666666;">//Botões do joystick</span>
  SDL_ResizeEvent resize<span style="color: #008080;">;</span> <span style="color: #666666;">//Evento de redimensionamento da janela</span>
  SDL_QuitEvent quit<span style="color: #008080;">;</span> <span style="color: #666666;">//Evento para fechar a janela</span>
  SDL_UserEvent user<span style="color: #008080;">;</span> <span style="color: #666666;">//Evento definido pelo usuário</span>
  SDL_SywWMEvent syswm<span style="color: #008080;">;</span> <span style="color: #666666;">//Eventos específicos da plataforma, que não são tratados pela SDL</span>
<span style="color: #008000;">&#125;</span> SDL_Event<span style="color: #008080;">;</span></pre></div></div>

<p>Conhecendo esta estrutura, fica fácil ler os eventos.<br />
Vamos começar a modificar o código do nosso <em>Hello World</em>.<br />
Como o código já foi explicado em um artigo anterior, só vou mostrar as partes que mudaram.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>17
18
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Variável que guarda a estrutura dos eventos da SDL</span>
SDL_Event evento<span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aqui declaramos nosso SDL_Event, que irá guardar as informações dos eventos para tratarmos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>94
95
96
97
98
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Início do main</span>
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> args<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">//Variável que irá controlar se o usuário quer finalizar o programa</span>
	<span style="color: #0000ff;">bool</span> sair <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Como precisamos saber quando o usuário quer sair, declaramos a variável booleana <em>sair</em> que irá controlar a saída do loop principal do programa.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>111
112
113
114
115
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Loop principal</span>
	<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span>sair<span style="color: #008000;">&#41;</span> <span style="color: #666666;">//Enquanto o usuário não quiser sair...</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #666666;">//Enquanto houver um evento na fila para tratar</span>
		<span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>SDL_PollEvent<span style="color: #008000;">&#40;</span><span style="color: #000040;">&amp;</span>evento<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#123;</span></pre></td></tr></table></div>

<p>No nosso loop principal, enquanto a variável sair for false, atualizamos os eventos chamando o método SDL_PollEvent, que joga os eventos novos em um SDL_Event passado como parâmetro. Usamos ele dentro de um while pois pode haver mais de um evento a ser tratado, e queremos tratar todos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>116
117
118
119
120
121
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">			<span style="color: #666666;">//Se o evento for SDL_QUIT ou se for SDL_KEYDOWN(tecla pressionada) e a tecla for ESC...</span>
			<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>evento.<span style="color: #007788;">type</span> <span style="color: #000080;">==</span> SDL_QUIT<span style="color: #008000;">&#41;</span> <span style="color: #000040;">|</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>evento.<span style="color: #007788;">type</span> <span style="color: #000080;">==</span> SDL_KEYDOWN<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>evento.<span style="color: #007788;">key</span>.<span style="color: #007788;">keysym</span>.<span style="color: #007788;">sym</span> <span style="color: #000080;">==</span> SDLK_ESCAPE<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
				<span style="color: #666666;">//Seta a variável sair para true, fazendo com que, na próxima iteração</span>
				<span style="color: #666666;">//do while mais externo, ele saia do loop</span>
				sair <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
		<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Testamos nosso SDL_Event evento. Caso o tipo dela seja SDL_QUIT, ou seja, o usuário apertou o botão de sair(o do canto superior direito), ou se o evento for do tipo SDL_KEYDOWN, ele pressionou alguma teclado teclado, e essa tecla for ESC, nós setamos sair para true, para que, na próxima iteração a condição do while não seja satisfeita para sairmos desse loop.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>122
123
124
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">		<span style="color: #666666;">//Pausa o programa para evitar o consumo excessivo da CPU</span>
		SDL_Delay<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aqui a cada iteração do while nós damos um delay de 50ms para evitar que nosso programa consuma muitos recursos da CPU.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>125
126
127
128
129
130
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Libera os recursos e destrói a SDL</span>
	quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//Termina a execução</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Após o while nós executamos as funções para destruir a SDL e liberar as superfícies utilizadas e paramos a execução do programa.<br />
Nesta versão do <em>Hello World</em> eu organizei um pouco, colocando toda a inicialização na função <em>init()</em> e a finalização em <em>quit()</em> mas, fora isto, o código é o mesmo.</p>
<p>Pronto, compile o código e teste.<br />
Há muito mais a se falar sobre tratamento de eventos, porém o que mostrei neste artigo já é suficiente para grande parte dos casos.</p>
<p>No próximo artigo irei ensinar como instalar bibliotecas que aumentam as capacidades da SDL. Iremos instalar a SDL_gfx e irei dar um exemplo de como desenhar figuras geométricas na tela, que vamos usar no nosso Pong.</p>
<p>Até lá você pode ler a documentação da SDL e/ou também <a href="http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/" target="_blank">esta</a>, que achei melhor até que a oficial.</p>
<p>Bons estudos e até a próxima.</p>
<blockquote><p>Baixe os fontes e a imagem deste tutorial <a href='http://vitorbaptista.com/wp-content/uploads/2007/07/02_eventos.zip' title='Tratamento de Eventos'>aqui</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/introducao-ao-tratamento-de-eventos-na-sdl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;Hello World!&#8221; na SDL</title>
		<link>http://vitorbaptista.com/hello-world-na-sdl/</link>
		<comments>http://vitorbaptista.com/hello-world-na-sdl/#comments</comments>
		<pubDate>Tue, 19 Jun 2007 21:14:50 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/06/19/hello-world-no-sdl/</guid>
		<description><![CDATA[Depois de configurarmos a SDL, está na hora de começar a parte divertida: usá-la! Para isto, vamos começar com o clássico Hello World!. Ao final do tutorial teremos algo parecido com isto: Este código foi feito pelo Lazy Foo. Modificado e traduzido por mim. Então, vamos começar. Abra seu editor preferido. 1 2 3 #include [...]]]></description>
			<content:encoded><![CDATA[<p></code>Depois de configurarmos a SDL, está na hora de começar a parte divertida: usá-la!</p>
<p>Para isto, vamos começar com o clássico <em>Hello World!</em>. Ao final do tutorial teremos algo parecido com isto:</p>
<p style="text-align: center"><img src="http://blog.vitorbaptista.com/wp-content/uploads/2007/06/helloworld.png" alt="Hello World!" /></p>
<p>Este código foi feito pelo <a href="http://lazyfoo.net/SDL_tutorials/" target="_blank">Lazy Foo</a>. Modificado e traduzido por mim.<br />
Então, vamos começar. Abra seu editor preferido.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &quot;SDL/SDL.h&quot;</span>
<span style="color: #339900;">#include &lt;string&gt;</span>
<span style="color: #0000ff;">using</span> std<span style="color: #008080;">::</span><span style="color: #007788;">string</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aqui só incluímos os headers que iremos utilizar. No caso, <em>SDL</em> e <em>String</em>.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
5
6
7
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Constantes</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> SCREEN_WIDTH <span style="color: #000080;">=</span> <span style="color: #0000dd;">640</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> SCREEN_HEIGHT <span style="color: #000080;">=</span> <span style="color: #0000dd;">480</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> SCREEN_BPP <span style="color: #000080;">=</span> <span style="color: #0000dd;">32</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Nesta parte setamos as contantes de, respectivamente, o comprimento, altura, e bpp(bytes per pixel) da tela. Usarmos um BPP com 32 significa que além dos valores de vermelho, verde e azul(RGB), também temos o valor da claridade(alpha) de cada pixel.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>8
9
10
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Superficies utilizadas</span>
SDL_Surface <span style="color: #000040;">*</span>tux <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
SDL_Surface <span style="color: #000040;">*</span>tela <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aqui setamos dois ponteiros para os <em>SDL_Surface</em> que iremos utilizar. <em>SDL_Surface</em> é uma estrutura que representa uma área onde nós poderemos desenhar. Imagine-a como um pedaço de papel em branco, até agora.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Feito por Lazy Foo</span>
SDL_Surface <span style="color: #000040;">*</span>load_image<span style="color: #008000;">&#40;</span> string filename <span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">//Variável temporária para a imagem que será carregada</span>
	SDL_Surface<span style="color: #000040;">*</span> loadedImage <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//Imagem otimizada para o BPP da tela</span>
	SDL_Surface<span style="color: #000040;">*</span> optimizedImage <span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Esta é a nossa função para carregar uma imagem.<br />
Ela recebe o caminho para a imagem e retorna um ponteiro para um <em>SDL_Surface</em> contendo uma versão otimizada da imagem.<br />
A variável <em>loadedImage</em> é aonde nós iremos carregar temporariamente a imagem que está em <em>filename</em>. <em>optimizedImage</em> é a versão otimizada da imagem.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>20
21
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Carrega a imagem</span>
	loadedImage <span style="color: #000080;">=</span> SDL_LoadBMP<span style="color: #008000;">&#40;</span> filename.<span style="color: #007788;">c_str</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aqui nós carregamos a imagem para <em>loadedImage</em>.<br />
Nós não devemos utilizá-la agora pois ela tem 24 bits, e nossa tela tem 32 bits. Devemos evitar <em>blitar</em>(é como "colar" uma superfície em cima da outra) uma superfície em outra que tenha um BPP diferente, pois a SDL terá que convertê-la antes disso, o que irá tornar o jogo mais lento.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Se não houveram problemas carregando a imagem</span>
	<span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> loadedImage <span style="color: #000040;">!</span><span style="color: #000080;">=</span> <span style="color: #0000ff;">NULL</span> <span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		<span style="color: #666666;">//Cria uma imagem otimizada</span>
		optimizedImage <span style="color: #000080;">=</span> SDL_DisplayFormat<span style="color: #008000;">&#40;</span> loadedImage <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
		<span style="color: #666666;">//Libera a imagem antiga</span>
		SDL_FreeSurface<span style="color: #008000;">&#40;</span> loadedImage <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Primeiro checamos se ele carregou sem erros a imagem. Se sim, criamos uma versão otimizada da mesma. A função <em>SDL_DisplayFormat()</em> recebe como parâmetro um <em>SDL_Surface*</em> e retorna outro <em>SDL_Surface*</em> com o mesmo BPP da tela.<br />
Depois de termos a imagem otimizada, não precisamos mais da <em>loadedImage</em>, então a liberamos através da <em>SDL_FreeSurface()</em>.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>31
32
33
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Retorna a imagem otimizada</span>
	<span style="color: #0000ff;">return</span> optimizedImage<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Retornamos a versão otimizada da imagem.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>34
35
36
37
38
39
40
41
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Feito por Lazy Foo</span>
<span style="color: #0000ff;">void</span> apply_surface<span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">int</span> x, <span style="color: #0000ff;">int</span> y, SDL_Surface<span style="color: #000040;">*</span> source, SDL_Surface<span style="color: #000040;">*</span> destination <span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">//Cria um SDL_Rect temporário para guardar as coordenadas para onde blitar a imagem</span>
	SDL_Rect offset<span style="color: #008080;">;</span>
	<span style="color: #666666;">//Salva as coordenadas no SDL_Rect</span>
	offset.<span style="color: #007788;">x</span> <span style="color: #000080;">=</span> x<span style="color: #008080;">;</span>
	offset.<span style="color: #007788;">y</span> <span style="color: #000080;">=</span> y<span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Esta é nossa função para <em>blitar</em> superfícies.<br />
Ela recebe as coordenadas da onde você quer <em>blitar</em> a superfície, qual a superfície que você quer <em>blitar</em>, e em qual superfície você quer <em>blitá-la</em>.<br />
Para isso, primeiro nós colocamos as coordenadas em um <em>SDL_Rect</em>, que é uma estrutura bem simples, com somente quatro elementos: as coordenadas <em>x</em> e <em>y</em>, o comprimento(<em>w</em>) e a altura(<em>h</em>). Fazemos isso pois o método que iremos utilizar, <em>SDL_BlitSurface()</em> só aceita as coordenadas dentro de um <em>SDL_Rect</em>.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>42
43
44
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Blita a superfície</span>
	SDL_BlitSurface<span style="color: #008000;">&#40;</span> source, <span style="color: #0000ff;">NULL</span>, destination, <span style="color: #000040;">&amp;</span>offset <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aqui nos blitamos a superfície com a função <em>SDL_BlitSurface()</em>.<br />
Ela recebe quatro parâmetros: a superfície que você quer <em>blitar</em>; a parte da superfície que você quer <em>blitar</em>(bom para sprites, mas, como queremos que ele envie a imagem inteira, usamos NULL); a superfície onde você quer <em>blitar</em>; o endereço do <em>SDL_Rect</em> com as coordenadas da onde <em>blitar</em>.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>45
46
47
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Início do main</span>
<span style="color: #0000ff;">int</span> main <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> args<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span></pre></td></tr></table></div>

<p>Finalmente iniciamos a main. Quando usar a SDL você tem que ter cuidado para só usar a main assim como usamos ou</p>
<blockquote><p>int main (int argc, char** args)</p></blockquote>
<p>Qualquer outro jeito não irá funcionar.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>48
49
50
51
52
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">// Inicializamos a SDL e todos seus subsistemas</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>SDL_Init<span style="color: #008000;">&#40;</span>SDL_INIT_EVERYTHING<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aqui inicializamos a SDL pela função <em>SDL_Init()</em>. Passamos <em>SDL_INIT_EVERYTHING</em> para ele iniciar todos os subsistemas, como audio, vídeo, timers, etc..<br />
Caso ela não consiga inicializar, a função irá retornar -1, e nós sairemos do programa com o código de erro 1.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>53
54
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Inicializa a tela</span>
	tela <span style="color: #000080;">=</span> SDL_SetVideoMode<span style="color: #008000;">&#40;</span> SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>A função <em>SDL_SetVideoMode()</em> cria nossa tela com o tamanho, altura, bpp especificados. O último parâmetro são as <em>flags</em> da tela. Como, por exemplo, se usaremos OpenGL, a memória da placa-de-vídeo, etc. Aqui nós criamos a tela na memória do sistema.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>55
56
57
58
59
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Se houve algum erro na inicialização da tela</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>tela <span style="color: #000080;">==</span> <span style="color: #0000ff;">NULL</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Caso a SDL não tenha conseguido inicializar a tela, paramos a execução com o código de erro 1.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>60
61
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Muda o nome da janela</span>
	SDL_WM_SetCaption<span style="color: #008000;">&#40;</span> <span style="color: #FF0000;">&quot;Hello World&quot;</span>, <span style="color: #0000ff;">NULL</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Mudamos o nome da janela para <em>Hello World</em>. O segundo parâmetro da função é para o nome do ícone, que não usaremos.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>62
63
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Pinta a tela de branco</span>
	SDL_FillRect<span style="color: #008000;">&#40;</span>tela, <span style="color: #0000ff;">NULL</span>, <span style="color: #208080;">0xFFFFFFFF</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Usamos a função <em>SDL_FillRect()</em> para pintar a tela de branco. Esta função recebe como parâmetros a superfície que você quer pintar, um <em>SDL_Rect*</em>, caso você queira pintar só uma parte da superfície, e a cor, em RGBA, para pintar.</pre>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>64
65
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Carrega a imagem</span>
	tux <span style="color: #000080;">=</span> load_image<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;tux.bmp&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Carregamos a imagem do tux usando a função <em>load_image()</em> do <a href="http://lazyfoo.net/SDL_tutorials/" target="_blank">Lazy Foo</a>.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>66
67
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Aplicamos o Tux à tela</span>
	apply_surface<span style="color: #008000;">&#40;</span> <span style="color: #0000dd;">180</span>, <span style="color: #0000dd;">140</span>, tux, tela <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aplicamos, ou <em>blitamos</em>, o tux a tela usando a função <em>apply_surface()</em> do <a href="http://lazyfoo.net/SDL_tutorials/" target="_blank">Lazy Foo</a>.<br />
Lembre-se que na SDL, como na maioria dos lugares em computação, a coordenada y é diferente da matemática. Ela cresce de cima para baixo, ao invés de ser de baixo pra cima.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>68
69
70
71
72
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Atualiza a tela</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>SDL_Flip<span style="color: #008000;">&#40;</span>tela<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Até agora nós só estavamos escrevendo no <em>buffer</em>. As imagens só são mostradas quando chamamos o método <em>SDL_Flip()</em> com a superfície que queremos atualizar. Esta função retorna -1 em caso de erro. Nós testamos isso e, caso positivo, paramos a execução do programa com o código de erro 1.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>73
74
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Para a execução por 5 segundos</span>
	SDL_Delay<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">5000</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Nós chamamos a função <em>SDL_Delay()</em> para que consigamos ver alguma coisa, caso contrário o programa iria abrir e fechar tão rápido que não veríamos nada. Ele recebe como parâmetro o tempo em milissegundos(um segundo tem 1000 milissegundos) que queremos pausar a execução.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>75
76
77
78
79
80
81
82
83
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">	<span style="color: #666666;">//Libera a superfície</span>
	SDL_FreeSurface<span style="color: #008000;">&#40;</span>tux<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//Destrói a SDL</span>
	SDL_Quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">//Termina a execução</span>
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aqui nós limpamos o que usamos durante a execução do programa. Com a função <em>SDL_FreeSurface()</em> nós liberamos a memória das superfícies que usamos. Não precisamos liberar a <em>tela</em>, pois o <em>SDL_Quit()</em> cuida disso.</p>
<blockquote><p>Baixe os fontes e a imagem deste tutorial <a href='http://vitorbaptista.com/wp-content/uploads/2007/06/sdlhelloworld.zip' title='SDL Hello World'>aqui</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/hello-world-na-sdl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configurando a SDL &#8211; Windows</title>
		<link>http://vitorbaptista.com/configurando-a-sdl-windows/</link>
		<comments>http://vitorbaptista.com/configurando-a-sdl-windows/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 22:32:17 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/06/13/sdl-windows-devcpp-devc-c-jogos/</guid>
		<description><![CDATA[Para configurar a SDL para o Dev-C++ da Bloodshed no Windows, temos duas opções. Podemos ou baixar a LibSDL direto do site dela, onde podemos encontrar os últimos pacotes, ou baixar um arquivo .DevPak, que é um pacote para o Dev-C++ que facilita a instalação de bibliotecas. Vamos ver os dois métodos. Baixando a LibSDL [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://vitorbaptista.com/wp-content/uploads/2007/06/devcpp.png" alt="Dev-C++" id="image14" /><br />
Para configurar a SDL para o <a href="http://www.bloodshed.net/devcpp.html" title="Dev C++" target="_blank">Dev-C++</a> da <a href="http://www.bloodshed.net/" title="Bloodshed" target="_blank">Bloodshed</a> no Windows, temos duas opções. Podemos ou baixar a LibSDL direto do site dela, onde podemos encontrar os últimos pacotes, ou baixar um arquivo .DevPak, que é um pacote para o Dev-C++ que facilita a instalação de bibliotecas. Vamos ver os dois métodos.</p>
<ul>
<li>Baixando a LibSDL do <a href="http://www.libsdl.org/download-1.2.php" title="SDL Download" target="_blank">site oficial</a>.</li>
</ul>
<ol>
<li>
<ol>
<li>Baixe o pacote para <em>Mingw32</em>, em <em>Development Libraries</em>;</li>
<li>Descompacte o conteúdo da pasta <em>lib</em> para o subdiretório <em>lib</em> do Dev-C++(Por padrão ele fica em <em>C:/Dev-Cpp/lib</em>);</li>
<li>Faça o mesmo com a pasta <em>bin</em>, descompactando-a em <em>C:/Dev-Cpp/bin</em>;</li>
<li>Abra a pasta <em>include</em> no pacote e descompacte a pasta <em>SDL</em> para <em>C:/Dev-Cpp/include/SDL</em>;</li>
<li>Copie o <em>SDL.dll</em>, que está na pasta <em>bin</em>, para <em>C:/Windows/System32</em>;</li>
<li>Abra o Dev-C++ e crie um novo <em>Empty Project</em> indo em <em>File</em>/<em>New</em>/<em>Project</em>/<em>Empty Project</em>;</li>
<li>Vá nas opções do projeto em <em>Project</em>/<em>Project Options</em>;</li>
<li>Escolha o <em>Type</em> para <em>Win32 GUI</em>;</li>
<li>Na mesma tela, abra a aba <em>Parameters</em> e escreva no <em>Linker</em>:<br />
<blockquote><p>-lmingw32 -lSDLmain -lSDL</p></blockquote>
</li>
</ol>
</li>
</ol>
<ul>
<li>Usando o <em>.DevPak</em></li>
</ul>
<ol>
<li>
<ol>
<li>Baixe a <em>Development Package</em> da SDL <a href="http://www.bloodshed.net/dev/packages/sdl.html" title="SDL Dev-C++ Package" target="_blank">aqui</a>;</li>
<li>Vá em <em>Tools</em>/<em>Package Manager</em>;</li>
<li>Clique em <em>Install</em>;</li>
<li>Uma tela irá aparecer para você mostrar aonde está o <em>.DevPak</em>;</li>
<li>No <em>Installation Wizard</em>, vá clicando em <em>Next</em> até ele instalar o pacote;</li>
<li>Depois de instalado, crie um novo <em>Empty Project</em> indo em <em>File</em>/<em>New</em>/<em>Project</em>/<em>Empty Project</em>;</li>
<li>Deve haver uma nova aba <em>SDL</em>, crie um projeto deste tipo.</li>
</ol>
</li>
</ol>
<p>Agora você já deve ter o Dev-C++ configurado para compilar usando a SDL. Para testar, adicione um novo arquivo ao projeto, indo em <em>File</em>/<em>New</em>/<em>Source File</em> e clicando em <em>Yes</em> na caixa de diálogo que irá aparecer, copie e tente compilar o seguinte código nele:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// Inclui o header da SDL</span>
<span style="color: #339900;">#include &quot;SDL/SDL.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> args<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">// Inicia todos os subsistemas da SDL</span>
	SDL_Init<span style="color: #008000;">&#40;</span>SDL_INIT_EVERYTHING<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Destrói a SDL</span>
	SDL_Quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Como esperado, ele deve abrir uma janela e, instantâneamente, fechá-la. Se ocorreu tudo bem, ótimo! Aguarde o próximo artigo. Se não, tente refazer os passos para ver se você não esqueceu de nada. Se, mesmo assim, não conseguir, dê uma lida no <a href="http://www.libsdl.org/faq.php?action=listentries&amp;category=4" target="_blank" title="FAQ SDL Windows">FAQ oficial para o Windows</a> ou envie um comentário aqui que eu tentarei ajudar.</p>
<p>No próximo artigo iremos fazer nosso &#8220;Hello, World!&#8221;. Até lá!</p>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/configurando-a-sdl-windows/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configurando a SDL &#8211; Linux</title>
		<link>http://vitorbaptista.com/configurando-a-sdl-linux/</link>
		<comments>http://vitorbaptista.com/configurando-a-sdl-linux/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 06:06:23 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/06/13/sdl-configuracao-linux-libsdl-anjuta/</guid>
		<description><![CDATA[Para configurar a SDL no Linux vamos primeiro baixar a LibSDL. A maioria das distribuições incluem a libsdl nos seus repositórios. No caso do Gentoo basta usar, como root: emerge libsdl Já no Ubuntu, usamos: apt-get install libsdl1.2-dev Para o Fedora e o Debian há um link na página de downloads da SDL. Baixe as [...]]]></description>
			<content:encoded><![CDATA[<p>Para configurar a SDL no Linux vamos primeiro baixar a LibSDL. A maioria das distribuições incluem a libsdl nos seus repositórios. No caso do Gentoo basta usar, como root:</p>
<blockquote><p>emerge libsdl</p></blockquote>
<p>Já no Ubuntu, usamos:</p>
<blockquote><p>apt-get install libsdl1.2-dev</p></blockquote>
<p>Para o Fedora e o Debian há um link na <a target="_blank" title="Download SDL" href="http://www.libsdl.org/download-1.2.php">página de downloads da SDL</a>. Baixe as <em>Development Libraries</em>.</p>
<p>Caso você não consiga encontrar um pacote nos repositórios da sua distribução, terá de baixar e compilar os fontes. Infelizmente, nesta tarefa não poderei ajudar, mas não deve ser muito complicado.</p>
<p>Iremos agora ver como compilar pelo <a target="_blank" title="Anjuta" href="http://anjuta.sourceforge.net">Anjuta</a> e no shell.</p>
<p align="center"><img title="Anjuta Logo" alt="Anjuta Logo" id="image9" src="http://vitorbaptista.com/wp-content/uploads/2007/06/anjuta.png" /><br />
<strong> Anjuta</strong></p>
<ol>
<li>Abra o Anjuta e crie um novo projeto indo em <em>File</em>/<em>New Project</em>;</li>
<li>No wizard, escolha <em>Generic/Terminal Project</em>;</li>
<li>Nesta tela só precisamos nos preocupar na opção <em>Programming Language</em>, que deve estar em <em>C++</em>;</li>
<li>Quando o wizard terminar de configurar o nosso projeto, vá em <em>Settings</em>/<em>Compiler and Linker Settings</em>;</li>
<li>Na orelha <em>Libraries</em>, escreva <em>SDL</em> no campo de texto e clique em <em>Add</em>. Feche esta janela;</li>
<li>Irá aparecer uma caixa de diálogo, clique em <em>Yes</em>.</li>
</ol>
<p>Pronto, seu Anjuta está configurado corretamente. Siga até o final deste artigo e tente compilar o programa-teste para checar se está tudo certo.</p>
<p align="center"><img title="Shell" id="image10" alt="Shell" src="http://vitorbaptista.com/wp-content/uploads/2007/06/screenshot-20070613015228.png" /><br />
<strong> Shell</strong></p>
<ol>
<li>Compile usando<br />
<blockquote><p>g++ -o programa programa.cpp -lSDL</p></blockquote>
</li>
</ol>
<p>Para testar se a configuração está funcionando, tente compilar o seguinte programa:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// Inclui o header da SDL</span>
<span style="color: #339900;">#include &quot;SDL/SDL.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> args<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	<span style="color: #666666;">// Inicia todos os subsistemas da SDL</span>
	SDL_Init<span style="color: #008000;">&#40;</span>SDL_INIT_EVERYTHING<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #666666;">// Destrói a SDL</span>
	SDL_Quit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Ele deve compilar sem erros, abrir uma tela e, quase que instantâneamente, fechá-la. Se tudo ocorreu como o esperado, ótimo! Se não, volte e refaça todos os passos, cheque se a SDL está instalada no diretório padrão e, se mesmo assim não funcionar, procure seu problema no <a target="_blank" title="FAQ Linux" href="http://www.libsdl.org/faq.php?action=listentries&#038;category=3">FAQ oficial para o Linux</a> ou escreva um comentário aqui que tentarei ajudar.</p>
<p>No próximo artigo irei explicar como configurar a SDL no Windows. Até mais.</p>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/configurando-a-sdl-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O que é a SDL?</title>
		<link>http://vitorbaptista.com/o-que-e-a-sdl/</link>
		<comments>http://vitorbaptista.com/o-que-e-a-sdl/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 20:14:09 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[SDL]]></category>

		<guid isPermaLink="false">http://blog.vitorbaptista.com/2007/06/12/sdl-c-jogos-games-programacao/</guid>
		<description><![CDATA[Simple DirectMedia Layer � uma biblioteca multiplataforma feita para prover acesso de baixo n�vel ao audio, teclado, mouse, joystick, acelera��o 3D por hardware(via OpenGL), e framebuffer de v�deo 2D. Ele � usado por reprodutores de MPEG, emuladores, e v�rios jogos populares, incluindo o premiado port para Linux do "Civilization: Call To Power".]]></description>
			<content:encoded><![CDATA[<blockquote>
<div style="text-align: center"><img align="middle" title="SDL Simple DirectMedia Layer" alt="SDL Simple DirectMedia Layer" src="http://blog.vitorbaptista.com/wp-content/uploads/2007/06/sdl_logo.png" /></div>
<p>Simple DirectMedia Layer é uma biblioteca multiplataforma feita para prover acesso de baixo nível ao áudio, teclado, mouse, joystick, aceleração 3D por hardware(via OpenGL), e framebuffer de vídeo 2D. Ele é usado por reprodutores de MPEG, emuladores, e vários jogos populares, incluindo o premiado port para Linux do &#8220;Civilization: Call To Power&#8221;.</p>
<p>A SDL suporta Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, e QNX. O código contêm suporte para AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, e OS/2, mas estes não são suportados oficialmente.</p>
<p>Ela é escrita em C, mas funciona nativamente com C++, e tem bindings para diversas 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.</p>
<p>A biblioteca é distribuida sob a GNU LGPL versão 2. Esta licensa permite que você use a SDL livremente em jogos comerciais, contanto que você ligue dinâmicamente com a biblioteca.</p></blockquote>
<p>Como você pôde notar pela descrição acima, traduzida diretamente do <a target="_blank" href="http://www.libsdl.org">site oficial da SDL</a>, ela é uma biblioteca extremamente poderosa. Não acredita? <a target="_blank" href="http://www.wesnoth.org/">Pois</a> <a target="_blank" href="http://www.bzflag.org/">é</a> <a target="_blank" href="http://www.lokigames.com/products/civctp/">a</a> <a target="_blank" href="http://www.daimonin.net/">mais</a> <a target="_blank" href="http://crimson.seul.org/">pura</a> <a target="_blank" href="http://www.frozen-bubble.org/">verdade</a>!</p>
<p>Este é o primeiro post de uma série de artigos onde pretendo ensinar como programar usando a SDL e C++. Ao final teremos feito, a partir do zero, um clone do Pong.</p>
<p>No próximo artigo irei mostrar como configurar sua IDE para usar a SDL. Até mais.</p>
]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/o-que-e-a-sdl/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

