<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>UnderCode &#187; sons</title>
	<atom:link href="http://undercode.wordpress.com/tag/sons/feed/" rel="self" type="application/rss+xml" />
	<link>http://undercode.wordpress.com</link>
	<description>Novo blog em http://www.mottaweb.com.br/</description>
	<lastBuildDate>Tue, 10 Nov 2009 15:32:01 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='undercode.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ad0de3a3817ed8afaf3e35be561c7d83?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>UnderCode &#187; sons</title>
		<link>http://undercode.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://undercode.wordpress.com/osd.xml" title="UnderCode" />
		<item>
		<title>Criando jogos em Delphi &#8211; Parte III</title>
		<link>http://undercode.wordpress.com/2008/07/17/criando-jogos-em-delphi-parte-iii/</link>
		<comments>http://undercode.wordpress.com/2008/07/17/criando-jogos-em-delphi-parte-iii/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 18:44:39 +0000</pubDate>
		<dc:creator>KillDream</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[desenvolvimento de jogos]]></category>
		<category><![CDATA[media player]]></category>
		<category><![CDATA[mmsystem]]></category>
		<category><![CDATA[sons]]></category>

		<guid isPermaLink="false">http://undercode.wordpress.com/?p=22</guid>
		<description><![CDATA[- Sons -
&#160;&#160;&#160; Mais um tutorial sobre desenvolvimento de jogos em Delphi. Desta vez vou explicar algumas técnicas para utilizar sons em seus jogos, e como até aqui não usamos nenhuma biblioteca externa para o que já foi feito, vamos manter isto e usar apenas os recursos internos do Delphi para reproduzir os sons.
&#160;&#160;&#160; Sons [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=undercode.wordpress.com&blog=3870490&post=22&subd=undercode&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><b>- Sons -</b></p>
<p>&nbsp;&nbsp;&nbsp; Mais um tutorial sobre desenvolvimento de jogos em Delphi. Desta vez vou explicar algumas técnicas para utilizar sons em seus jogos, e como até aqui não usamos nenhuma biblioteca externa para o que já foi feito, vamos manter isto e usar apenas os recursos internos do Delphi para reproduzir os sons.</p>
<p>&nbsp;&nbsp;&nbsp; Sons no formato <b>wave</b> (.wav) são o padrão suportado pelo windows e podemos tirar proveito disso e utilizar as APIs do windows para reproduzi-los. Além do formato <b>wave</b>, nós podemos reproduzir qualquer outro formato de som ou vídeo (desde que os codecs para estes estejam instalados no computador) com o objeto <b>TMediaPlayer</b>.</p>
<p><b>- Efeitos Sonoros -</b></p>
<p>&nbsp;&nbsp;&nbsp; A unit <b>MMSystem</b>, incluída no Delphi, oferece vários métodos para reproduzir diversos tipos de sons. Vamos usar aqui o método <b>SndPlaySound</b> para reproduzir um arquivo <b>wave</b> no computador.</p>
<p><a href="http://mottaweb.com.br/files/delphi/sound.zip">&raquo; Faça o download dos arquivos de som aqui</a></p>
<p>&nbsp;&nbsp;&nbsp; Vamos tocar um som quando a bolinha bater em uma das barrinhas, outro som quando a bolinha colidir com o cenário, e um som para quando um dos jogadores fizer um ponto. Primeiro vamos escrever uma pequena função para tocar os sons (não se esqueça de adicionar a <b>mmsystem</b> na seção <b>uses</b>).</p>
<p><code><b><font color="#000080">procedure</b></font>&nbsp;TocaWave(som:&nbsp;<b><font color="#000080">string</b></font>);<br />
<b><font color="#000080">begin</b></font><br />
&nbsp;&nbsp;SndPlaySound(PChar(som),&nbsp;SND_ASYNC);<br />
<b><font color="#000080">end</b></font>;</code></p>
<p>&nbsp;&nbsp;&nbsp; A flag<b> </b><i>SND_ASYNC</i> serve para tocar o som, mas sem interromper a execução do programa, como um <b>thread</b>. Note que nós temos que converter o nome do arquivo para PChar, já que este é o tipo de dados que a função recebe.</p>
<p>&nbsp;&nbsp;&nbsp; Adicione agora algumas chamadas à nossa função <b>TocaWave</b> no código do programa para tocar os sons. No meu caso eu coloquei chamadas à função nas colisões da bolinha e quando um dos jogadores faz um ponto.</p>
<p><b>- Músicas de fundo -</b></p>
<p>&nbsp;&nbsp;&nbsp; Como eu disse anteriormente o Delphi traz um componente muito bom para reproduzir diversos arquivos de mídia (inclusive vídeos!) utilizando os codecs instalados no computador (o problema disto é que para reproduzir os arquivos o computador deve ter instalado os codecs utilizados). Vamos utilizar um som de fundo no formato <b>midi</b>.</p>
<p>&nbsp;&nbsp;&nbsp; Adicione um novo componente <b>TMediaPlayer </b>ao formulário. Mude a propriedade <b>visible</b> dele para false, assim ele não irá aparecer na tela do jogo.</p>
<p>&nbsp;&nbsp;&nbsp; Quando o jogo se inicia, precisamos carregar a música e tocá-la. Vamos fazer isso no evento <b>OnCreate</b> do formulário, antes de setar a propriedade Enabled do Timer para true.</p>
<p><code>&nbsp;&nbsp;MediaPlayer1.FileName:=&nbsp;<font color="#0000FF">'theme.mid'</font>;<br />
&nbsp;&nbsp;MediaPlayer1.Open;<br />
&nbsp;&nbsp;MediaPlayer1.Play;</code></p>
<p>&nbsp;&nbsp;&nbsp; Note que o programa pára a execução e carrega todo o arquivo (acho que isso só acontece com os arquivos midi, então você pode usar threads ou outro formato de arquivo).</p>
<p>&nbsp;&nbsp;&nbsp; Agora temos uma música de fundo tocando no nosso jogo. Mas por se tratar de uma música de fundo seria bom que ela reproduzisse continuamente. Vamos então fazer um pequeno loop na nossa música, isso é feito verificando se a música está tocando, se não estiver, voltamos a reproduzi-la.</p>
<p>&nbsp;&nbsp;&nbsp; Para esse teste vamos incluir mais um <b>TTimer</b> no formulário. Deixe a propriedade <b>Interval</b> dele em 1 e mude a propriedade <b>Enabled</b> para false. Vamos iniciar esse timer depois de carregar a música. Então o código <b>OnCreate</b> do form ficaria assim:</p>
<p><code><b><font color="#000080">procedure</b></font>&nbsp;TForm1.FormCreate(Sender:&nbsp;TObject);<br />
<b><font color="#000080">begin</b></font><br />
&nbsp;&nbsp;<font color="#008000"><i>//quando&nbsp;o&nbsp;form&nbsp;for&nbsp;criado&nbsp;carregamos&nbsp;as&nbsp;imagens</font></i><br />
&nbsp;&nbsp;LoadGameGraphics;<br />
&nbsp;&nbsp;<font color="#008000"><i>//cria&nbsp;e&nbsp;inicializa&nbsp;o&nbsp;backbuffer</font></i><br />
&nbsp;&nbsp;bbuffer:=&nbsp;TBitmap.Create;<br />
&nbsp;&nbsp;bbuffer.Width:=&nbsp;<font color="#0000FF">640</font>;<br />
&nbsp;&nbsp;bbuffer.Height:=&nbsp;<font color="#0000FF">480</font>;<br />
&nbsp;&nbsp;bbuffer.Canvas.Brush.Color:=&nbsp;clBlack;<br />
&nbsp;&nbsp;<font color="#008000"><i>//inicializa&nbsp;algumas&nbsp;variáveis&nbsp;da&nbsp;bolinha</font></i><br />
&nbsp;&nbsp;Ball.W:=&nbsp;<font color="#0000FF">15</font>;<br />
&nbsp;&nbsp;Ball.H:=&nbsp;<font color="#0000FF">15</font>;<br />
&nbsp;&nbsp;<font color="#008000"><i>//inicializa&nbsp;algumas&nbsp;variáveis&nbsp;da&nbsp;barrinha&nbsp;do&nbsp;jogador</font></i><br />
&nbsp;&nbsp;Bar_p1.W:=&nbsp;<font color="#0000FF">10</font>;<br />
&nbsp;&nbsp;Bar_p1.H:=&nbsp;<font color="#0000FF">80</font>;<br />
&nbsp;&nbsp;<font color="#008000"><i>//inicializa&nbsp;algumas&nbsp;variáveis&nbsp;da&nbsp;barrinha&nbsp;da&nbsp;AI</font></i><br />
&nbsp;&nbsp;Bar_cp.W:=&nbsp;<font color="#0000FF">10</font>;<br />
&nbsp;&nbsp;Bar_cp.H:=&nbsp;<font color="#0000FF">80</font>;<br />
&nbsp;&nbsp;Bar_cp.Speed:=&nbsp;<font color="#0000FF">15</font>;<br />
&nbsp;&nbsp;<font color="#008000"><i>//inicia&nbsp;o&nbsp;jogo</font></i><br />
&nbsp;&nbsp;InitGame;<br />
&nbsp;&nbsp;<font color="#008000"><i>//inicia&nbsp;o&nbsp;som&nbsp;de&nbsp;fundo</font></i><br />
&nbsp;&nbsp;MediaPlayer1.FileName:=&nbsp;<font color="#0000FF">'theme.mid'</font>;<br />
&nbsp;&nbsp;MediaPlayer1.Open;<br />
&nbsp;&nbsp;MediaPlayer1.Play;<br />
&nbsp;&nbsp;<font color="#008000"><i>//habilita&nbsp;o&nbsp;timer&nbsp;do&nbsp;jogo</font></i><br />
&nbsp;&nbsp;Timer1.Enabled:=&nbsp;true;<br />
&nbsp;&nbsp;<font color="#008000"><i>//habilita&nbsp;o&nbsp;timer&nbsp;de&nbsp;controle&nbsp;da&nbsp;música</font></i><br />
&nbsp;&nbsp;Timer2.Enabled:=&nbsp;true;<br />
<b><font color="#000080">end</b></font>;</code></p>
<p>Agora vamos fazer o loop na música. No evento <b>OnTimer</b> vamos testar se a música parou de tocar e voltar a tocá-la.</p>
<p><code><b><font color="#000080">procedure</b></font>&nbsp;TForm1.Timer2Timer(Sender:&nbsp;TObject);<br />
<b><font color="#000080">begin</b></font><br />
&nbsp;&nbsp;<font color="#008000"><i>//se&nbsp;não&nbsp;estiver&nbsp;tocando&nbsp;uma&nbsp;música...</font></i><br />
&nbsp;&nbsp;<b><font color="#000080">if</b></font>&nbsp;MediaPlayer1.Mode&nbsp;=&nbsp;mpStopped&nbsp;<b><font color="#000080">then</b></font><br />
&nbsp;&nbsp;&nbsp;&nbsp;MediaPlayer1.Play;<br />
<b><font color="#000080">end</b></font>;</code></p>
<p>&nbsp;&nbsp;&nbsp; A propriedade <b>mode</b> do MediaPlayer indica o estado atual da música (se ainda não carregou, se está tocando, pausado, parado, etc.). É bom dar uma olhadinha nas outras propriedades do MediaPlayer, tem muita coisa interessante lá.</p>
<p><a href="http://mottaweb.com.br/files/delphi/delphi_parte_3.zip">&raquo; Baixe aqui o código fonte completo</a></p>
<p>&nbsp;&nbsp;&nbsp; No próximo tutorial vou explicar um pouco sobre animações e sobre como usar o objeto MediaPlayer para reproduzir vídeos. Até lá.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/undercode.wordpress.com/22/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/undercode.wordpress.com/22/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/undercode.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/undercode.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/undercode.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/undercode.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/undercode.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/undercode.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/undercode.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/undercode.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/undercode.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/undercode.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=undercode.wordpress.com&blog=3870490&post=22&subd=undercode&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://undercode.wordpress.com/2008/07/17/criando-jogos-em-delphi-parte-iii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f9c280863bd9c210358b04e6e98d82fb?s=96&#38;d=wavatar" medium="image">
			<media:title type="html">.killdream</media:title>
		</media:content>
	</item>
	</channel>
</rss>