﻿<?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>Grupo de Desenvolvimento de Jogos</title>
	<atom:link href="http://gdjogos.com.br/tutoriais/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://gdjogos.com.br/tutoriais</link>
	<description>Tutoriais para desenvolvimento de jogos para internet</description>
	<lastBuildDate>Mon, 30 Apr 2012 21:43:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>1 &#8211; Stencyl: deslocando um ator</title>
		<link>http://gdjogos.com.br/tutoriais/?p=310</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=310#comments</comments>
		<pubDate>Mon, 30 Apr 2012 21:14:49 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=310</guid>
		<description><![CDATA[Esse guia considera que você possui alguma familiaridade com a Stencyl, pelo menos tendo feito o tutorial de 30 minutos disponível na própria ferramenta. O objetivo é focar na criação de códigos para a Stencyl. Sendo assim, mesmo que já existam behaviors prontos que façam alguma das funcionalidades, estas funcionalidades serão codificadas mesmo assim. Programação [...]]]></description>
			<content:encoded><![CDATA[<p>Esse guia considera que você possui alguma familiaridade com a Stencyl, pelo menos tendo feito o tutorial de 30 minutos disponível na própria ferramenta. O objetivo é focar na criação de códigos para a Stencyl. Sendo assim, mesmo que já existam <strong><em>behaviors</em></strong> prontos que façam alguma das funcionalidades, estas funcionalidades serão codificadas mesmo assim.</p>
<p style="text-align: center;"><a href="http://gdjogos.com.br/tutoriais/wp-content/uploads/2012/04/Programação-com-StencylWorks-deslocamento-horizontal.pdf">Programação com StencylWorks - deslocamento horizontal</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=310</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvendo jogos em HTML5 para o iOS</title>
		<link>http://gdjogos.com.br/tutoriais/?p=267</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=267#comments</comments>
		<pubDate>Wed, 13 Jul 2011 12:54:49 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Iphone/Ipad]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=267</guid>
		<description><![CDATA[Ok, HTML5 não é Flash, mesmo assim achei interessante abordar o tema. Ainda é mais fácil desenvolver os jogos em Flash, mas HTML5 vem crescido e está se destacando. Um recurso que acho muito interessante é a possibilidade dos jogos desenvolvidos serem adicionados ao iOS e parecerem ser um aplicativo nativo. Sendo assim, não preciso abrir [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, HTML5 não é Flash, mesmo assim achei interessante abordar o tema. Ainda é mais fácil desenvolver os jogos em Flash, mas HTML5 vem crescido e está se destacando.</p>
<p>Um recurso que acho muito interessante é a possibilidade dos jogos desenvolvidos serem adicionados ao iOS e parecerem ser um aplicativo nativo. Sendo assim, não preciso abrir o navegador de internet para acessar o jogo, basta selecionar ele entre os outros aplicativos instalados. E não é apenas um link para a página e este link abre o navegador, fica parecendo um aplicativo instalado mesmo.</p>
<p>Diversos jogos são estão sendo desenvolvidos em HTML5 e alguns já voltados ao iOS. O site <a href="http://html5games.com" target="_blank">HTML5games </a>é um agregador onde podem ser encontrados diversos jogos desenvolvidos.</p>
<p>Então vejamos o básico para desenvolver um jogo em HTML5 para o iPhone.</p>
<p><span id="more-267"></span></p>
<p><strong>Preparação inicial</strong></p>
<p>Primeiramente precisamos de um ícone, que será utilizado para representar o jogo no dashboard. O <strong>ícone</strong> deve ter <strong>57x57</strong> pixel e formato <strong>PNG ou JPG</strong>. Lembrando que os cantos do ícone serão arredondados automaticamente pelo iOS.</p>
<p>É recomendável também ter uma imagem de <strong>tela de inicialização</strong> (startup screen) que deve ter <strong>320x460 </strong>pixel, nos formatos <strong>PNG ou JPG</strong>.</p>
<p>Um detalhe sobre a resolução é que somente depois de adiciona no dashboard é que ela terá a resolução de 320x460. Acessando o jogo no navegador, o tamanho da tela será de 320x356 pixel.</p>
<p>No navegador (pelo menos no Safari) são esperados sites com 980 pixel de largura, por isso é importante definir parametros de viewport. Isso é feito adicionando uma tag &lt;meta&gt; no cabeçalho (entre as tags &lt;head&gt; e &lt;/head&gt;). Adicione:</p>
<pre class="brush:xml">&lt;meta name="viewport" content="user-scalable=no, width=device-width" /&gt;</pre>
<p>Além de definição do viewport, adicione também a tag abaixo, que colocará a página em full screen sem mostrar a barra de endereço (em cima) e de ferramentas (embaixo):</p>
<pre class="brush:xml">&lt;meta name="apple-mobile-web-app-capable" content="yes" /&gt;</pre>
<p><strong>Cache do aplicativo</strong></p>
<p>O recurso de cache permite o uso das aplicações mesmo sem conexão com a internet. Para saber mais sobre esse novo padrão, acesse a especificação na W3C (<a href="http://dev.w3.org/html5/spec/offline.html" target="_blank">http://dev.w3.org/html5/spec/offline.html</a>).</p>
<p>Para fazer a cache dos arquivos, devemos especificar quais arquivos devem ser armazenados, criando um arquivo "manifest". As imagens pode ser especificadas por seu caminho absoluto ou relativo e também podem ser informado o tipo de arquivo.</p>
<p>Para depurar o código no seu dispositivo, você precisa habilitar o debug console: vá em "Ajustes", selecione "Safari" e depois "Desenvolvimento".</p>
<p style="text-align: center;">...........................</p>
<p style="text-align: center;">E com isso finalizei o básico. No próximo artigo será feita a codificação de um jogo para demonstração.</p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=267</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Que jogos podem ser feitos com o Flash para o iOS</title>
		<link>http://gdjogos.com.br/tutoriais/?p=233</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=233#comments</comments>
		<pubDate>Wed, 15 Jun 2011 21:51:38 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Iphone/Ipad]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=233</guid>
		<description><![CDATA[Embora a performance dos jogos  não seja muito boa, ou ainda não é muito boa, bons jogos já podem ser encontrados (principalmente a partir da versão 2.7 da Air SDK). Abaixo alguns links com vídeos desses aplicativos: http://blog.theflashblog.com/?p=2711 http://blog.theflashblog.com/?p=2716 Além de jogos a nova versão da Air SDK oferece uma série de melhorias (http://blogs.adobe.com/flashruntimereleases/2011/06/14/air-2-7-runtimes-and-sdk-are-now-available/). Vídeos comparando a [...]]]></description>
			<content:encoded><![CDATA[<p>Embora a performance dos jogos  não seja muito boa, ou ainda não é muito boa, bons jogos já podem ser encontrados (principalmente a partir da versão 2.7 da Air SDK). Abaixo alguns links com vídeos desses aplicativos:</p>
<ul>
<li><a href="http://blog.theflashblog.com/?p=2711">http://blog.theflashblog.com/?p=2711</a></li>
<li><a href="http://blog.theflashblog.com/?p=2716Blockquote">http://blog.theflashblog.com/?p=2716</a></li>
</ul>
<p>Além de jogos a nova versão da Air SDK oferece uma série de melhorias (<a href="http://blogs.adobe.com/flashruntimereleases/2011/06/14/air-2-7-runtimes-and-sdk-are-now-available/">http://blogs.adobe.com/flashruntimereleases/2011/06/14/air-2-7-runtimes-and-sdk-are-now-available/</a>). Vídeos comparando a performance podem ser encontrados em: <a href="http://blogs.adobe.com/flashplayer/2011/06/adobe-air-2-7-now-available-ios-apps-4x-faster.html">http://blogs.adobe.com/flashplayer/2011/06/adobe-air-2-7-now-available-ios-apps-4x-faster.html</a>. A figura abaixo também mostra a melhoria na taxa de exibição das aplicações.</p>
<p style="text-align: center;"><a href="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/06/senza-nome.jpg"><img class="aligncenter size-full wp-image-234" title="senza-nome" src="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/06/senza-nome.jpg" alt="" width="648" height="483" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=233</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como é possível o Flash no iPhone/iPad</title>
		<link>http://gdjogos.com.br/tutoriais/?p=226</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=226#comments</comments>
		<pubDate>Thu, 02 Jun 2011 19:50:09 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Iphone/Ipad]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=226</guid>
		<description><![CDATA[Quando vi pela primeira vez a possibilidade de desenvolver em Flash para iPhone/iPad achei estranho já que o iOS (sistema operacional do iPhone/iPad) não suporta Flash e a Apple deixa esse defeito por vontade própria, então como a Adobe fez para viabilizar isso? A Adobe utilizou o Low Level Virtual Machine (LLVM) permitindo um aplicativo [...]]]></description>
			<content:encoded><![CDATA[<p>Quando vi pela primeira vez a possibilidade de desenvolver em Flash para iPhone/iPad achei estranho já que o iOS (sistema operacional do iPhone/iPad) não suporta Flash e a Apple deixa esse defeito por vontade própria, então como a Adobe fez para viabilizar isso?</p>
<p>A Adobe utilizou o Low Level Virtual Machine (<a title="(22 visitas)" href="http://rederia.net/go.php?http://www.llvm.org/">LLVM</a>) permitindo um aplicativo feito em Adobe AIR ser convertido  para um aplicativo nativo do iOS. O modo de compilação foi alterado para que seu aplicativo pudesse rodar no iOS, do modo JIT (Just in Time) para o AOT (Ahead-of-Time).</p>
<p>O desempenho ainda não é muito bom, mas está melhorando e aplicações desenvolvidas com a versão 2.7 da SDK do Air (ainda experimental) mostram melhor desempenho.</p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=226</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento para iPhone/iPad com Adobe Flash</title>
		<link>http://gdjogos.com.br/tutoriais/?p=176</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=176#comments</comments>
		<pubDate>Sat, 02 Apr 2011 02:50:35 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Iphone/Ipad]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=176</guid>
		<description><![CDATA[Primeiramente é importante dizer que meu guia inspiração para esse tutorial vem de Lee Brimelow, um desenvolvedor de games que mantem o site http://gotoandlearn.com, um site muito bom com vídeos tutoriais. O cara é bastante profissional nisso. A própria Adobe merece créditos porque toda e explicação, sem contar a tecnologia, foi ela que gerou e [...]]]></description>
			<content:encoded><![CDATA[<p>Primeiramente é importante dizer que meu guia inspiração para esse tutorial vem de Lee Brimelow, um desenvolvedor de games que mantem o site <a href="http://gotoandlearn.com" target="_blank">http://gotoandlearn.com</a>, um site muito bom com vídeos tutoriais. O cara é bastante profissional nisso.</p>
<p>A própria Adobe merece créditos porque toda e explicação, sem contar a tecnologia, foi ela que gerou e os códigos que serão vistos foram tirados de seu help (<a href="http://help.adobe.com/en_US/as3/iphone/index.html" target="_blank">http://help.adobe.com/en_US/as3/iphone/index.html</a>) e labs (<a href="http://labs.adobe.com/technologies/packagerforiphone/" target="_blank">http://labs.adobe.com/technologies/packagerforiphone/</a>).</p>
<p>Os primeiros passos para desenvolver para iPhone/iPad é o mais demorado e caro. Você precisa obrigatoriamente de um iPhone ou iPad para poder testar o que foi desenvolvido e também precisa de uma licença de desenvolvedor Apple que custa 99 dólares anuais.</p>
<p>Para obter a licença acesse o site de desenvolvedores da Apple (<a href="http://developer.apple.com" target="_blank">http://developer.apple.com</a>) e depois a opção “Join the iOS Developer Program” (<a href="http://developer.apple.com/programs/ios/" target="_blank">http://developer.apple.com/programs/ios/</a>), por fim clique no botão “Enroll Now” que o conduzirá para <a href="http://developer.apple.com/programs/start/standard/" target="_blank">http://developer.apple.com/programs/start/standard/</a>. Você precisa fazer um cadastro que gerará um documento que precisa ser preenchido e enviado por fax para Apple. Eles recebendo o fax em poucas horas você já tem acesso ao conteúdo exclusivo para desenvolvedores (documentos e vídeos). Mais alguns dias (no meu caso foram 7 dias) se nenhum problema ocorrer você recebe a licença de desenvolvedor o/</p>
<p>Para prosseguir nesse tutorial você precisa ter passado pelos passos anteriores: ter comprado um dispositivo e adquirido a licença de desenvolvedor.</p>
<p>&nbsp;</p>
<p><span id="more-176"></span>Estando logado no Member Center do site de desenvolvedores da Apple, você precisa acessar o "Provision &amp; test your apps on your iPhone, iPad &amp; iPod touch", que fornecerá os certificados necessários para compilar a aplicação.</p>
<p>Primeiramente é preciso adicionar o aparelho, ou aparelhos que serão utilizados para teste. Somente nos aparelhos adicionados será possível realizar os testes. Para isso, basta ir na opção "Devices" e depois em "Add Devices".</p>
<p><a href="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/04/apple1.png"><img class="aligncenter size-full wp-image-224" title="apple1" src="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/04/apple1.png" alt="" width="550" height="216" /></a></p>
<p>Cada desenvolvedor pode registrar até 100 aparelhos. Para o registro é preciso colocar um nome qualquer e o Device ID que é um identificador único do dispositivo.</p>
<p>A parte mais complicada é para gerar o certificado. Você precisará do OpenSSL, que é adquirido em <a href="http://www.slproweb.com/products/Win32OpenSSL.html" target="_blank">http://www.slproweb.com/products/Win32OpenSSL.html</a>. Baixe e instale o <a href="http://www.slproweb.com/download/Win32OpenSSL_Light-1_0_0d.exe" target="_blank">Win32 OpenSSL v1.0.0d Light</a>. Se ocorrer algum problema para instalar o OpenSSL, instale o <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF" target="_blank">Visual C++ 2008 Redistributables</a> e depois tente instalar o OpenSSL novamente.</p>
<p style="text-align: center;"><strong><span style="color: #ff0000;">[Artigo ainda não completo]</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=176</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1 &#8211; Introdução a Realidade Aumentada</title>
		<link>http://gdjogos.com.br/tutoriais/?p=58</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=58#comments</comments>
		<pubDate>Sun, 02 Jan 2011 01:50:50 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Realidade Aumentada]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=58</guid>
		<description><![CDATA[A virtualidade aumentada é um conceito bastante interessante e que pode, como foi mostrado, se utilizada no desenvolvimento de diversos jogos. Mas, dentro da realidade misturada, o que possui maior empregabilidade é a realidade aumentada. São diversas técnicas disponíveis para uso como a identificação de movimento em uma área, identificar marcadores e identificação de objetos [...]]]></description>
			<content:encoded><![CDATA[<p>A virtualidade aumentada é um conceito bastante interessante e que pode, como foi mostrado, se utilizada no desenvolvimento de diversos jogos. Mas, dentro da realidade misturada, o que possui maior empregabilidade é a realidade aumentada. São diversas técnicas disponíveis para uso como a identificação de movimento em uma área, identificar marcadores e identificação de objetos (o mais comum sendo o rosto humano).</p>
<p>A partir de agora serão mostradas todas essas técnicas, com uma explicação sobre o funcionamento básico e dicas de uso.</p>
<h2><span id="more-58"></span>Introdução</h2>
<p>Para utilização da realidade aumentada primeiro precisamos aprender a utilizar vídeos no Flash. Embora possam ser utilizados vídeos do computador, ou disponibilizados por um servidor, o interesse nesse livro é a utilização de vídeos capturados pela webcam do usuário, mas todo os recursos de vídeo são controlados pela classe vídeo.</p>
<p>O código abaixo captura a imagem da webcam e mostra a imagem no palco. Inicialmente é criada uma variável do tipo vídeo com uma instancia de vídeo e também uma variável do tipo câmera que já recebe, através do método Camera.getCamera(), a webcam do usuário. A câmera em seguida é anexada ao componente de vídeo e para finalizar é adicionado o componente de vídeo ao palco.</p>
<p style="text-align: left; padding-left: 90px;">Como a classe Camera não estende a classe DisplayObject, não pode ser adicionada diretamente à lista de exibição usando o método addChild(). Para exibir o vídeo capturado da câmera, é preciso criar um novo objeto Video e chamar o método attachCamera() na ocorrência de Video (MANUAL DO AS3).</p>
<pre class="brush:as3">var video:Video = new Video();
var webcam:Camera = Camera.getCamera();
video.attachCamera(webcam);
addChild(video);</pre>
<p>Ao executar o código, assim como no uso do microfone, será solicitada a permissão de acesso a webcam do usuário (conforme visto na Figura 1). Sendo permitido o acesso será mostrada a captura de imagem da webcam, caso contrário o palco ficará em branco.</p>
<p>O código abaixo também irá capturar uma imagem da webcam e mostrá-la no palco, mas ele é mais completo. Na linha 3 é feita uma verificação se a variável webcam é diferente de NULL o que significa que o usuário possui uma webcam no computador. Somente se existir é que será criado o componente de vídeo e anexada a imagem da webcam nele. Em seguida é adicionado um ouvinte de STATUS que aguarda a resposta do usuário quanto a permissão de uso da webcam. Somente quando o usuário responder a permissão é que função continua() será chamada.</p>
<p>A função continua() por sua vez, inicia verificando se o usuário permitiu o acesso a webcam. Se webcam.muted tiver valor TRUE significa que o usuário não permitiu o acesso por isso foi utilizado a negação (!) desse parâmetro. Somente se o usuário der permissão é que será adiciona do componente de vídeo ao palco (através do código da linha 10).</p>
<p>Por fim, na linha 12 é removido o ouvinte que esperava a resposta do usuário na caixa permissão, mesmo que ela seja recusada, ela já foi feita.</p>
<pre class="brush:as3">var video:Video;
var webcam:Camera=Camera.getCamera();
if (webcam!=null) {
	video = new Video();
	video.attachCamera(webcam);
          webcam.addEventListener(StatusEvent.STATUS, continua);
}
function continua(event:StatusEvent):void {
	if (! webcam.muted) {
		addChild(video);
	}
	webcam.removeEventListener(StatusEvent.STATUS, continua);
}</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=58</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1.1 &#8211; Opções para quem não sabe Flash &#8211; não programadores</title>
		<link>http://gdjogos.com.br/tutoriais/?p=144</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=144#comments</comments>
		<pubDate>Sun, 02 Jan 2011 01:49:51 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[De cima]]></category>
		<category><![CDATA[Realidade Aumentada]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=144</guid>
		<description><![CDATA[Fazer uso da Realidade Aumentada para fins pessoais é algo hoje bastante fácil com a utilização de algumas ferramentas. Duas delas me chamam especial atenção, a ZooBurst e a EZFlar. O ZooBurst é um serviço que permite que você desenvolva livros virtuais utilizando técnica 3D. EZFlar é a biblioteca oficial desenvolvida pelo jornal O Estado [...]]]></description>
			<content:encoded><![CDATA[<p>Fazer uso da Realidade Aumentada para fins pessoais é algo hoje bastante fácil com a utilização de algumas ferramentas. Duas delas me chamam especial atenção, a ZooBurst e a EZFlar.</p>
<ul>
<li>O <a href="http://www.zooburst.com" target="_blank">ZooBurst</a> é um serviço que permite que você desenvolva livros virtuais utilizando técnica 3D.</li>
<li><a href="http://www.ezflar.com/home/show_home" target="_blank">EZFlar</a> é a biblioteca oficial desenvolvida pelo jornal O Estado de São Paulo para desenvolver um sistema de realidade aumentada.</li>
</ul>
<h3><span id="more-144"></span>ZooBurst</h3>
<p><a href="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/01/zooburst.png"><img class="aligncenter size-full wp-image-149" title="zooburst" src="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/01/zooburst.png" alt="" width="500" height="337" /></a></p>
<p>O ZooBurst é um serviço para criar livros pop-up (aqueles que quando se abre a página do livro figuras "pulam" da página). Para criar um livro basta ir adicionando imagens e textos a cada página do livro. Na criação do livro pode ser utilizada a Virtualidade Aumentada já que é permitido fazer uma gravação de voz em vez do texto (apenas na versão paga do serviço).</p>
<p>Para visualizar o livro criado basta possuir o plugin do Adobe Flash e ir folheando as páginas. Outra opção é liberar o acesso para a webcam e imprimir uma imagem de marcador. Quando você mostrar esse marcador para a webcam, o livro será mostrado no lugar desse marcador. Se você gerar o marcador o livro gira também acompanhando, assim como aproximando o marcador da webcam faz o livro parecer mais próximo.</p>
<p>Alguns livros prontos podem ser vistos em uma <a href="http://www.zooburst.com/zb_gallery.php" target="_blank">galeria disponível no site do serviço</a>, mas recomendo criar uma conta uma conta gratuita e testar o serviço.</p>
<h3>EZFlar</h3>
<p><a href="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/01/EZFlar.png"><img class="aligncenter size-full wp-image-150" title="EZFlar" src="http://gdjogos.com.br/tutoriais/wp-content/uploads/2011/01/EZFlar.png" alt="" width="500" height="307" /></a></p>
<p>O EZFlar é um serviço mais simples, mas bastante interessante para a Realidade Aumentada. Ele se baseia em mostrar um material multimídia quando for identificado um marcador na captura da webcam.</p>
<p>Os materiais podem ser imagens nos formatos JPG, GIF ou PNG; elementos 3D no formado DAE e MD2, sons no fomato MP3 e também arquivos nos formatos SWF ou FLV. Além vincular esses formatos de arquivo, podem ser vinculados textos, endereço de Twitter, ou qualquer outra URL.</p>
<p>Você pode utilizar até 5 elementos com 5 marcadores diferentes e deixar publicado para acesso via um link que pode ser disponibilizado para quem você quiser enviar para curtir a aplicação gerada por você.</p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=144</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2 &#8211; Técnicas de RA</title>
		<link>http://gdjogos.com.br/tutoriais/?p=79</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=79#comments</comments>
		<pubDate>Sun, 02 Jan 2011 01:40:14 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Realidade Aumentada]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=79</guid>
		<description><![CDATA[São diversas técnicas da RA que podem ser desenvolvidas utilizando o Flash e elas envolvem: detecção de movimento, detecção de objetos e detecção de cor. Além de detectar esses elementos e preciso acompanhar seu deslocamento (tracking) de modo a seguir seu movimento. Detecção de movimento A detecção de movimento consiste não apenas saber se existe [...]]]></description>
			<content:encoded><![CDATA[<h2><span style="font-size: 13px; font-weight: normal;">São diversas técnicas da RA que podem ser desenvolvidas utilizando o Flash e elas envolvem: detecção de movimento, detecção de objetos e detecção de cor. Além de detectar esses elementos e preciso acompanhar seu deslocamento (<strong><em>tracking</em></strong>) de modo a seguir seu movimento.</span></h2>
<h3>Detecção de movimento</h3>
<p>A detecção de movimento consiste não apenas saber se existe ou não movimentação nas imagens capturadas pela webcam, mas também saber onde esse movimento ocorre.</p>
<ul>
<li><a title="2.1 – Detecção de movimento geral" href="http://gdjogos.com.br/tutoriais/?p=81">Detecção de movimento geral</a></li>
<li><a title="2.2 – Detecção de movimento em um ponto específico" href="http://gdjogos.com.br/tutoriais/?p=92">Detecção de movimento em um ponto específico</a></li>
<li><a title="2.3 – Detecção de movimento em um ponto específico – outra abordagem" href="http://gdjogos.com.br/tutoriais/?p=117">Detecção de movimento em um ponto específico – outra abordagem</a></li>
<li><a title="Detecção e tracker de cor" href="http://gdjogos.com.br/tutoriais/?p=125" target="_blank">Detecção e tracker de cor</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=79</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2.1 &#8211; Detecção de movimento geral</title>
		<link>http://gdjogos.com.br/tutoriais/?p=81</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=81#comments</comments>
		<pubDate>Sun, 02 Jan 2011 01:30:06 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Realidade Aumentada]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=81</guid>
		<description><![CDATA[O Flash possui instruções que verificam a ocorrência de movimento na captura da webcam, dentro de um limiar, e um indicador de quantidade de movimento, similar ao nível de atividade do microfone. Para detectar movimento é necessário entender o uso da função setMotionLevel() e do parâmetro do ouvinte ActivityEvent.ACTIVITY. A função setMotionLevel() espera dois parâmetros, [...]]]></description>
			<content:encoded><![CDATA[<p>O Flash possui instruções que verificam a ocorrência de movimento na captura da webcam, dentro de um limiar, e um indicador de quantidade de movimento, similar ao nível de atividade do microfone. Para detectar movimento é necessário entender o uso da função setMotionLevel() e do parâmetro do ouvinte ActivityEvent.ACTIVITY.</p>
<p>A função setMotionLevel() espera dois parâmetros, o primeiro é a sensibilidade que especifica quanto de movimento é preciso para ser considerado um movimento, enquanto o segundo parâmetro especifica um total de milissegundos sem movimento necessário para considerar a captura realmente como sem movimento. Deve ficar mais fácil entender esses conceitos experimentando o código a seguir.</p>
<p>Boa parte desse código já foi explicada, atente apenas para a linha 14 onde foi adicionado um ouvinte para a webcam. Esse ouvinte vai ser executado toda vez que uma modificação no movimento da webcam ocorrer, chamando a função testaAtividade(). Essa função testaAtividade() verifica se o retorno do evento com relação a atividade (evento.activating) foi verdadeiro ou falso. Caso for falso ela simplesmente irá escrever através do trace informando que não existe movimento. Se for verdade, além de escrever que existe movimento, também informa o nível de movimento detectado.</p>
<pre class="brush:as3">var video:Video;
var webcam:Camera=Camera.getCamera();
webcam.setMotionLevel(50,1000);

if (webcam!=null) {
	webcam.addEventListener(StatusEvent.STATUS, continua);
	video = new Video();
	video.attachCamera(webcam);
}

function continua(event:StatusEvent):void {
	if (!webcam.muted) {
		addChild(video);
		webcam.addEventListener(ActivityEvent.ACTIVITY, testaAtividade);
	}
	webcam.removeEventListener(StatusEvent.STATUS, continua);
}

function testaAtividade(evento:ActivityEvent) {
	if (evento.activating == true) {
		trace("existe movimento com intensidade " + webcam.activityLevel);
	}
	if (evento.activating == false) {
		trace("não existe movimento");
	}
}</pre>
<p>Se alterarmos os valores da função setMotionLevel() iremos ver modificações no funcionamento da captura. Primeiro atente para a sensibilidade, ela aceita valores entre zero e 100, sendo 50 o valor padrão. Se modificarmos o valor para 90 ter uma grande movimentação detectada para considerar um movimento, enquanto um valor 10 torna mais sensível essa movimentação.</p>
<p style="padding-left: 90px;">Evite valores de sensibilidade muito baixo. Se houver mudança na luz ambiente, isso será identificado como movimento. Então, em ambientes abertos, mesmo que a pessoa esteja parada, um modificação na iluminação ir ser considerada movimento. Valores muito baixo também podem, dependendo da qualidade de captura da webcam, considerar a poeira voando no ambiente como movimento. Você pode verificar como fazer um ajuste de ambiente através do webvideo disponível nos materiais complementares.</p>
<p>O segundo parâmetro do método setMotionLevel() especifica quantos milissegundos é preciso ficar sem movimento para ser considerado tal. O padrão é 2000 (2 segundos).</p>
<p>O código a seguir busca identificar o ruído existente no ambiente e, a partir dele, configurar a sensibilidade da função setMotionLevel(). Os 10 primeiros segundos são utilizados para verificar a atividade na captura e com isso gerar uma média de movimentação. Entre as linhas 9 e 12 são instruções para posicionar uma caixa de texto no palco para mostrar mensagens e entre as linhas 14 e 27 são instruções já conhecidas.</p>
<pre class="brush:as3">var video:Video;			//cria componente de vídeo
var webcam:Camera=Camera.getCamera();	//captura a webcam
webcam.setMotionLevel(10,1000);		//configura a sensibilidade para capturar pequenos movimentos
var segundos:int = 10;			//tempo para analisar inicialmente a atividade na captura
var somaatividade:int = 0;			//somatório da atividade no tempo inicial
var tempo1 = new Timer(1000);		//temporizador para o tempo de análise inicial
var tempo2 = new Timer(100);		//temporizador para mostrar a atividade depois da análise
var tf:TextField = new TextField();		//cria um campo de texto no palco para mostrar mensagens
tf.x = 100;
tf.y = 300;
tf.autoSize = TextFieldAutoSize.LEFT;
addChild(tf);

if (webcam!=null) {
	webcam.addEventListener(StatusEvent.STATUS, continua);
	video = new Video();
	video.attachCamera(webcam);
}

function testaAtividade(evento:ActivityEvent) {
	if (evento.activating == true) {
		trace("existe movimento com intensidade " + webcam.activityLevel);
	}
	if (evento.activating == false) {
		trace("não existe movimento");
	}
}</pre>
<p>A função continua(), também já conhecida, foram adicionadas as linhas 32 e 33 adicionando um ouvinte ao primeiro temporizador (de 1000 milissegundos – 1 segundo) que irá chamar a função nivelAtividade() a cada segundo. Esse temporizador é utilizado para contar os 10 segundos iniciais.</p>
<pre class="brush:as3">function continua(event:StatusEvent):void {
	if (!webcam.muted) {
		addChild(video);
		webcam.addEventListener(ActivityEvent.ACTIVITY, testaAtividade);
		tempo1.addEventListener(TimerEvent.TIMER, nivelAtividade);
		tempo1.start();
	}
	webcam.removeEventListener(StatusEvent.STATUS, continua);
}</pre>
<p>Na função nivelAtividade, incialmente são mostradas informações na caixa de texto do palco, somada a quantidade de atividade identificada naquele segundo e decrementado o número de segundos faltantes. Na linha 43 é comparado se o número de segundos faltantes se encerraram, parando o primeiro temporizador e consequentemente parando a chamada para a função nivelAtividade() e configurando a sensibilidade com a média da atividade (soma da atividade dividido pelo número de segundos – pois foi capturada uma atividade para cada segundo). Em seguida, é inicializado um novo temporizador que irá chamar a função mostraNivelAtividade() que irá mostrar na caixa de texto no palco, o nível de atividade capturado a cada 100 milissegundos (10 vezes por segundo).</p>
<pre class="brush:as3">function nivelAtividade(event:TimerEvent) {
	tf.text = "";
	tf.appendText("Segundos para começar: " + segundos + "\n");
	tf.appendText("Atividade: " + webcam.activityLevel + "\n");
	somaatividade += webcam.activityLevel;
	segundos-=1;
	if (segundos &lt;= 0) {
		trace ("Média da atividade: " + somaatividade/ segundos + "\n");
		tempo1.stop();
		webcam.setMotionLevel(somaatividade/ segundos);
		tempo2.addEventListener(TimerEvent.TIMER, mostraNivelAtividade);
		tempo2.start();
	}
}

function mostraNivelAtividade(event:TimerEvent) {
	tf.text = "Atividade: " + webcam.activityLevel + "\n";
}</pre>
<p>Na prática esse último código não é muito funcional já que o nível de captura pode variar muito a cada segundo em ambientes com muito ruído, mas ele pode ser adaptado para verificar uma quantidade máxima de ruído aceitável para a aplicação.</p>
<p>Veja também como fazer esse exemplo utilizando o Flash Builder em <a title="2.1.1 – Detecção de movimento utilizando o Flash Builder" href="http://gdjogos.com.br/tutoriais/?p=89">Detecção de movimento utilizando o Flash Builder</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=81</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2.1.1 &#8211; Detecção de movimento utilizando o Flash Builder</title>
		<link>http://gdjogos.com.br/tutoriais/?p=89</link>
		<comments>http://gdjogos.com.br/tutoriais/?p=89#comments</comments>
		<pubDate>Sun, 02 Jan 2011 01:25:15 +0000</pubDate>
		<dc:creator>Nivali</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Builder]]></category>
		<category><![CDATA[Realidade Aumentada]]></category>

		<guid isPermaLink="false">http://gdjogos.com.br/tutoriais/?p=89</guid>
		<description><![CDATA[Abro agora uma questão de ferramenta de desenvolvimento. Para criar aplicações Flash, a Adobe possui uma outra ferramenta que é o Flash Builder. Uma diferença importante está na questão do Flash Builder não possuir o editor gráfico dos elementos. Para criar um quadrado, no Flash basta selecionar a ferramenta de desenho de quadrado e posicionar [...]]]></description>
			<content:encoded><![CDATA[<p>Abro agora uma questão de ferramenta de desenvolvimento. Para criar aplicações Flash, a Adobe possui uma outra ferramenta que é o Flash Builder. Uma diferença importante está na questão do Flash Builder não possuir o editor gráfico dos elementos. Para criar um quadrado, no Flash basta selecionar a ferramenta de desenho de quadrado e posicionar onde se quer o quadrado e seu tamanho. No Flash Builder é preciso informar esses parâmetros via linha de código.</p>
<p>Trabalhar com virtualidade aumentada, onde o foco é o virtual, é sem dúvida melhor de ser feito no Flash, mas para a realidade aumentada vejo no Flash Builder uma ferramenta mais adequada já que ele facilita a codificação. Existe, era de se esperar, diferenças, mas ainda se mantem o uso do AS3.</p>
<p>Para mostrar as diferenças, a aplicação que detecta movimento é apresentada em Flash Builder. Ela faz exatamente a mesma coisa da versão em Flash. Para isso foi criado um projeto de AS chamado “movimento ”. O código e explicação são mostrados a seguir.</p>
<p><span id="more-89"></span></p>
<p>Todo projeto no FB forma um pacote. Os códigos que compõe um pacote básico são inseridos automaticamente pela ferramenta. Nas linhas de 3 até 8 são os pacotes importados necessários para a aplicação. Eles são inseridos também automaticamente enquanto codificamos, conforme forem necessários.</p>
<p>Na linha 10 é especificada a classe. Nela foi adicionado um extend do objeto Sprite. Isso é necessário para posteriormente inserir elementos na tela através da função addChild(). Poderíamos ter utilizado uma extensão do elementos MovieClip também. Em seguida são criadas as variáveis de acesso público para a área de vídeo e para representar a webcam. Aqui existe uma diferença que é a criação de uma área de texto. Ela se faz necessária já que no FB não poderemos utilizar o trace, então criamos uma área de texto que será mostrada na tela e nela escrevermos o que antes era mostrado no trace.</p>
<pre class="brush:as3">package
{
	import flash.display.Sprite;
	import flash.events.ActivityEvent;
	import flash.events.StatusEvent;
	import flash.media.Camera;
	import flash.media.Video;
	import flash.text.TextField;

	public class movimento  extends Sprite
	{
		public var video:Video;
		public var webcam:Camera=Camera.getCamera();
		public var texto:TextField = new TextField();</pre>
<p>Em seguida é criado o método construtor da classe. Nele fazemos o teste se o usuário possui uma webcam (igual na versão em Flash), também colocamos aqui a configuração da sensibilidade da captura e especificamos a visualização e inclusão de nossa área de texto (entre as linhas 10 e 14).</p>
<pre class="brush:as3">public function movimento  ()
		{
			if (webcam!=null) {
				webcam.addEventListener(StatusEvent.STATUS, continua);
				video = new Video();
				video.attachCamera(webcam);

				webcam.setMotionLevel(50,1000);

				texto.text = "Iniciando...";
				texto.width = 400;
				texto.height = 50;
				texto.y = 305;
				addChild(texto);
			}
		}</pre>
<p>As funções continua() ficou praticamente inalterada. Apenas foi definido que ela é privada e especificado o retorno como void (já que ela não retorna nada). Na função testaAtividade, uma mudança significativa é feita, onde em vez de mostrar as mensagens via trace, escrevemos na caixa de texto.</p>
<pre class="brush:as3">private function continua(event:StatusEvent):void {
			if (!webcam.muted) {
				addChild(video);
				webcam.addEventListener(ActivityEvent.ACTIVITY, testaAtividade);
			}
			webcam.removeEventListener(StatusEvent.STATUS, continua);
		}

		private function testaAtividade(evento:ActivityEvent):void {
			if (evento.activating == true) {
				texto.text = "existe movimento com intensidade " + webcam.activityLevel;
			}
			if (evento.activating == false) {
				texto.text = "não existe movimento";
			}
		}
	}
}</pre>
<p>A lógica de criação das aplicações é a mesma nas duas ferramentas, sendo apenas necessários se adaptar as diferenças. No restante do livro será mostrada a codificação alternando entre o Flash e o FB.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://gdjogos.com.br/tutoriais/?feed=rss2&#038;p=89</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

