<?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>MXStudio &#187; Natan D. Alves</title>
	<atom:link href="http://www.mxstudio.com.br/author/natan/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mxstudio.com.br</link>
	<description>Macromedia e Adobe - Artigos, colunas, tutorias e muito mais...</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Novidades do Flash CS5 &#8211; Parte 3</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-3/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-3/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 15:23:39 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=3984</guid>
		<description><![CDATA[Olá comunidade. Nesta última parte dessa série sobre as novidades do Flash CS5 vou mostrar para vocês as novidades do painel de Ações, o novo painel Code Snippets, novas opções no painel de Erros e sobre a integração com o Flash Builder. Novidades do painel de Ações Se tinha alguma coisa no Flash que precisava [...]]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Nesta última parte dessa série sobre as novidades do Flash CS5 vou mostrar para vocês as novidades do painel de Ações, o novo painel Code Snippets, novas opções no painel de Erros e sobre a integração com o Flash Builder.</p>
<h2>Novidades do painel de Ações</h2>
<p>Se tinha alguma coisa no Flash que precisava urgentemente de mudanças esse com certeza era o painel de Ações. Depois de algumas novas funcionalidades vindas no Flash CS3, o painel de ações foi deixado de lado na versão CS4 mas na versão CS5 trouxe melhorias a muito tempo pedido pelos desenvolvedores.</p>
<p>A principal melhoria, é que agora é possível usar Code Hints para Classes customizadas e importadas. O recurso Code Hints para quem não conhece exibe no painel de ações os métodos e propriedades que um determinado objeto possa ter, além dos parametros da funções, e esse recurso só funcionava para Classes e funções que vem com o Flash.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/codehint.jpg" alt="Code Hints" width="455" height="260" class="alignnone size-full wp-image-3997" /></p>
<p>Além do Code Hints, agora o painel de Ações automaticamente fecha blocos de ações que usam chaves. Ao criar um bloco de comandos e usar o abre chave ({) e for para a próxima linha, o Flash automaticamente insere um fecha chave (}) evitando assim algum erro sintaxe.</p>
<p>Outra novidade do painel de Ações é que ele automaticamente importa as Classes que estiver usando. Por exemplo, se você estiver criando uma Classe e nessa Classe você for usar um MovieClip, você é obrigado a importar a Classe MovieClip para que sua Classe funcione corretamente, então você tem que saber que a Classe MovieClip se encontra dentro do pacote flash.display.MovieClip. Com o recurso de automaticamente importar a Classe, você não precisa mais ter que decorar em quais pacotes cada Classe fica.</p>
<h2>Novo painel Code Snippets</h2>
<p>Uma novidade bem bacana é o painel Code Snippets. Nesse painel você encontra diversos códigos prontos para serem usados (algumas ações precisa que um objeto no qual deseja atribuir a ação esteja selecionado), eliminando a necessidade de ficar escrevendo sempre os mesmos códigos. Para usar esse painel, vocês escolhem quais das ações que deseja usar e só precisam clicar duas vezes sobre ela que o painel de Ações será aberto com as ações para aquela opção.</p>
<p>Outra forma de uso do painel, é selecionar qual ação que deseja, clicar com o botão direito do mouse e selecionar a opção Copy to clipboard. O Flash irá exibir uma mensagem dizendo que a ação foi copiada para seu clipboard e vai pedir para você abrir o painel de ações e colar as ações nele.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/copiado.jpg" alt="Ação copiada" width="380" height="150" class="alignnone size-full wp-image-3999" /></p>
<p>No próprio painel existem dois botões com as mesmas funcionalidades citadas acima, o primeiro botão com o símbolo de um frame com ações (com o @) ao ser clicado copia as ações para o frame atual e o segundo botão com dois quadrados copia as ações para seu clipboard.</p>
<p>A parte mais legal desse painel é a possibilidade de adicionar novos códigos a ele e compartilhar com outros usuários seus códigos. Para adicionar novos códigos ao painel, basta abrir o painel e clicar no botão Options (um botão em forma de uma engrenagem) e selecionar a opção &#8220;Create New Code Snippet&#8221;.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/novoSnippet.jpg" alt="Criando um novo Code Snippet" width="235" height="270" class="alignnone size-full wp-image-4002" /></p>
<p>Uma nova janela se abrirá, nela podemos inserir um nome para a Ação que estamos criando, uma descrição que será mostrada quando o mouse estiver sobre a ação no painel, se tiver alguma ação no painel de Ações selecionada e clicar no botão Auto Fill o Flash preenche o campo Code com ela, o campo code preenchemos com as ações que queremos adicionar ao painel e por último podemos selecionar a última opção caso desejamos que o Flash automaticamente coloque no lugar de instance_name_here a instancia do objeto selecionado (forçando o usuário a selecionar um objeto para aplicar determinada ação).</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/codigo.jpg" alt="Criando um novo Code Snippet" width="578" height="315" class="alignnone size-full wp-image-3998" /></p>
<p>Ao terminar de criar um novo Snippet, ele será criado dentro de uma pasta chamada Custom. Se quiser mover esse código para uma outra pasta será preciso editar o XML que armazena todos os códigos do painel. Para edita-lo basta clicar no botão Options, Edit Code Snippets XML. Vale lembrar que para editar esse XML é preciso conhecer XML para evitar erros na hora de salvar.</p>
<p>Para compartilhar suas ações com outros usuários basta clicar no botão Options e selecionar a opção Export Code Snippets XML. Todas as ações que estão em seu painel serão salvos em um arquivo XML e é esse arquivo XML que você irá disponibilizar para outros usuários importarem para o Flash. Caso queiram remover todas as outras ações e deixar apenas as suas ações mais uma vez terão que editar o XML. Para importar o XML com Ações de outros usuários o processo é praticamente o mesmo de exportar, basta clicar no botão Options e selecionar a opção Import Code Snippets XML.</p>
<p>Um dos problemas que a Adobe precisa melhorar nesse painel é o compartilhamento dessas ações. Quando você decide exportar essas ações você não pode escolher quais das Ações do painel deseja exportar e o mesmo vale quando se importa um XML, se você importar um XML que tem as mesmas ações que o seu painel, o Flash não ignora essas ações e importa elas deixando itens duplicados. Fora que ficar editar XML não é algo legal né.</p>
<p>É possível também remover determinadas ações do painel, basta selecionar a ação desejada e clicar com o botão direito do mouse sobre ela e selecionar a opção Delete Code Snippet. Outra opção é selecionar a ação que deseja remover e clicar em Options, Delete Code Snippet. E por último, é possível retornar o painel com as ações originais, para fazer isso basta selecionar a opção Options, Reset to Default XML.</p>
<h2>Novas opções do painel de Erros (Compiler Errors)</h2>
<p>O painel de erros recebeu novas opções, agora é possível esconder ou mostrar os erros ou avisos (warnings) que seu arquivo teve ao ser compilado. Uma facilidade a mais para nós desenvolvedores.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/erros.jpg" alt="Novas opções painel Compiler Errors" width="496" height="233" class="alignnone size-full wp-image-4000" /></p>
<p>Outra opção inserida foi a possibilidade de navegar entre as mensagens através de botões (setas).</p>
<h2>Integração com o Flash Builder 4</h2>
<p>Anteriormente, se você queria usar o Flex (agora Flash Builder) para criar uma Classe (já que o painel de ações do Flash era muito inferior comparado ao Flex), o processo era muito chato. Você tinha que criar um projeto novo, criar sua Classe, depois copiar do Flex o ActionScript e colar no Flash, testar, se fosse modificar alguma coisa tinha que repetir o processo e assim vai. Agora esse processo está muito mais fácil, ao criar uma nova Classe, o Flash oferece a possibilidade de escolher em qual dos dois softwares usar, o Flash ou Flash Builder.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/escolha.jpg" alt="Escolha entre o Flash e Flash Builder" width="472" height="205" class="alignnone size-full wp-image-4001" /></p>
<p>Se decidir usar o Flash Builder, ele será aberto (caso ele não esteja aberto) e perguntará aonde está seu arquivo fla salvo e perguntará aonde deseja salvar o projeto.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/salvaronder.jpg" alt="Escolhendo local para salvar o projeto" width="550" height="415" class="alignnone size-full wp-image-4004" /></p>
<p>No Flash Builder aparecem três novas opções, a primeira chamada Publish in Flash Professional é o mesmo que no Flash ir em File, Publish, ou seja serão gerados seus arquivos selecionados no painel Publish Settings. A segunda opção chamada Test Movie in Flash Professional é o famoso Ctrl+Enter (ou Cmd+Return se estiver no Mac), o Flash Builder irá chamar o Flash para compilar seu arquivo e você poderá testa-lo. Ao fechar do arquivo compilado volta-se ao Flash Builder. E a última opção chama-se Debug in Flash Profissional, onde o Flash Builder novamente leva vocês de volta ao Flash no modo de Debug para debugar seu arquivo para achar algum erro ou verificar seu comportamento.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/06/opcoes.jpg" alt="Opções no Flash Builder" width="530" height="280" class="alignnone size-full wp-image-4003" /></p>
<h2>Conclusões</h2>
<p>Não tem como não ficar contente com as novidades que a versão CS5 do Flash recebeu, principalmente o painel de Ações que a muitos anos estava devendo comparado a outros IDE de desenvolvimento em Flash. A integração com o Flash Builder também foi bem vinda, além das novidades na parte de texto e o novo painel Code Snippets que na minha opinião ainda pode ser melhorado para melhor utilização.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a href="http://www.natanalves.com" target="_blank">http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p>Autor: Natan D. Alves – Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</p>
<p>Qualquer dúvida envie um e-mail para <a href="mailto:natanalves@mxstudio.com.br">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://www.mxstudio.com.br/forum" target="_blank">fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Novidades do Flash CS5 – Parte 2</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-2/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-2/#comments</comments>
		<pubDate>Sun, 23 May 2010 21:50:23 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[CS5]]></category>
		<category><![CDATA[Flash CS5]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=3796</guid>
		<description><![CDATA[Olá comunidade. Nessa segunda parte de uma série de três artigos falo sobre o novo painel SWF History, novas opções com a ferramenta de texto e sobre o Componente FLVPlayback. Quem não acessou a primeira parte da série pode acessar através do link abaixo. Novidades do Flash CS5 &#8211; Parte 1 Painel SWF History No [...]]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Nessa segunda parte de uma série de três artigos falo sobre o novo painel SWF History, novas opções com a ferramenta de texto e sobre o Componente FLVPlayback.</p>
<p>Quem não acessou a primeira parte da série pode acessar através do link abaixo.</p>
<p><a href="http://www.mxstudio.com.br/flash/novidades-do-flash-cs5-parte-1/" target="_blank" title="Novidades do Flash CS5">Novidades do Flash CS5 &#8211; Parte 1</a></p>
<h2>Painel SWF History</h2>
<p>No painel de propriedades (Properties) agora existe uma nova opção chamada SWF History. Esse painel armazena informações como tamanho, data e hora que o swf foi gerado ao usar Ctrl+Enter (Cmd+Enter no Mac) ou no menu Control &#8211; Test Movie. Sempre que você testa seu arquivo o painel atualiza as informações.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/history1.jpg" alt="Painel History" width="282" height="102" class="alignnone size-full wp-image-3797" /></p>
<p>O bacana desse painel é que nós temos um feedback de quando houve novas versões do arquivo. Outra opção legal dele é que ele avisa quando o tamanho do SWF gerado tenha aumentado de forma significante, como se estivesse nos avisando que algo de errado poderia ter acontecido para que o arquivo tenha ficado muito maior comparado a versão anterior.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/history2.jpg" alt="Alerta no painel History" width="282" height="130" class="alignnone size-full wp-image-3798" /></p>
<p>O painel exibe apenas as três últimas informações do swf gerado, mas vocês podem recuperar todas as outras informações clicando no botão Log, que irá exibir no painel Output todas as outras informações.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/history3.jpg" alt="History Log" width="370" height="234" class="alignnone size-full wp-image-3799" /></p>
<p>Existe ainda a possibilidade de apagar o histórico clicando no botão Clear. Esse painel funciona apenas para arquivos salvos para o Flash CS5, se estiver com um arquivo que foi salvo nas versões anteriores o painel ira mostrar as informações, mas ao salvar para outra versão do Flash e abrir o arquivo novamente não existirá as informações anteriores.</p>
<h2>Novas opções da Ferramenta Texto</h2>
<p>A ferramenta texto foi a que mais obteve novas funcionalidades no Flash CS5. Anteriormente, tínhamos três opções na hora de criar um campo de texto, Texto estático, Texto dinamico e Texto input. Agora no CS5, essas três opções ficam disponíveis apenas quando selecionamos a opção Classic Text, mas a maior novidade é o formato TLF Text (ou Text Layout Format). Com essa opção selecionada ainda podemos criar campos de texto da forma anterior (texto estático, dinamico e input), só que com ele temos uma infinidade de opções a mais de personalização.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/opcoes.jpg" alt="Algumas opções para o campo de texto" width="534" height="423" class="alignnone size-full wp-image-3908" /></p>
<p>Vamos começar pela novidade mais legal, a possibilidade de criar campos de textos ligados, quem utiliza o InDesign conhece essa funcionalidade já faz um tempo. O que essa ferramenta faz basicamente é dizer ao Flash que existem dois ou mais campos de texto em posições diferentes, fontes, cores e tamanhos diferentes, e se um desses campos não tiver espaço para exibir o texto desejado o texto seguirá para o próximo campo ligado.</p>
<p>Mas como fazer isso? Selecionem a ferramenta de Texto, no painel Properties (propriedades) selecionem a opção TFL Text e no palco criem um campo do tamanho que desejarem e com um texto maior que o tamanho do campo. Vocês vão reparar que no lado superior esquerdo e no lado inferior direito vão aparecer duas caixas (se o texto for maior que o tamanho do campo de texto a caixa do lado direito inferior aparece com cor vermelha), ao clicar em uma dessas caixas o cursor do mouse muda indicando que se clicar no palco um novo campo de texto irá ser criado e ele estará ligado a um outro campo, se você já tiver um campo no palco e clicar sobre ele os dois campos ficam ligados.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/textoligado.jpg" alt="Campos de texto ligados" width="445" height="270" class="alignnone size-full wp-image-3898" /></p>
<p>Infelizmente a criação de campos ligados só fica disponível para arquivos que usam ActionScript 3 e FlashPlayer 10, mais um bom motivo para que os usuários passem a adotar o ActionScript 3 como linguagem de programação padrão no Flash pois as demais versões não terão atualizações.</p>
<p>Continuando com as novidades da Ferramenta de Texto, vou mostrar agora como criar campos de texto com colunas. Mais uma vez com a ferramenta de texto selecionada e a opção TLF Text selecionada, criem um campo de texto no palco do tamanho que desejam e insiram um texto qualquer. No painel Properties (ou propriedades) na aba Container and Flow existe uma opção chamada Columns (colunas) onde a primeira opção é a quantidade de colunas que o campo de texto terá e a segunda opção é o espaçamento dessas colunas.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/colunas1.jpg" alt="Texto em colunas" width="348" height="556" class="alignnone size-full wp-image-3899" /></p>
<h2>Novidades do Componente FLVPlayBack</h2>
<p>No Flash CS5 existem duas versões do Componente FLVPlayback, uma chamada apenas de FLVPlayback e a outra chamada FLVPlayback 2.5. A diferença entre as duas versões basicamente é que na versão 2.5 melhora a performance e a correção de vídeos em streaming, além da possibilidade do uso de DVR (que significa Digital Video Recorder) que possibilita novas opções no streaming de vídeo no Flash. Outra novidade são os novos Skins do Componente, que agora exibem a duração e o tempo do vídeo.</p>
<p>Mas a novidade mais legal é a possibilidade de assistir o vídeo no palco do Flash sem a necessidade de exportar seu arquivo para teste. Com o Componente no Palco e com o vídeo desejado selecionado, o Componente se comporta no palco da mesma maneira que se comporta quando se testa seu arquivo.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/video.jpg" alt="Componente rodando vídeo no palco" width="373" height="308" class="alignnone size-full wp-image-3900" /></p>
<h2>Conclusões</h2>
<p>Sem dúvida as novidades mais legais até agora do Flash CS5 vem da ferramenta de Texto, mas ainda existe a terceira e última parte dessa série de artigos sobre as novidades do Flash CS5, e na última parte mostrarei as novidades no painel de ações, um novo painel chamado Code Snippets, novidades no painel de Erro e sobre a integração do Flash CS5 com o Flash Builder 4.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a href="http://www.natanalves.com">http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p>Autor: Natan D. Alves – Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</p>
<p>Qualquer dúvida envie um e-mail para <a href="mailto:natanalves@mxstudio.com.br">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://www.mxstudio.com.br/forum">fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Novidades do Flash CS5 &#8211; Parte 1</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-1/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-1/#comments</comments>
		<pubDate>Mon, 03 May 2010 00:22:59 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash CS5]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=3737</guid>
		<description><![CDATA[Olá comunidade. Nessa primeira parte da série de artigos sobre o Flash CS5, estarei mostrando para vocês as novidades visuais, criação de aplicativos para iPhone, novos elementos gráficos da ferramenta Deco Tool, novas opções para a ferramenta Bone e integração com serviços online chamado Adobe CS Live. Novo visual Pela terceira vez, a Adobe decide [...]]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Nessa primeira parte da série de artigos sobre o Flash CS5, estarei mostrando para vocês as novidades visuais, criação de aplicativos para iPhone, novos elementos gráficos da ferramenta Deco Tool, novas opções para a ferramenta Bone e integração com serviços online chamado Adobe CS Live.</p>
<h2>Novo visual</h2>
<p>Pela terceira vez, a Adobe decide mudar a identidade visual dos aplicativos do pacote Creative Suite. A primeira mudança que percebemos já começa no ícone dos aplicativos, alteração que não me agradou muito.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/icones.jpg" alt="Ícones CS5" width="607" height="452" class="size-full wp-image-3746" /></p>
<p>Além dos ícones, a tela inicial também passou por alterações e ficaram bem mais legais comparado as mudanças nos ícones.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/inicio.jpg" alt="Inicio Flash" width="590" height="277" class="size-full wp-image-3747" /><br />
<img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/inicio4.jpg" alt="Inicio Flash Builder" width="549" height="314" class="size-full wp-image-3750" /><br />
<img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/inicio3.jpg" alt="Inicio Photoshop" width="599" height="357" class="size-full wp-image-3749" /></p>
<p>E ae tela de boas vindas também passou por algumas alterações.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/inicio2.jpg" alt="Tela de boas vindas" width="586" height="541" class="size-full wp-image-3748" /></p>
<h2>Criando aplicativos para iPhone</h2>
<p>Mesmo com a proibição da Apple com relação a criação de aplicativos para iPhone, iPad e iPod que não usem a IDE da Apple a Adobe não removeu a função de criação de aplicativos para iPhone. Quando você instala o Flash CS5 aparece uma opção para instalar ou não essa opção, então quem não quiser instalar não é obrigado.</p>
<p>A criação de aplicativos é praticamente o mesmo processo de criação de aplicativos em Adobe AIR, você tem um painel com diversas opções de personalização.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/iphone.jpg" alt="Opções iPhone" width="500" height="684" class="size-full wp-image-3770" /><br />
<img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/iphone2.jpg" alt="Opções iPhone" width="500" height="684" class="size-full wp-image-3770" /><br />
<img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/iphone.jpg" alt="Opções iPhone" width="500" height="684" class="size-full wp-image-3770" /></p>
<h2>Novos elementos gráficos para a ferramenta Deco Tool</h2>
<p>A ferramenta Deco tool para quem não conhece, é uma ferramenta que permite criar elementos gráficos de forma facilitada e com diversas opções de personalização. Eu particularmente nunca cheguei a usar essa ferramenta, mas com tantas opções algum dia ela poderá ser útil.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/deco.jpg" alt="Deco Tool" width="600" height="365" class="size-full wp-image-3758" /></p>
<h2>Novas opções para Bone Tool</h2>
<p>A ferramenta Bone Tool permite criar estruturas semelhante a um esqueleto. E agora no Flash CS5 podemos criar animações mais realistas com as novas opções disponíveis para a ferramenta.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/bone.jpg" alt="Opções Ferramenta Bone Tool" width="284" height="484" class="size-full wp-image-3761" /></p>
<h2>Adobe CS Live</h2>
<p>Outra novidade bem legal da suite CS5 é a integração com o serviço CS Live. São 5 tipos de servidores online que prometem aumentar a produtividade, diminuir o desperdício de tempo e maior colaboração entre os envolvidos nos projetos. Os serviços oferecidos são:</p>
<ul>
<li>Adobe BrowserLab &#8211; Permite testar sites em diferentes browser e sistemas operacionais, criar comparações e diagnósticos.</li>
<li>Adobe CS Review &#8211; Permite criar avaliações de projetos, obtenção de comentários, etc.</li>
<li>Acrobat.com &#8211; Permite criar Web conferências, troca de arquivos e colaboração na criação de arquivos.</li>
<li>Adobe Story (beta) &#8211; Permite a criação de roteiros para vídeos.</li>
<li>SiteCatalyst® NetAverages™ &#8211; Permite verificar as partes mais acessadas de seu site, quais navegadores usados, sistemas operacionais, etc.</li>
</ul>
<p>O acesso a esses serviços está em um menu no canto superior direito dos programas, você precisa ter uma Adobe ID para fazer login e poder ter acesso a todos a esses serviços.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2010/05/cslive.jpg" alt="Adobe CS Live" width="242" height="417" class="size-full wp-image-3763" /></p>
<p>Mais informações sobre o Adobe CS Live pode ser encontrado através desse <a href="http://www.adobe.com/products/creativesuite/cslive/" target="_blank">link</a>.</p>
<h2>Conclusões</h2>
<p>Esse foi apenas um aperitivo com as novidades do Flash CS5. No próximo artigo mostrarei novidades na criação de campos de texto, novas opções para vídeo, e novidades no painel Properties. Lembrando que todos os aplicativos da suite CS5 estão disponíveis para teste no site da Adobe para Windows e Mac, vocês podem usar os programas por 30 dias de forma gratuita.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a href="http://www.natanalves.com" target="_blank">http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p>Autor: Natan D. Alves – Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</p>
<p>Qualquer dúvida envie um e-mail para <a href="mailto:natanalves@mxstudio.com.br">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://www.mxstudio.com.br/forum" target="_blank">fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/novidades-do-flash-cs5-parte-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Galeria de Imagens com XML e LightBox</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/galeria-de-imagens-com-xml-e-lightbox/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/galeria-de-imagens-com-xml-e-lightbox/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 00:19:12 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[ActionScript 2]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[FlashLightBox]]></category>
		<category><![CDATA[LightBox]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2779</guid>
		<description><![CDATA[Olá comunidade. Neste tutorial, irei mostrar a vocês como criar uma Galeria de Imagens com XML no Flash utilizando o efeito LightBox presente em algumas páginas HTML. Os requisitos para esse tutorial são: Flash 8, Flash CS3 ou Flash CS4 Conhecimento com interação do Flash com XML Componente FlashLightBox Criando o XML Vamos começar criando [...]]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Neste tutorial, irei mostrar a vocês como criar uma Galeria de Imagens com XML no Flash utilizando o efeito LightBox presente em algumas páginas HTML. Os requisitos para esse tutorial são:</p>
<ul>
<li>Flash 8, Flash CS3 ou Flash CS4</li>
<li>Conhecimento com interação do Flash com XML</li>
<li>Componente FlashLightBox</li>
</ul>
<h2>Criando o XML</h2>
<p>Vamos começar criando o XML. O arquivo XML irá conter o nome das imagens e a legenda que será exibida. Tanto o arquivo XML quanto as imagens precisam estar no mesmo diretório do arquivo FLA do Flash. Salvem o XML com o nome de <strong>imagens.xml</strong>.</p>
<pre lang="xml"><?xml version="1.0" encoding="utf-8"?>
<imagens>
   <foto>
      <imagem>imagem.jpg</imagem>
      <texto>Moto Ayrton Senna</texto>
   </foto>
   <foto>
      <imagem>imagem1.jpg</imagem>
      <texto>Mclaren do Senna</texto>
   </foto>
   <foto>
      <imagem>imagem2.jpg</imagem>
      <texto>Capacete Senna</texto>
   </foto>
   <foto>
      <imagem>imagem3.jpg</imagem>
      <texto>Ferrari Shumacher</texto>
   </foto>
   <foto>
      <imagem>imagem4.jpg</imagem>
      <texto>Loro</texto>
   </foto>
   <foto>
      <imagem>imagem5.jpg</imagem>
      <texto>Trator do Sítio</texto>
   </foto>
   <foto>
      <imagem>imagem6.jpg</imagem>
      <texto>Carroça antiga</texto>
   </foto>
</imagens></pre>
<h2>Download do Componente FlashLightBox</h2>
<p>Para criar o efeito LightBox vamos usar o Componente que eu desenvolvi. O link para baixar o Componente e instruções de como instalar estão em meu Blog.</p>
<p><a title="Componente FlashLightBox" href="http://www.natanalves.com/blog/flashlightbox" target="_blank">Componente FlashLightBox</a></p>
<h2>Criando a galeria</h2>
<p>Após terem baixado e instalado o Componente, vamos criar um novo arquivo no Flash. Abram o painel de Componentes (Ctrl+F7 ou Window, Components) e joguem para o palco o Componente FlashLightBox, abram o painel Properties e dêem instancia de <strong>flb</strong> para ele. O Componente pode estar posicionado no local que desejar, ele não irá aparecer quando seu arquivo rodar.</p>
<p>Diferentemente das outras galerias que mostrei como criar aqui no MXStudio, nessa galeria não é preciso criar nenhum MovieClip, campo de texto, nem nada. Tudo será criado a partir do ActionScript. Nós vamos carregar as imagens, adicionar uma borda a cada imagem e adicionar uma sombra usando o Filtro DropShadow, cada imagem será dimensionada para um tamanho randomico, assim como sua posição e rotação. Podemos mover as imagens pela tela e para ver a imagem com o tamanho original clicamos duas vezes sobre a imagem para que ela seja revelada com o efeito LightBox.</p>
<p>Vamos as ações da Galeria, quem estiver usando o <strong>ActionScript 2</strong>, copiem e colem essas ações no mesmo frame que o Componente está:</p>
<pre lang="actionscript">/* Importa a Classe do Filtro DropShadow */
import flash.filters.DropShadowFilter;
/* Alinha o arquivo para o canto superior esquerdo */
Stage.align = "TL";
/* Desabilitamos o dimencionamento do arquivo */
Stage.scaleMode = "noScale";
/* Variável que vai ser usada no setInterval */
var intervalo:Number = new Number();
/* Variável usada no duplo clique do mouse */
var count:Number = 0;
/* Variável que armazena o total de itens do XML */
var total:Number = new Number();
/* Criamos um listener */
var listener:Object = new Object();
/* Criamos uma instancia da Classe XML */
var xml:XML = new XML();
/* Ignoramos os espaços em branco */
xml.ignoreWhite = true;
/* Carregamos o arquivo XML */
xml.load("imagens.xml");
/* Ao carregar o arquivo XML */
xml.onLoad = function(ok) {
	/* Se não deu erro */
	if (ok) {
		/* Identificamos o primeiro nó do XML */
		xmlNode = this.firstChild;
		/* Armazena o total de itens do XML */
		total = xmlNode.childNodes.length;
		/* Chama a função carrega */
		carrega();
	} else {
		/* Mostra a mensagem de erro */
		trace("Erro");
	}
}
/* Função que carrega as imagens */
function carrega() {
	/* Criamos um laço para percorrer todos os itens do XML */
	for (var i=0; i<total; i++) {
		/* Criamos um novo MovieClip */
		var mc:MovieClip = this.createEmptyMovieClip("mc"+i, this.getNextHighestDepth());
		/* Criamos um MovieClip que servirá de alvo para carregar a imagem */
		var holder:MovieClip = mc.createEmptyMovieClip("holder", mc.getNextHighestDepth());
		/* Rotacionamos o MovieClip de forma randomica */
		mc._rotation = Math.round(Math.random()*-30)+10;
		/* Armazena o número do nó do XML */
		mc.id = i;
		/* Ao precionar do Mouse no MovieClip */
		mc.onPress = function() {
			/* Jogamos ele pra cima de tudo */
			this.swapDepths(this._parent.getNextHighestDepth());
			/* Incrementamos a variável do duplo clique */
			count++;
			/* Se ela for igual a 1 */
			if (count == 1) {
				/* Movimenta o MovieClip */
				startDrag(this, false);
				/* Iniciamos um intervalo para saber se o usuário irá clicar novamente */
				/* Fazemos isso para saber se é um clique duplo ou não */
				intervalo = setInterval(verifica, 250);
			/* Se a variável for igual a 2 */
			/* Significa que o duplo clique aconteceu */
			} else if (count == 2) {
				/* Zeramos a variável */
				count = 0;
				/* Encerramos o intervalo */
				clearInterval(intervalo);
				/* Chamamos a função carrega do Componente FlashLightBox */
				/* A função recebe o endereço da imagem e o texto para a legenda */
				flb.carrega(xmlNode.childNodes[this.id].childNodes[0].firstChild.nodeValue, xmlNode.childNodes[this.id].childNodes[1].firstChild.nodeValue);
			}
		};
		/* Ao soltar do Mouse */
		mc.onRelease = mc.onReleaseOutside = function() {
			/* Paramos de movimentar o MovieClip */
			this.stopDrag();
		}
		/* Criamos uma instancia da Classe DropShadowFilter */
		var sombra:DropShadowFilter = new DropShadowFilter();
		/* Modiciamos o angulo */
		sombra.angle = 45;
		/* Modificamos o blurX e blurY */
		sombra.blurX = 5;
		sombra.blurY = 5;
		/* Modificamos a distancia */
		sombra.distance = 3;
		/* Modificamos a intencidade da sombra */
		sombra.strength = 0.75;
		/* Criamos um Array que armazena os filtros usados */
		var filtro:Array = new Array();
		/* Adicionamos ao Array a sombra */
		filtro.push(sombra);
		/* Aplica a sombra ao MovieClip */
		mc.filters = filtro;
		/* Criamos uma instancia da Classe MovieClipLoader */
		var loader:MovieClipLoader = new MovieClipLoader();
		/* Carregamos a imagem */
		loader.loadClip(xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue, holder);
		/* Modificamos o tamanho dela randomicamente */
		holder._xscale = (Math.random()*20)+60;
		holder._yscale = holder._xscale;
		/* Modificamos a posição da imagem */
		holder._x = 10;
		holder._y = 10;
		/* Adicionamos um listener a instancia da Classe MovieClipLoader */
		loader.addListener(listener);
	}
}
/* Função chamada caso o usuário não clique duas vezes sobre a imagem */
function verifica() {
	/* Zera a variavel */
	count = 0;
	/* Encerramos o intervalo */
	clearInterval(intervalo);
}
/* Ao carregar a imagem */
listener.onLoadInit = function(alvo:MovieClip) {
	/* Definimos a cor de fundo da borda */
	alvo._parent.beginFill(0xFFFFFF, 100);
	/* Começamos a desenhar a borda de acordo com o tamanho da imagem */
	alvo._parent.lineTo(0, 0);
	alvo._parent.lineTo(0, alvo._height+20);
	alvo._parent.lineTo(alvo._width+20, alvo._height+20);
	alvo._parent.lineTo(alvo._width+20, 0);
	/* Termina de desenhar */
	alvo._parent.endFill();
	/* Modifica a posição do MovieClip de forma randomica */
	alvo._parent._x = Math.round(Math.random()*(Stage.width-alvo._width));
	alvo._parent._y = Math.round(Math.random()*(Stage.height-alvo._height));
}</pre>
<p>Quem estiver usando <strong>ActionScript 3</strong> as ações são essas:</p>
<pre lang="actionscript3">/* Alinha o arquivo para o canto superior esquerdo */
stage.align = StageAlign.TOP_LEFT;
/* Desabilitamos o dimencionamento do arquivo */
stage.scaleMode = StageScaleMode.NO_SCALE;
/* Variavel que armazena o MovieClip selecionado */
var alvo:MovieClip;
/* Variável que armazena a quantidade de itens do XML */
var total:Number = new Number();
/* Criamos uma instancia da Classe XML */
var xml:XML = new XML();
/* Criamos uma instancia da Classe URLLoader */
var arquivo:URLLoader = new URLLoader();
/* Carregamos o XML */
arquivo.load(new URLRequest("imagens.xml"));
/* Adicionamos um event listener chamando a função arquivoOk */
arquivo.addEventListener(Event.COMPLETE, arquivoOk);
/* Função chamada assim que o XML é carregado */
function arquivoOk(event:Event):void {
	/* Armazenamos os dados do XML na instancia da Classe XML */
	xml = new XML(event.target.data);
	/* Armazenamos o total de itens */
	total = xml.foto.length();
	/* Chama a função carrega */
	carrega();
}
/* Função que carrega as imagens */
function carrega() {
	/* Criamos um laço para percorrer todos os itens do XML */
	for (var i=0; i<total; i++) {
		/* Criamos um MovieClip */
		var mc:MovieClip = new MovieClip();
		/* Rotacionamos ele randomicamente */
		mc.rotation = Math.round(Math.random()*-30)+10;
		/* Habilitamos o clique duplo do Mouse */
		mc.doubleClickEnabled = true;
		/* Adicionamos um event listener para quando o mouse for clicado no MovieClip */
		mc.addEventListener(MouseEvent.MOUSE_DOWN, mcPress);
		mc.addEventListener(MouseEvent.MOUSE_UP, mcRelease);
		/* Adicionamos um event listener para o clique duplo */
		mc.addEventListener(MouseEvent.DOUBLE_CLICK, mcDoble);
		/* Armazena o número do nó do XML */
		mc.id = i;
		/* Criamos uma instancia da Classe DropShadowFilter */
		var sombra:DropShadowFilter = new DropShadowFilter();
		/* Modificamos o angulo da sombra */
		sombra.angle = 45;
		/* Modificamos o blurX e blurY */
		sombra.blurX = 5;
		sombra.blurY = 5;
		/* Modificamos a distancia */
		sombra.distance = 3;
		/* Modificamos a intencidade da sombra */
		sombra.strength = 0.75;
		/* Criamos um Array para armazenar os filtros utilizados */
		var filtro:Array = new Array();
		/* Adicionamos no Array a sobra criada */
		filtro.push(sombra);
		/* Adiciona os filtros ao MovieClip */
		mc.filters = filtro;
		/* Criamos uma instancia da Classe Loader */
		var loader:Loader = new Loader();
		/* Desabilitamos o mouse */
		loader.mouseEnabled = false;
		/* Carregamos a imagem */
		loader.load(new URLRequest(xml.foto[i].imagem));
		/* Modificamos o tamanho da imagem randomicamente */
		loader.scaleX = (Math.random()*0.2)+0.6;
		loader.scaleY = loader.scaleX;
		/* Modificamos a posição da imagem */
		loader.x = 10;
		loader.y = 10;
		/* Adicionamos um event listener para saber quando terminou de carregar a imagem */
		loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderOk);
		/* Adiciona a imagem ao MovieClip criado */
		mc.addChild(loader);
		/* Adiciona o MovieClip ao palco */
		addChild(mc);
	}
}
/* Função chamada quando a imagem termina de ser carregada */
function loaderOk(event:Event):void {
	/* Criamos uma referencia para a imagem */
	var loader:Loader = event.target.loader;
	/* Criamos uma referencia ao MovieClip */
	var mc:MovieClip = MovieClip(loader.parent);
	/* Definimos a cor de fundo da borda */
	mc.graphics.beginFill(0xFFFFFF, 1);
	/* Começamos a desenhar a borda no MovieClip de acordo com o tamanho da imagem */
	mc.graphics.lineTo(0, 0);
	mc.graphics.lineTo(0, loader.height+20);
	mc.graphics.lineTo(loader.width+20, loader.height+20);
	mc.graphics.lineTo(loader.width+20, 0);
	/* Termina de desenhar */
	mc.graphics.endFill();
	/* Modifica a posição do MovieClip de forma randomica */
	mc.x = Math.round(Math.random()*(stage.stageWidth-mc.width));
	mc.y = Math.round(Math.random()*(stage.stageHeight-mc.height));
}
/* Função chamada quando clicamos duas vezes sobre a imagem */
function mcDoble(event:MouseEvent):void {
	/* Chamamos a função carrega do Componente FlashLightBox */
	/* A função recebe o endereço da imagem e o texto para a legenda */
	flb.carrega(xml.foto[event.target.id].imagem, xml.foto[event.target.id].texto);
}
/* Função chamada quando clica com o mouse sobre o MovieClip */
function mcPress(event:MouseEvent):void {
	/* Identificamos o alvo */
	alvo = MovieClip(event.target);
	/* Coloca o alvo a frente dos demais MovieClips */
	addChild(alvo);
	/* Movimenta o MovieClip */
	alvo.startDrag();
}
/* Função chamada quando soltamos o botão esquerdo do mouse */
function mcRelease(event:MouseEvent):void {
	/* Paramos de movimentar o MovieClip */
	event.target.stopDrag();
}</pre>
<p>Aqui está um exemplo da galeria funcionando:<br />
<a title="Exemplo da galeria" href="http://www.natanalves.com/mx/imagens3.html" target="_blank">Exemplo galeria</a></p>
<h2>Conclusões</h2>
<p>Chegamos ao fim de mais um tutorial. Um exemplo bem simples de como usar o Componente FlashLightBox e uma oportunidade para aprender a criar uma galeria usando apenas ActionScript.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a title="http://www.natanalves.com" href="http://www.natanalves.com" target="_blank">http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p>Autor: Natan D. Alves – Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO<br />
Qualquer dúvida envie um e-mail para <a title="E-mail" href="mailto:natanalves@mxstudio.com.br" target="_blank">natanalves@mxstudio.com.br</a> ou acesse nosso <a title="Acessem nosso fórum" href="http://www.mxstudio.com.br/forum" target="_blank">fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/galeria-de-imagens-com-xml-e-lightbox/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Google Maps no Flash</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/google-maps-no-flash/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/google-maps-no-flash/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 22:40:03 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Flash CS3]]></category>
		<category><![CDATA[flash cs4]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Google Maps]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2534</guid>
		<description><![CDATA[Olá comundidade. Nesse artigo, irei mostrar para vocês, como usar a API do Google Maps no Flash. Os requisitos para esse tutorial são: Flash CS3 ou Flash CS4 usando ActionScript 3 Conhecimentos em ActionScript 3 Baixando a API Antes de ir para o Flash, precisamos primeiro baixar a API que será usada. Tudo o que [...]]]></description>
			<content:encoded><![CDATA[<p>Olá comundidade.</p>
<p>Nesse artigo, irei mostrar para vocês, como usar a API do Google Maps no Flash. Os requisitos para esse tutorial são:</p>
<ul>
<li>Flash CS3 ou Flash CS4 usando ActionScript 3</li>
<li>Conhecimentos em ActionScript 3</li>
</ul>
<h2>Baixando a API</h2>
<p>Antes de ir para o Flash, precisamos primeiro baixar a API que será usada. Tudo o que precisam fazer é acessar o site da API do Google Maps para o Flash no site do Google Code.</p>
<p><a title="Site da API do Google Maps para Flash" href="http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/" target="_blank">http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/</a></p>
<p>Na página, vocês encontrarão a API através do seguinte link:</p>
<p><a title="Download SDK" href="http://maps.googleapis.com/maps/flash/release/sdk.zip" target="_blank">http://maps.googleapis.com/maps/flash/release/sdk.zip</a></p>
<p>No arquivo ZIP da API, contém duas pastar, uma chamada <em>docs</em>, que contém toda a documentação sobre a API, e uma pasta chamada <em>lib</em>, contendo dois arquivos SWC, um para os usuários do Flex (map_flex_1_9a.swc) e outro para os usuários do Flash (map_1_9a.swc).</p>
<p>Como vamos usar a API no Flash, precisamos copiar o arquivo map_1_9a.swc e jogar na pasta aonde estão os Componentes do Flash. O caminho para os usuários do <strong>Flash CS3</strong> é:</p>
<ul>
<li>(Windows) C:/Arquivos de Programas/Adobe/Adobe Flash CS3/<em>linguagem/</em>Configuration/Components</li>
<li>(Mac OS X) Macintosh HD/Applications/Adobe Flash CS3/Configuration/Components</li>
</ul>
<div>Onde <em>linguagem</em> é o nome da pasta da linguagem na qual o Flash foi instalado. Para os usuários do <strong>Flash CS4</strong> o caminho é um pouco diferente:</div>
<ul>
<li>(Windows) C:/Arquivos de Programas/Adobe/Adobe Flash CS4/Common/Configuration/Components</li>
<li>(Mac OS X) Macintosh HD/Applications/Adobe Flash CS4/Common/Configuration/Components</li>
</ul>
<p>Antes de colar o arquivo, criem uma pasta com o nome de Google Maps no diretório Components, para manter seu painel de Componentes organizado.</p>
<p>A última coisa que precisaremos fazer antes de ir ao Flash, é gerar uma chave para usar a API. A chave é gerada para os usuários que possuem alguma conta no Google. Para gerar a chave, acessem a página:</p>
<p><a title="Endereço para criação da chave API" href="http://code.google.com/intl/pt-BR/apis/maps/signup.html" target="_blank">http://code.google.com/intl/pt-BR/apis/maps/signup.html</a></p>
<p>Na página, vocês precisam Ler e concordar com os termos e condições do Google, e digitar o endereço do site no qual irá usar o Google Maps. Após ter digitado o seu site, uma chave será criada. Essa chave será usada no ActionScript.</p>
<h2>Indo pro Flash</h2>
<p>Chegou a hora de ir para o Flash. Criem um arquivo em ActionScript 3, abram o painel Components e joguem o Componente Google Maps Library para o palco. Se quiserem, podem remover o componente do palco pois não há necessidade de mante-lo já que criaremos o mapa através do ActionScript 3.</p>
<p>Para esse tutorial, criaremos um exemplo básico do Google Maps, exibindo os controles de Zoom e tipos de mapa e iniciando o mapa através de uma localização usando Latitude e Longitude. Copiem e colem as seguintes ações no frame no qual desejam que o mapa apareça.</p>
<pre lang="actionscript3">/* Importa as Classes necessárias */
import com.google.maps.Map;
import com.google.maps.MapEvent;
import com.google.maps.MapType;
import com.google.maps.LatLng;
import com.google.maps.controls.MapTypeControl;
import com.google.maps.controls.ZoomControl;
import com.google.maps.overlays.Marker;
/* Criamos uma instancia da Classe Map */
var map:Map = new Map();
/* Inserimos nossa chave */
map.key = "SUA CHAVE AQUI";
/* Definimos um tamanho para o Mapa */
map.setSize(new Point(stage.stageWidth, stage.stageHeight));
/* Adiciona o controle de zoom */
map.addControl(new ZoomControl());
/* Adiciona o controle de tipo de mapa */
map.addControl(new MapTypeControl());
/* Adiciona o Mapa ao palco */
this.addChild(map);
/* Adicionamos um eventListener chamando o evento MAP_READY */
/* Esse evento será disparado quando o Mapa estiver pronto para ser exibido */
/* O evento chama a função mapOk */
map.addEventListener(MapEvent.MAP_READY, mapOk);
/* Função chamada pelo evento MAP_READY */
function mapOk(event:MapEvent):void {
	/* Criamos uma instancia da Classe Marker */
	/* Passamos o local no qual queremos que o mapa esteja marcado */
	/* O local é passado usando Latitude e Longitude */
	var marca:Marker = new Marker(new LatLng(-23.5635963, -46.6538854));
	/* Adiciona a marca ao Mapa */
	map.addOverlay(marca);
	/* Centraliza o Mapa de acordo com a posição desejada */
	map.setCenter(new LatLng(-23.5635963, -46.6538854), 16, MapType.NORMAL_MAP_TYPE);
}</pre>
<h2>Vídeo tutorial</h2>
<p>Não se esqueçam de inserir a chave que foi criada na linha número 12 do ActionScript, a chave precisa estar entre aspas para que não aconteça nenhum erro.</p>
<p>Pra quem quiser, pode ver o vídeo desse tutorial. É a primeira vez que faço um vídeo tutorial, e espero poder fazer sempre em todos os meus futuros tutoriais.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/IilhyIk3bQk&amp;hl=pt-br&amp;fs=1&amp;" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/IilhyIk3bQk&amp;hl=pt-br&amp;fs=1&amp;" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<h2>Considerações Finais</h2>
<p>Com apenas algumas linhas do ActionScript, conseguimos criar usar o mapa de maneira fácil e sem complicação. Existem outros exemplos de como usar a API na própria página do Google Maps para o Flash.</p>
<p><a title="Exemplos Google Maps" href="http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/examples/index.html" target="_blank">http://code.google.com/intl/pt-BR/apis/maps/documentation/flash/examples/index.html</a></p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a title="http://www.natanalves.com" href="http://www.natanalves.com/" target="_blank">http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p><strong>Autor: Natan D. Alves &#8211; Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</strong></p>
<p>Qualquer dúvida envie um e-mail para <a title="E-mail" href="mailto:natanalves@mxstudio.com.br">natanalves@mxstudio.com.br</a> ou acesse nosso <a title="Acessem nosso fórum" href="http://www.mxstudio.com.br/forum" target="_blank">fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/google-maps-no-flash/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>Galeria de Imagens 2 ActionScript 3</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/galeria_imagens_2_as3/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/galeria_imagens_2_as3/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 01:39:33 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash CS3]]></category>
		<category><![CDATA[flash cs4]]></category>
		<category><![CDATA[galeria]]></category>
		<category><![CDATA[imagens]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=2117</guid>
		<description><![CDATA[Olá Comunidade do MXStudio, nesse meu primeiro tutorial de 2009 irei mostrar a vocês como criar uma Galeria de Imagens com miniaturas usando XML e ActionScript 3. Um tempo atrás fiz a mesma galeria só que usava ActionScript 2, e já recebi diversos E-mails pedindo um tutorial do mesmo tipo usando o ActionScript 3. Quem [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Comunidade do MXStudio, nesse meu primeiro tutorial de 2009 irei mostrar a vocês como criar uma Galeria de Imagens com miniaturas usando XML e ActionScript 3.</p>
<p>Um tempo atrás fiz a mesma galeria só que usava ActionScript 2, e já recebi diversos E-mails pedindo um tutorial do mesmo tipo usando o ActionScript 3. Quem estiver interesse em fazer o tutorial usando ActionScript 2, segue o link do tutorial.</p>
<p><a title="Tutorial Galeria de Imagens 2 ActionScript 2" href="http://www.mxstudio.com.br/flash/galeria_de_imagens_com_xml_2/" target="_blank">http://www.mxstudio.com.br/flash/galeria_de_imagens_com_xml_2/</a></p>
<p>Os pré-requisitos para esse tutorial são:</p>
<ul>
<li>Flash CS3 ou Flash CS4 usando ActionScript 3</li>
<li>Conhecimento com interação do Flash com XML</li>
</ul>
<h2>Criando o XML</h2>
<p>Vamos começar pelo arquivo XML. O arquivo XML irá conter o nome das imagens que vão ser usadas como miniatura e da imagem grande, além da legenda que será exibida. Tanto o arquivo XML quanto as imagens precisam estar no mesmo diretório do arquivo FLA do Flash. Salvem o arquivo XML com o nome de <strong>imagens.xml</strong>.</p>
<pre lang="xml"><?xml version="1.0" encoding="utf-8"?>
<imagens>
    <foto>
        <imagemG>imagem.jpg</imagemG>
	<imagemP>imagemp.jpg</imagemP>
        <texto>Moto Ayrton Senna</texto>
    </foto>
    <foto>
        <imagemG>imagem1.jpg</imagemG>
	<imagemP>imagemp1.jpg</imagemP>
        <texto>Mclaren do Senna</texto>
    </foto>
    <foto>
        <imagemG>imagem2.jpg</imagemG>
	<imagemP>imagemp2.jpg</imagemP>
        <texto>Capacete Senna</texto>
    </foto>
    <foto>
        <imagemG>imagem3.jpg</imagemG>
	<imagemP>imagemp3.jpg</imagemP>
        <texto>Ferrari Shumacher</texto>
    </foto>
    <foto>
        <imagemG>imagem4.jpg</imagemG>
	<imagemP>imagemp4.jpg</imagemP>
        <texto>Loro</texto>
    </foto>
    <foto>
        <imagemG>imagem5.jpg</imagemG>
	<imagemP>imagemp5.jpg</imagemP>
        <texto>Trator do Sítio</texto>
    </foto>
    <foto>
        <imagemG>imagem6.jpg</imagemG>
	<imagemP>imagemp6.jpg</imagemP>
        <texto>Carroça antiga</texto>
    </foto>
</imagens></pre>
<h2>Criando a Galeria</h2>
<p>Vamos para o Flash montar nosso layout. Criem um arquivo em ActionScript 3 e o tamanho do palco de 550&#215;550. Recomendo que criem as seguintes camadas para deixar o layout mais organizado.</p>
<p><img title="Disposição das camadas" src="http://www.mxstudio.com.br/imagens_artigos/natanalves_dez06_GaleriaImagens2_imagens/galeria4.jpg" alt="Disposição das camadas" width="237" height="180" /></p>
<p>Na camada ScrollBar, usaremos o ScrollBar criado por um de nossos colunistas de Flash, o Hugo Ferreira da Silva. Basta seguir o tutorial que ele fez, mudando o layout do ScrollBar para ficar na horizontal. Segue o link do tutorial:</p>
<p><a href="http://www.mxstudio.com.br/views.tutorial.php?act=view&#038;cid=3&#038;aid=650" title="Link tutorial ScrollBar" target="_blank">ScrollBar para MovieClips e TextFields</a></p>
<p>Além da mudança do layout, vamos modificar o ActionScript, pois o tutorial foi feito ActionScript 2, e com essas ações não irá funcionar. Por isso, utilizem as seguintes ações:</p>
<pre lang="actionscript">/* Importamos a Classe Tween */
import fl.transitions.Tween;
import fl.transitions.easing.*;
/* Variável para o intervalo */
var intervalo:Number = new Number();
/* Variáveis booleanas para saber quando o Scroll está indo para direita ou esquerda */
var esquerda:Boolean;
var direita:Boolean;
/* Variável que recebe o tamanho da mascara para o Scroll */
var mascara:Number;
/* Variável que armazena o alvo a ser movido */
var alvo = parent[alvo];
/* Variável que armazena a posição inicial do alvo */
var sy:Number = alvo.x;
/* Variável que armazena o width do track do ScrollBar */
var track_width:Number;
/* Mínimo valor em que o MovieClip track pode se movimentar no eixo X */
var minx:Number = Math.round(track.x);
/* Máximo valor em que o MovieClip track pode se movimentar no eixo X */
var maxx:Number = Math.round(track.x+track.width-pan.width);
/* Adicionamos um eventListener para o MovieClip pan */
/* Usaremos o evento de mouse MOUSE_DOWN chamando a função panPress */
/* Esse evento é equivalente ao onPress no ActionScript 2 */
pan.addEventListener(MouseEvent.MOUSE_DOWN, panPress);
/* Adicionamos um eventListener para o MovieClip track */
/* Usaremos o evento de mouse MOUSE_DOWN chamando a função trackPress */
/* Esse evento é equivalente ao onPress no ActionScript 2 */
track.addEventListener(MouseEvent.MOUSE_DOWN, trackPress);
/* Adicionamos um eventListener para o MovieClip bt_esq */
/* Usaremos o evento de mouse MOUSE_DOWN chamando a função btEsqPress */
/* Esse evento é equivalente ao onPress no ActionScript 2 */
bt_esq.addEventListener(MouseEvent.MOUSE_DOWN, btEsqPress);
/* Adicionamos um eventListener para o MovieClip bt_esq */
/* Usaremos o evento de mouse MOUSE_UP chamando a função btEsqRelease */
/* Esse evento é equivalente ao onRelease no ActionScript 2 */
bt_esq.addEventListener(MouseEvent.MOUSE_UP, btEsqRelease);
/* Adicionamos um eventListener para o MovieClip bt_dir */
/* Usaremos o evento de mouse MOUSE_DOWN chamando a função btDirPress */
/* Esse evento é equivalente ao onPress no ActionScript 2 */
bt_dir.addEventListener(MouseEvent.MOUSE_DOWN, btDirPress);
/* Adicionamos um eventListener para o MovieClip bt_dir */
/* Usaremos o evento de mouse MOUSE_UP chamando a função btDirRelease */
/* Esse evento é equivalente ao onRelease no ActionScript 2 */
bt_dir.addEventListener(MouseEvent.MOUSE_UP, btDirRelease);
/* Função panPress disparada pelo eventListener do MovieClip pan */
function panPress(event:MouseEvent) {
	/* Definimos um limite para movimentar o MovieClip pan */
	var limite:Rectangle = new Rectangle(minx, pan.y, maxx-minx, pan.y);
	/* Inicia o drag dentro do limite */
	pan.startDrag(false, limite);
	/* Adicionamos um listener ao palco (stage) para disparar a função panRelease */
	/* Usa esse listener no palco, pois o ActionScript 3 não possui o evento onReleaseOutside */
	/* E por isso precisa adicionar um evento MOUSE_UP ao palco */
	/* Pois somente assim tem como verificar se aconteceu um onReleaseOutside */
	/* E mesmo que o usuário mantenha o mouse sobre o MovieClip será disparada essa função */
	stage.addEventListener(MouseEvent.MOUSE_UP, panRelease);
}
/* Função panRelease disparada pelo eventListener do stage */
function panRelease(event:MouseEvent) {
	/* Verifica se o alvo não é o MovieClip pan */
	if (event.target.name != pan) {
		/* Remove o eventListener do stage */
		stage.removeEventListener(MouseEvent.MOUSE_UP, panRelease);
	}
	/* Para o drag do MovieClip pan */
	pan.stopDrag();
}
/* Função trackPress disparada pelo eventListener do MovieClip track */
function trackPress(event:MouseEvent) {
	/* Move o MovieClip pan */
	pan.x = mouseX-pan.width/2;
	/* Se o MovieClip pan passar do valor máximo volta para o máximo */
	if (pan.x >= maxx) {
		/* Mantém o MovieClip pan na posição máxima */
		pan.x = maxx;
	}
	/* Se o MovieClip pan passar do valor mínimo */
	if (pan.x <= minx) {
		/* Mantém o MovieClip pan na posição mínima */
		pan.x = minx;
	}
}
/* Função btEsqPress disparada pelo eventListener do MovieClip bt_esq */
function btEsqPress(event:MouseEvent) {
	/* Diz que o MovieClip está se movendo para a esquerda */
	esquerda = true;
	/* Diz que o MovieClip não está se movendo para direita */
	direita = false;
}
/* Função btEsqRelease disparada pelo eventListener do MovieClip bt_esq */
function btEsqRelease(event:MouseEvent) {
	/* Diz que não há movimento do MovieClip */
	esquerda = false;
	direita = false;
}
/* Função btDirPress disparada pelo eventListener do MovieClip bt_dir */
function btDirPress(event:MouseEvent) {
	/* Diz que o MovieClip não está se movendo para esquerda */
	esquerda = false;
	/* Diz que o MovieClip está se movendo para a direita */
	direita = true;
}
/* Função btDirRelease disparada pelo eventListener do MovieClip bt_dir */
function btDirRelease(event:MouseEvent) {
	/* Diz que não há movimento do MovieClip */
	esquerda = false;
	direita = false;
}
/* Usaremos o setInterval para realizar o movimento do nosso alvo */
/* A cada 100 milesegundos chama a função mover */
intervalo = setInterval(mover, 100);
/* Função chamada pelo setInterval para realizar o movimento do alvo */
function mover() {
	/* Se o movimento é no sentido esquerdo */
	if (esquerda) {
		/* Verifica se não chegou a posição mínima */
		if (pan.x-1 > minx) {
			/* Movimenta o MovieClip pan */
			pan.x -= 10;
		} else {
			/* Mantém ele na posição mínima */
			pan.x = minx;
		}
	}
	/* Se o movimento é no sentido direito */
	if (direita) {
		/* Verifica se não chegou a posição máxima */
		if (pan.x+1 < (maxx-minx)) {
			/* Movimenta o MovieClip pan */
			pan.x += 10;
		} else {
			/* Mantém ele na posição máxima */
			pan.x = maxx;
		}
	}
	/* Calcula o movimento para mover o MovieClip alvo */
	var s:Number = ((pan.x-minx)/(maxx-minx))*100;
	var p:Number = (alvo.width-mascara)/100;
	/* Realiza o movimento do alvo */
	var teste:Tween = new Tween(alvo, "x", Back.easeOut, alvo.x, sy-(p*s), 1, true);
}</pre>
<p>Precisamos dizer algumas coisas ao ScrollBar criado, quem ele deve mover, o tamanho da barra e o tamanho da mascara. Deixaremos igual a essa imagem:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/natanalves_dez06_GaleriaImagens2_imagens/galeria7.jpg" alt="Parametros ScrollBar" /></p>
<p>Reparem uma coisa. Criei o scrollBar com largura de 450, então devo deixar o campo Altura da Mascara com o tamanho do ScrollBar. O campo Alvo preenchemos com o MovieClip que queremos que faça o scroll, e Altura da Barra, pode até deixar em branco que não vai influenciar em nada para nós.</p>
<p>Com o ScrollBar criado, vamos criar um MovieClip em branco, esse MovieClip será usado para receber os MovieClips que vão ser importados da biblioteca. Para criar um MovieClip em branco, basta ir no menu Insert, New Symbol. Coloquem esse MovieClip na camada Recebe e dêem instancia de <strong>recebe</strong>.</p>
<p>Desenhem no palco usando a ferramente Rectangle Tool um retangulo do tamanho que preferirem, esse retangulo vai ser a máscara para os MovieClips com as imagens em miniatura. Transformem esse retangulo em MovieClip (selecionem ele e apertem F8) e dêem instancia de <strong>mascara</strong>. Coloquem esse MovieClip na camada Máscara.</p>
<p>Por fim, desenhem um quadrado do tamanho que desejarem, esse quadrado vai ser a borda que vai ser formada em volta da imagem grande carregada. Transforme essa borda em um MovieClip (selecionem ele e apertem F8). Uma coisa super importante, esse MovieClip precisa ter o ponto de registro no meio, pois só assim ele irá crescer do centro para fora. A imagem abaixo mostra:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/natanalves_dez06_GaleriaImagens2_imagens/galeria2.jpg" alt="MovieClip borda" /></p>
<p>Dêem instancia de <strong>borda</strong> a esse MovieClip e o posicionem na camada Conteudo. Ainda nessa camada, iremos criar um campo de texto dinamico com instancia de <strong>porcento</strong>, esse campo é que vai mostrar a porcentagem carregada da imagem maior. Desenhem uma barrinha e a transformem em MovieClip, dêem instancia de <strong>preloader</strong>. Essa barrinha irá mostrar o quanto a imagem foi carregada. E para terminar o layout, criem mais um MovieClip em branco e dêem instancia de <strong>holder</strong>. O meu layout ficou assim:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/natanalves_dez06_GaleriaImagens2_imagens/galeria3.jpg" alt="Layout galeria" /></p>
<p>Para terminar, precisamos criar mais um MovieClip, esse MovieClip será importado da biblioteca e irá carregar a imagem em miniatura. Só que antes de criarmos esse MovieClip, vamos criar um arquivo .as. Esse arquivo as irá ter as ações necessárias para criar um preloader para as imagens em miniaturas. Para criar esse arquivo AS, basta ir em File, New e selecionar a opção ActionScript File. Colem as seguintes ações nesse arquivo:</p>
<pre lang="actionscript">package {
	/* Importa as Classes usadas */
	import flash.display.MovieClip;
	import flash.events.ProgressEvent;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.net.URLRequest;
	/* Criamos nossa Classe */
	public class preloaderPequeno extends MovieClip {
		/* Criamos uma instancia da Classe Loader */
		var loader:Loader = new Loader;
		/* Função publica que será iniciada a cada item importado da biblioteca */
		public function preloaderPequeno() {
			/* Desabilitamos evento de Mouse para o Loader */
			loader.mouseEnabled = false;
			/* Inserimos o Loader dentro do MovieClip alvo */
			this.alvo.addChild(loader);
		}
		/* Função publica para carregar a imagem pequena */
		public function carrega(arquivo:String):void {
			/* Carregamos o arquivo a partir da URL enviada */
			loader.load(new URLRequest(arquivo));
			/* Adicionamos um eventListener a instancia da Classe Loader */
			/* Esse listener irá disparar a função progressoEvento */
			/* Até que terminar de carregar a imagem pequena */
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressoEvento);
			/* Adicionamos um eventListener a instancia da Classe Loader */
			/* Esse listener irá disparara a função completo quando terminar de carregar a imagem */
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completo);
		}
		/* Função disparada pelo eventListener para indicar o progresso do carregamento da imagem */
		private function progressoEvento(event:ProgressEvent):void {
			/* Variável para saber quanto foi carregado */
			var carregado:Number = event.bytesLoaded;
			/* Variável para saber qual o tamanho da imagem */
			var total:Number = event.bytesTotal;
			/* Escalonamos no eixo Y o MovieClip barra */
			this.barra.scaleY = carregado/total;
		}
		/* Função disparada pelo eventListener ao terminar de carregar a imagem pequena */
		private function completo(event:Event):void {
			/* Esconde o MovieClip barra */
			this.barra.visible = false;
		}
	}
}</pre>
<p>Salvem esse arquivo com o nome de <strong>preloaderPequeno.as</strong> e deixem ele no mesmo local de seu arquivo FLA.</p>
<p>Com a Classe criada, vamos a criação do MovieClip. Vão no menu Insert e selecionem Insert New Symbol. Na janela que aparecer, façam como mostra a imagem:</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2009/01/galeria8.jpg" alt="MovieClip pequeno" /></p>
<p>Vou explicar o porque disso. No campo Class, nós definimos um nome de Classe a ser usado para esse MovieClip. No ActionScript 2 nós identificamos um símbolo na biblioteca pelo campo Identifier, já no ActionScript 3 cada símbolo possui uma Classe. Além dessa Classe, podemos definir um Base Class, ou Classe de base. Essa Classe de base é uma Classe que será usada como base para nosso arquivo, onde podemos definir eventos, manipular valores, etc. Por padrão, a Classe base de um MovieClip é a Classe MovieClip do Flash, mas nós usaremos a nossa Classe criada acima.</p>
<p>Clicando em Ok, vamos criar nosso MovieClip. Mais uma vez para deixar mais organizado, criei três camadas dentro desse MovieClip, alvo, barra e fundo. Na camada alvo criem um MovieClip em branco e dêem instancia de <strong>alvo</strong>. Na camada barra, criem um quadrado do tamanho que desejar, tranformem em MovieClip e o instancie de <strong>barra</strong>, essa barra irá servir de preloader para a imagem pequena. E por fim na camada fundo, desenhem um quadrado do tamanho que desejar para ser a borda que vai ser exibida ao redor da imagem pequena. O meu MovieClip ficou assim:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/natanalves_dez06_GaleriaImagens2_imagens/galeria6.jpg" alt="MovieClip pequeno" /></p>
<p>O tamanho do fundo e da barra é livre. Eu desenhei o fundo um pouco maior que o tamanho das imagens em miniaturas, e o MovieClip barra possui o tamanho exato das imagem em miniatura.</p>
<p>Com nossos objetos criados e instanciados corretamente, vamos ao ActionScript da galeria. Voltem ao palco principal, no primeiro frame da camada Actions, insiram as seguintes ações:</p>
<pre lang="actionscript">/* Importamos a Classe Tween */
import fl.transitions.Tween;
import fl.transitions.easing.*;
/* Mascaramos o MovieClip recebe */
recebe.mask = mascara;
/* Importamos os eventos da Classe Tween */
import fl.transitions.TweenEvent;
/* Variável para saber qual a foto atual */
var atual:Number = new Number();
/* Variável para saber qual o número de itens do XML */
var total:Number = undefined;
/* Variável booleana para saber se terminou de carregar a imagem */
var carregado:Boolean = false;
/* Criamos uma instancia para a Classe Loader */
var loader:Loader = new Loader();
/* Criamos uma instancia para a Classe XML */
var dadosXML:XML = new XML();
/* Criamos uma instancia para a Classe URLLoader */
var xmlLoader:URLLoader = new URLLoader();
/* Adicionamos um eventListener para a instancia da Classe URLLoader */
/* Esse listener será disparado quando carregar o arquivo XML */
/* O listener irá chamar a função monta */
xmlLoader.addEventListener(Event.COMPLETE, monta);
/* Carrega o arquivo XML */
xmlLoader.load(new URLRequest("imagens.xml"));
/* Função disparada quando terminar de carregar o XML */
function monta(event:Event) {
	/* Armazena o XML */
	dadosXML = new XML(event.target.data);
	/* Armazena o total de nós foto do XML */
	total = dadosXML.foto.length();
	/* Chama a função montaPequeno */
	montaPequeno();
	/* Chama a função carregaImagem */
	/* Passa como parametro o primeiro no do XML */
	carregaImagem(0);
	/* Modifica a variável atual para 0 */
	atual = 0;
}
/* Função montaPequeno que irá criar e colocar no palco as miniaturas */
function montaPequeno() {
	/* Para cada item do XML */
	for (var i = 0; i<total; i++) {
		/* Importamos o MovieClip pequeno da biblioteca */
		var mc:MovieClip = new pequeno();
		/* Desabilitamos evento de mouse para o MovieClip alvo */
		mc.alvo.mouseEnabled = false;
		/* Desabilitamos evento de mouse para o MovieClip barra */
		mc.barra.mouseEnabled = false;
		/* Habilita a maozinha de link para nosso MovieClip */
		mc.buttonMode = true;
		/* Adiciona um eventListener para o MovieClip */
		/* Usaremos o evento CLICK da Classe MouseEvent */
		/* O listener irá chamar a função mcPress quando clicarmos no MovieClip */
		mc.addEventListener(MouseEvent.CLICK, mcPress);
		/* Chama a função carrega passando o endereço da imagem a ser carregada */
		mc.carrega(dadosXML.foto.imagemP[i]);
		/* Adicionamos nosso MovieClip ao MovieClip recebe */
		recebe.addChild(mc);
		/* Posicionamos o MovieClip na posição correta */
		mc.x = i*mc.width+i*10;
		/* Armazena o índice do MovieClip */
		mc.imagem = i;
	}
	/* Verificamos se o ScrollBar é menor que o MovieClip recebe */
	if (recebe.width<=scrollBar.width) {
		/* Se for menor esconde o scrollBar */
		scrollBar.visible = false;
	} else {
		/* Se for maior mostramos o scrollBar */
		scrollBar.visible = true;
	}
}
/* Ao clicar na imagem pequena */
function mcPress(event:MouseEvent) {
	/* Se a variável carregado for igual a true */
	if (carregado == true) {
		/* Carregamos a Imagem selecionada */
		carregaImagem(event.target.imagem);
		/* Atualiza o valor da variável atual */
		atual = event.target.imagem;
		/* Carregado igual a falso */
		carregado = false;
		/* Apagamos o texto */
		texto.text = "";
	}
}
/* Função para carregar a Imagem grande */
function carregaImagem(arquivo) {
	/* Deixamos o MovieClip preloader com scaleX igual a zero  */
	preloader.scaleX = 0;
	/* Mostramos o MovieClip preloader */
	preloader.visible = true;
	/* Modifica o alpha do MovieClip holder */
	holder.alpha = 0;
	/* Descarrega qualquer conteúdo da instancia da Classe Loader */
	loader.unload();
	/* Adiciona um eventListener para a instancia da Classe Loader */
	/* Esse listener irá disparar quando terminar de carregar a imagem */
	/* Quando carregar, chama a função loadInit */
	loader.contentLoaderInfo.addEventListener(Event.INIT, loadInit);
	/* Adiciona um eventListener para a instancia da Classe Loader */
	/* Esse listener será disparado enquanto estiver carregando a imagem */
	/* Enquanto carrega chama a função loadProgress */
	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
	/* Carrega a imagem grande */
	loader.load(new URLRequest(dadosXML.foto.imagemG[arquivo]));
	/* Adiciona o Loader ao MovieClip holder */
	holder.addChild(loader);
}
/* Função que será disparada enquanto estiver carregando a imagem grande */
function loadProgress(event:ProgressEvent) {
	/* Variável para saber quanto carregou da imagem */
	var carregado:Number = event.bytesLoaded;
	/* Variável para saber qual o tamanho da imagem */
	var tamanho:Number = event.bytesTotal;
	/* Escalona o MovieClip preloader no eixo X */
	preloader.scaleX = carregado/tamanho;
	/* Exibe a porcentagem carregada */
	porcento.text = Math.round(carregado/tamanho*100)+"%";
}
/* Função que será disparada quando terminar de carregar a imagem grande */
function loadInit(event:Event) {
	/* Iremos aumentar o MovieClip borda para o mesmo tamanho do MovieClip holder */
	/* Somaremos +16 pixels para criar uma borda */
	var tww:Tween = new Tween(borda, "width", Back.easeOut, borda.width, holder.width+16, 1, true);
	var twh:Tween = new Tween(borda, "height", Back.easeOut, borda.height, holder.height+16, 1, true);
	/* Movemos o MovieClip holder no eixo x e y de acordo com a posição do MovieClip borda */
	var twhx:Tween = new Tween(holder, "x", Back.easeOut, holder.x, borda.x-holder.width/2, 1, true);
	var twhy:Tween = new Tween(holder, "y", Back.easeOut, holder.y, borda.y-holder.height/2, 1, true);
	/* Movemos o MovieClip mascara de acordo com a posição do MovieClip borda */
	var twma:Tween = new Tween(mascara, "y", Back.easeOut, mascara.y, (borda.y+holder.height/2)+16, 1, true);
	/* Movemos o MovieClip recebe de acordo com a posição do MovieClip borda */
	var twr:Tween = new Tween(recebe, "y", Back.easeOut, recebe.y, (borda.y+holder.height/2)+16, 1, true);
	/* Movemos o ScrollBar de acordo com a posição do MovieClip borda e do MovieClip recebe */
	var twsP:Tween = new Tween(scrollBar, "y", Back.easeOut, scrollBar.y, (borda.y+holder.height/2)+recebe.height+22, 1, true);
	/* Movemos o campo de texto de acordo com a posição do MovieClip borda e do MovieClip recebe */
	var twtxt:Tween = new Tween(texto, "y", Back.easeOut, texto.y, (borda.y+holder.height/2)+recebe.height+47, 1, true);
	/* Adiciona a legenda ao campo de texto dinamico */
	texto.text = dadosXML.foto.texto[atual];
	/* Adicionamos um eventListener a instancia da Classe Tween */
	/* Esse listener será disparado quando terminar de animar o MovieClip holder no eixo X */
	/* Quando for disparado irá chamar a função twhxFinished */
	twhx.addEventListener(TweenEvent.MOTION_FINISH, twhxFinished);
}
/* Função que será chamada quando terminar de animar o MovieClip holder */
function twhxFinished(event:TweenEvent):void {
	/* Esconde o MovieClip preloader */
	preloader.visible = false;
	/* Apaga o texto do campo de texto dinamico */
	porcento.text = "";
	/* Anima o MovieClip holder */
	var twha:Tween = new Tween(holder, "alpha", Regular.easeOut, 0, 1, 1, true);
	/* Adicionamos um eventListener a instancia da Classe Tween */
	/* Esse listener será disparado quando terminar de animar o alpha do MovieClip holder */
	/* Quando for disparado irá chamar a função twhaFinished */
	twha.addEventListener(TweenEvent.MOTION_FINISH, twhaFinished);
}
/* Função que será chamada quando terminar de animar o alpha do MovieClip holder */
function twhaFinished(event:TweenEvent):void {
	/* Muda a variável carregado para true */
	carregado = true;
}</pre>
<p><a href="http://www.natanalves.com/mx/imagens2_as3.html" target="_blank" title="Exemplo galeria funcionando">Exemplo galeria funcionando</a></p>
<h2>Considerações Finais</h2>
<p>Hoje vimos como criar uma galeria de imagens com XML usando ActionScript 3. Mais uma vez peguei um tutorial que desenvolvi em ActionScript 2 e passei para ActionScript 3, e posso dizer a vocês que se aprende e muito fazendo essa migração, pois nem sempre a migração é feita de maneira fácil, temos que buscar alguma solução, tentar criar algo melhor, etc. Fica a dica, peguem seus aplicativos de ActionScript 2 e tentem passar para o ActionScript 3, vocês vão ver que se aprende bastante com isso.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a href="http://www.natanalves.com" title="http://www.natanalves.com" target="_blank" >http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p><strong>Autor: Natan D. Alves - Moderador do Fórum de Flash &#038; ActionSctipt MXSTUDIO</strong></p>
<p>Qualquer dúvida envie um e-mail para <a href="mailto:natanalves@mxstudio.com.br" title="E-mail" >natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://www.mxstudio.com.br/forum" target="_blank" title="Acessem nosso fórum" >fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/galeria_imagens_2_as3/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Criando janelas personalizadas</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/adobe-air/criando-janelas-personalizadas/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/adobe-air/criando-janelas-personalizadas/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 22:57:55 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash CS3]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1615</guid>
		<description><![CDATA[Nesse meu segundo tutorial sobre o Adobe AIR, irei mostrar como criar um aplicativo usando uma janela personalizada. Nessa janela, poderemos minimizar, maximizar, fechar e mover o aplicativo usando um layout personalizado, diferente das janelas padrões dos Sistemas Operacionais.]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Nesse meu segundo tutorial sobre o Adobe AIR, irei mostrar como criar um aplicativo usando uma janela personalizada. Nessa janela, poderemos minimizar, maximizar, fechar e mover o aplicativo usando um layout personalizado, diferente das janelas padrões dos Sistemas Operacionais.</p>
<p>Pré-requisitos para esse tutorial:</p>
<ul>
<li>Flash CS3 com atualização para o Adobe AIR</li>
<li>Adobe AIR</li>
</ul>
<p>Para os que não sabem como instalar o Adobe AIR no seu computador ou atualizar o Flash, nesse tutorial eu mostro como fazer.</p>
<p><a href="http://www.mxstudio.com.br/adobe-air/criando-aplicativos-air-no-flash-cs3">http://www.mxstudio.com.br/adobe-air/criando-aplicativos-air-no-flash-cs3</a></p>
<h2>Criando sua janela</h2>
<p>A criação da janela é livre, criem o desing que bem preferirem. Para esse tutorial irei usar o visual das janelas dos Mac OS da Apple. Comecei com um palco com dimenções de 540&#215;340, desenhei três retangulos, um servirá como o topo da janela, outro será a área do conteúdo e o terceiro o rodapé da janela (como se fosse a barra de status). Selecionem os três retangulos e os coloquem em um MovieClip com <strong>instancia de janela</strong>. O MovieClip que criei ficou menor que o tamanho original do palco, pois decidi usar o filtro Glow para dar um efeito mais legal a janela.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/07/janela1.jpg" alt="Janela aplicativo" width="436" height="284" /></p>
<p>No palco, criem seus botões de Fechar, Minimizar e Maximizar, dêem <strong>instancia de fechar, minimizar e maximizar respectivamente</strong>. Criem um campo de texto para ser usado como título de nossa janela, dêem <strong>instancia de campo</strong> a esse campo de texto. E por último, criem um MovieClip que será usado para dimencionar a nossa janela, dêem <strong>instancia de aumentar</strong>.</p>
<p>A minha janela personalizada ficou assim:</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/07/janela2.jpg" alt="Janela pronta" width="435" height="284" /></p>
<h2>Programando sua janela</h2>
<p>Com nossa janela criada, vamos ao ActionScript, tirando a parte em que a janela é maximizada ou dimencionada a programação é bem tranquila. Coloquem as seguintes ações no primeiro frame de seu arquivo:</p>
<pre lang="actionscript3">/* Importamos a Classe */
import flash.desktop.NativeApplication;
/* Deixamos o conteúdo para ser alinhado no canto esquerdo superior */
stage.align = StageAlign.TOP_LEFT;
/* Manteremos a proporção do palco */
stage.scaleMode = StageScaleMode.NO_SCALE;
/* Variável para saber se a janela está Maximizada ou não */
var clicado:Boolean = false;
/* Posição inical do MovieClip janela */
var espaco:Number = janela.x;
/* Variável que armazena tamanho mínimo para o aplicativo */
var tamMin:Point = new Point(stage.stageWidth, stage.stageHeight);
/* Determinamos o tamanho mínimo do site */
stage.nativeWindow.minSize = tamMin;
/* Criamos um Listener para saber quando a janela será modifica */
stage.nativeWindow.addEventListener(NativeWindowBoundsEvent.RESIZE, modifica);
/* Criamos um Listener que será disparado quando clicar sobre a janela */
janela.addEventListener(MouseEvent.MOUSE_DOWN, movimenta);
/* Criamos um Listener que será disparado quando clicar no botão aumentar */
aumentar.addEventListener(MouseEvent.MOUSE_DOWN, aumenta);
/* Criamos um Listener que será disparado quando clicar no boão fechar */
fechar.addEventListener(MouseEvent.CLICK, fecha);
/* Criamos um Listener que será disparado quando clicar no botão minimizar */
minimizar.addEventListener(MouseEvent.CLICK, minimiza);
/* Criamos um Listener que será disparado quando clicar no botão maximizar */
maximizar.addEventListener(MouseEvent.CLICK, maximiza);
/* Função que será disparada quando clicar na janela */
function movimenta(event:MouseEvent):void {
   /* Movimentamos nossa janela */
   stage.nativeWindow.startMove();
}
/* Função que será dispara quando clicar no botão aumentar */
function aumenta(event:MouseEvent):void {
   /* Modificamos o tamanho de nosso aplicativo */
   /* O tamanho será modificado no canto interior direito */
   stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT);
}
/* Função que será disparada quando clicar no botão fechar */
function fecha(event:MouseEvent):void {
   /* Fechamos o aplicativo */
   stage.nativeWindow.close();
}
/* Função que será disparada quando clicar no botão minimizar */
function minimiza(event:MouseEvent):void {
   /* Minimizamos o aplicativo */
   stage.nativeWindow.minimize();
}
/* Função que será disparada quando clicar no botão maximizar */
function maximiza(event:MouseEvent):void {
   /* Se o aplicativo não está maximizado  */
   if (clicado == false) {
      /* Maximizamos ele */
      stage.nativeWindow.maximize();
      /* Trocamos o valor da variável */
      clicado = true;
      /* Escondemos o MovieClip aumentar */
      aumentar.visible = false;
   /* Se o aplicativo está maximizado */
   } else {
      /* Restauramos ele */
      stage.nativeWindow.restore();
      /* Trocamos o valor da variável */
      clicado = false;
      /* Exibe o MovieClip aumentar */
      aumentar.visible = true;
   }
}
/* Função que será disparada quando o aplicativo tiver seu tamanho alterado */
function modifica(event:NativeWindowBoundsEvent):void {
   /* Modificamos o tamanho do MovieClip janela */
   janela.width = stage.stageWidth-(espaco*2);
   janela.height = stage.stageHeight-(espaco*2);
   /* Movemos o campo de texto para o centro do palco */
   campo.x = (stage.stageWidth-campo.width)/2;
   /* Movemos o MovieClip aumentar */
   /* Provavelmente vocês terão que modificar essa parte conforme o seu layout */
   aumentar.x = janela.width-11;
   aumentar.y = janela.height-11;
}</pre>
<h2>Preparando seu arquivo</h2>
<p>Agora falta pouco para terminar de criar nossa janela. Se testarem seus arquivos, vocês irão notar que a janela padrão do Sistema Operacional ainda está visível, precisamos dizer ao nosso arquivo para que ignore essa janela.</p>
<p>Para isso, basta irem ao menu Commands e selecionar a opção &#8220;AIR &#8211; Application and Installer Settings&#8221;. Uma nova janela será aberta, na opção Window style selecionem &#8220;Custom Chrome (opaque)&#8221; ou &#8220;Custom Chrome (transparent)&#8221;, a diferença entre o opaque para o transparent é que o opaque o fundo do Flash é preservado e o transparent o fundo é removido (igual ao que ocorre ao se usar o wmode no HTML).</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/07/janela3.jpg" alt="Selecionando tipo de janela" width="410" height="128" /></p>
<p>Pronto, agora é só testar seu aplicativo com a sua janela personalizada.</p>
<h2>Considerações finais</h2>
<p>A chance de criar nossas janelas personalizadas sem dúvidas é uma das inúmeras vantagens do Adobe AIR. A única recomendação que faço é para que não abusem muito dessa opção, evitem criar janelas que sejam muito pesadas ou que tenham muitas coisas, a Adobe pede isso pois seu aplicativo poderá usar mais memória e processamento do computador podendo até travar.</p>
<p>No próximo tutorial, irei mostrar como criar um aplicativo Drag and Drop, ou seja, pegar um arquivo do seu computador e jogar no aplicativo e poder interagir com ele.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá vocês poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a title="http://www.natanalves.com" href="http://www.natanalves.com/" target="_blank">http://www.natanalves.com/</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p><strong>Autor: Natan D. Alves &#8211; Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</strong></p>
<p>Qualquer dúvida envie um e-mail para <a href="mailto:natanalves@mxstudio.com.br" target="_blank">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://www.mxstudio.com.br/forum" target="_blank">fórum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/adobe-air/criando-janelas-personalizadas/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Criando aplicativos AIR no Flash CS3</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/adobe-air/criando-aplicativos-air-no-flash-cs3/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/adobe-air/criando-aplicativos-air-no-flash-cs3/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 12:07:07 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash CS3]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1553</guid>
		<description><![CDATA[Adobe Integrated Runtime, antes conhecido como Apollo, é uma nova tecnologia desenvolvida pela Adobe para rodar aplicativos em seu Desktop. Isso mesmo, aplicativos que você cria para a Web poderão ser usados para rodar em qualquer computador que tenha o AIR instalado.]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Inaugurando a nova seção de tutoriais do MXStudio, irei mostrar a vocês sobre uma nova tecnologia lançada pela Adobe a um certo tempo, o Adobe AIR.</p>
<p>Adobe Integrated Runtime, antes conhecido como Apollo, é uma nova tecnologia desenvolvida pela Adobe para rodar aplicativos em seu Desktop. Isso mesmo, aplicativos que você cria para a Web poderão ser usados para rodar em qualquer computador que tenha o AIR instalado.</p>
<p>O que você precisa para criar aplicativos em AIR:</p>
<ul>
<li>Flash CS3</li>
<li>Flex 3</li>
<li>Dreamweaver CS3 (criação usando AJAX)</li>
</ul>
<p>Hoje, irei mostrar como criar um aplicativo em AIR usando o Flash CS3.</p>
<h2>Preparando-se para o AIR</h2>
<p>Antes de ir para o Flash, vocês precisam baixar uma atualização para que o Flash possa criar arquivos em AIR. Para isso, basta ir ao site da Adobe e baixar o último update para o Flash CS3.</p>
<p><a href="http://www.adobe.com/support/flash/downloads.html">http://www.adobe.com/support/flash/downloads.html</a></p>
<p>Além desse update, vocês precisam baixar a última versão do Adobe AIR para conseguir rodar seus aplicativos.</p>
<p><a href="http://get.adobe.com/air/">http://get.adobe.com/air/</a></p>
<h2>Iniciando Adobe AIR no Flash</h2>
<p>Após instalarem o update do Flash e o Adobe AIR em sua máquina, vamos para o Flash criar nosso primeiro aplicativo em AIR. Abrindo o Flash, vocês irão notar uma nova opção de arquivo na tela inicial do Flash:</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air.jpg" alt="Nova opção de arquivo" width="585" height="450" /></p>
<p>Ao criar o arquivo o Flash irá mostrar um pequeno aviso sobre o AIR.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air1.jpg" alt="Aviso AIR" width="455" height="324" /></p>
<p>Caso essa tela inicial do Flash não é exibida para vocês não se preocupem, para criar um arquivo AIR basta criar um novo arquivo no Flash, pode ser em ActionScript 2 ou ActionScript 3, abrir o painel Publish Settings (Ctrl+Shift+F12), clicando na aba Flash, na opção &#8220;Version&#8221; selecionem Adobe AIR 1.0. Se reparar, o campo &#8220;ActionScript version&#8221; é desabilitado porque aplicativos em AIR só rodam usando o ActionScript 3, por isso o AIR só funciona para os usuários do Flash CS3 e Flex 3.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air2.jpg" alt="Criando arquivo AIR" width="437" height="324" /></p>
<p>A primeira vista, não existe nada diferente em relação a um arquivo em Flash normal, a diferença está quando testamos o aplicativo. Em um arquivo em Flash normal quando testamos ele (Ctrl+Enter) ele não roda no Flash Player e sim em uma janela do AIR.</p>
<p>Bom, chegou a hora de criar nossa aplicação. Sintam-se livre para fazer qualquer coisa em seu aplicativo, podemos usar qualquer coisa nele, usar Componentes, usar ActionScript, animação quadro a quadro, motion tween, frames, cenas, tudo, exatamente o que faríamos em uma aplicação voltada para a Web.</p>
<p>Para esse tutorial irei criar algo simples, usarei o logo do MXStudio e um pequeno texto que carregarei de um arquivo de texto. Criem um campo de texto dinâmico com instancia de <strong>texto</strong>, arrastem o Componente UIScrollBar para cima do campo de texto e de instancia de <strong>scrollBar</strong>. Com o Componente selecionado, abra o painel Parameters e vejam se o campo <strong>scrollTargetName</strong> está preenchido com o valor &#8220;texto&#8221; que é a instancia do se campo de texto dinâmico. Agora, coloquem as seguintes ações no frame que seu campo de texto se encontra:</p>
<pre lang="actionscript3">/* Cria uma nova instancia da Classe URLLoader */
var carrega:URLLoader = new URLLoader();
/* Carregamos o arquivo txt */
carrega.load(new URLRequest("lorem.txt"));
/* Criamos um listener para saber quando terminou de carregar */
carrega.addEventListener(Event.COMPLETE, exibe);
/* Função acionada quando o texto termina de carregar */
function exibe(event:Event):void {
   /* Mostramos o texto */
   texto.text = event.target.data;
   /* Dizemos ao ScrollBar qual campo de texto mover */
   scrollBar.scrollTarget = texto;
}</pre>
<p>Com seu aplicativo criado, iremos agora criar o arquivo .air, esse arquivo é o arquivo que vocês poderão enviar a outros usuários para que eles possam instalar o seu aplicativo. Para criar seu aplicativo, vocês precisam primeiro salvar seu arquivo em seu HD.</p>
<p>Com seu arquivo salvo, para criar o aplicativo iremos a opção Comands localizado no menu superior do Flash e selecionaremos a opção &#8220;AIR &#8211; Application and Installer Settings&#8221;. Um novo menu é aberto com um monte de opões para a criação do arquivo AIR:</p>
<p><img style="vertical-align: bottom;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air3.jpg" alt="Opções aplicativo AIR" width="490" height="710" /></p>
<blockquote><p>Legenda:<br />
1- aqui vocês colocam informações a respeito do aplicativo, o nome do arquivo, o nome do aplicativo, um ID para se diferenciar dos demais, a versão do aplicativo, alguma descrição e os direitos sobre ele. Eu recomendo mudar apenas os campos File name, Name, Description e Copyright para não gerar nenhum outro tipo de problema.</p>
<p>1a- Na opção &#8220;Window style&#8221; vocês podem escolher a forma que o arquivo AIR irá aparecer na tela, existem as opções &#8220;System Chrome&#8221; que usa a janela no estilo do sistema operacional que o aplicativo for instalado, &#8220;Custom Chrome (opaque)&#8221; com essa opção nossa janela não terá a aparência de nenhum sistema operacional, com essa opção nós podemos criar as janelas que desejarmos com os botões de minimizar, maximizar e fechar personalizados, e a última opção é &#8220;Custom Chrome (transparent)&#8221;, que funciona da mesma maneira da anterior, a diferença é que seu palco fica totalmente transparente.</p>
<p>1b- Podemos escolher o ícone para nossa aplicação. O ícone precisa ser no formatao PNG.</p>
<p>1c- Nessas opções avançadas, podemos definir um tamanho inical de nossa aplicação, a posição que o programa deve iniciar quando aberto, se queremos botões se maximizar, minimizar, fechar e podemos ainda definir em qual local o programa será instalado e o local dele no menu iniciar.</p>
<p>2- aqui se escolherem a opção &#8220;Use custom application descriptor file&#8221; vocês podem usar algum arquivo XML que contém essas informações.</p>
<p>3a- aqui escolhemos o certificado digital que usaremos (explicado mais a frente).</p>
<p>3b- o local onde o arquivo .air será salvo.</p>
<p>3c- arquivos que incluiremos em nosso projeto, os arquivos inclusos nessa opção estarão dentro do pacote AIR, se você criar alguma galeria por exemplo, pode incluir as fotos, os arquivo XMLs entre outros arquivos que façam parte da aplicação.</p></blockquote>
<p>Para esse aplicativo que estamos criando, devemos incluir o arquivo de texto usado para que o programa possa funcionar corretamente. Portanto, basta clicar no botão com o símbolo de + e adicionar o arquivo de texto que estiverem usando. Se não fizermos isso, quando o usuário instalar o aplicativo nada será exibido porque ele não tem o arquivo de texto.</p>
<h2>Digital signature</h2>
<p>Nós teremos que criar um certificado digital que usaremos em todos os nossos aplicativos feitos para o AIR. Mas porque isso? Simples, um aplicativo em AIR é como um programa rodando em nosso sistema operacional, e como todo programa tem acesso a dados e outras informações em nosso HD. Um Certificado digital nos dá uma pequena garantia de que esse programa não irá interferir em nada em nosso sistema operacional.</p>
<p>Podemos comprar um certificado digital ou criar o nosso próprio arquivo digital pelo Flash. Criando um certificado digital pelo Flash é uma boa para os que querem aprender mais sobre o AIR, aos que desejam comercializar esses aplicativos é uma boa comprar um certificado.</p>
<p>Para criar seu certificado digital, iremos de novo a tela de opções &#8221;AIR &#8211; Application and Installer Settings&#8221; no menu Commands do Flash. Com a janela aberta clicaremos na opção &#8220;Change&#8221;:</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air4.jpg" alt="Digital signature" width="445" height="236" /></p>
<p>Uma nova janela é aberta, nela selecionaremos a opção &#8221;Sign the AIR file with a digital certificate&#8221; e depois a opção Create. Mais um menu será exibido, nele vocês irão preencher com as suas informações como nome, organização, país e criar uma senha para esse arquivo, essa senha será usada em todos os arquivos AIR que desejar criar com esse certificado digital. Escolham o local no qual esse certificado será salvo e clique em Ok.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air5.jpg" alt="Criando arquivo Certificado Digital" width="598" height="204" /></p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air6.jpg" alt="Criando arquivo Certificado Digital" width="531" height="405" /></p>
<p>Se tudo estiver certo uma mensagem de sucesso será exibida pelo Flash dizendo que o certificado digital foi criado com sucesso.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air7.jpg" alt="Sucesso!" width="328" height="169" /></p>
<p>Agora selecionem o seu certificado criado, coloquem a senha que criaram para ele, vocês podem selecionar a opção &#8220;Remember password for this sesssion&#8221;, com ela selecionada vocês não precisam ter que digitar a senha do certificado sempre que criar o arquivo AIR.</p>
<p>Agora basta clicar na opção <strong>Publish AIR File</strong>, e se tudo estiver correto, aparecerá uma mensagem de que o arquivo AIR foi criado com sucesso.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air8.jpg" alt="Gerando arquivo AIR" width="432" height="277" /></p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air9.jpg" alt="Arquivo AIR gerado com sucesso" width="251" height="169" /></p>
<p>Com nosso arquivo gerado, vamos instalar ele em nossa máquina e ver se tudo está funcionando corretamente. Basta dar um duplo clique sobre o arquivo AIR e uma nova janela será aberta:</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air10.jpg" alt="Preparando-se para instalar" width="496" height="400" /></p>
<p>Selecionamos aonde desejamos instalar o aplicativo, se desejamos que ele tenha um atalho em nossa área de trabalho e se queremos que ele seja iniciado quando terminar a instalação. Com a instalação terminada, nosso aplicativo é exibido da mesma maneira quando testamos ele no Flash.</p>
<p><img style="vertical-align: middle;" src="http://www.mxstudio.com.br/wp-content/uploads/2008/06/air11.jpg" alt="Opções instalação" width="496" height="390" /></p>
<p>Uma coisa bem legal de aplicativos em AIR é que eles realmente parecem ser um programa, se vocês estiverem usando Windows poderão acessar ele pelo Menu Iniciar. E como é um aplicativo, para remover ele de seu computador vocês precisam desinstalar ele, usando a opção Adicionar/Remover programa do Windows.</p>
<h2>Considerações finais</h2>
<p>Adobe AIR é mais uma nova tecnologia desenvolvida pela Adobe que promete revolucionar o modo como os aplicativos voltados para Desktop são criados. Não tem como não ficar animado com essa nova tecnologia, que está apenas começando mas já promete muito.</p>
<p>Nos próximos tutoriais que irei escrever sobre essa nova tecnologia irei mostrar como criar aplicativos usando janelas personalizadas, interação com arquivos no computador do usuário usando &#8220;Drag and Drop&#8221; entre outras novidades que irei descobrir e compartilhar com vocês.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá vocês poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a title="http://www.natanalves.com" href="http://www.natanalves.com/" target="_blank"><span style="color: #000000;">http://www.natanalves.com/</span></a></p>
<p>Um abraço a todos e até a próxima.</p>
<p><strong>Autor: Natan D. Alves &#8211; Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</strong></p>
<p>Qualquer dúvida envie um e-mail para <a href="maito:natanalves@mxstudio.com.br">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://www.mxstudio.com.br/forum" target="_blank">fórum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/adobe-air/criando-aplicativos-air-no-flash-cs3/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Formulário E-mail Flash+PHP</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/formulario-e-mail-flashphp/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/formulario-e-mail-flashphp/#comments</comments>
		<pubDate>Fri, 02 May 2008 01:25:15 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[ActionScript 2]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[contato]]></category>
		<category><![CDATA[E-mail]]></category>
		<category><![CDATA[Flash 8]]></category>
		<category><![CDATA[Flash CS3]]></category>
		<category><![CDATA[Formulário]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.mxstudio.com.br/?p=1205</guid>
		<description><![CDATA[Olá comunidade. Hoje, irei a mostrar a vocês como criar um formulário de E-mail usando PHP e Flash. Irei mostrar como criar esse formulário para os usuários do ActionScript 2 e do ActionScript 3. Pré requisitos para esse tutorial: Flash CS3 usando ActionScript 3, Flash 8 ou Flash MX 2004 Conhecimento básico de ActionScript 2 ou 3 Servidor [...]]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade.</p>
<p>Hoje, irei a mostrar a vocês como criar um formulário de E-mail usando PHP e Flash. Irei mostrar como criar esse formulário para os usuários do ActionScript 2 e do ActionScript 3.</p>
<p>Pré requisitos para esse tutorial:</p>
<ul>
<li>Flash CS3 usando ActionScript 3, Flash 8 ou Flash MX 2004</li>
<li>Conhecimento básico de ActionScript 2 ou 3</li>
<li>Servidor que de suporte a PHP e a função Mail</li>
</ul>
<h2>Criação do PHP</h2>
<p>Antes de chegarmos a criação de nosso arquivo PHP, vocês precisam verificar se o servidor em que usam dá suporte a função mail do PHP. Para verificar isso, basta criar um arquivo PHP usando a função mail, como no exemplo abaixo:</p>
<p>&lt;?php<br />
mail(&#8220;seu email@dominio.com.br&#8221;, &#8220;assunto&#8221;, &#8220;mensagem&#8221;);<br />
?&gt;</p>
<p>Após a criação desse arquivo, hospedem ele em seu servidor visualize ele em seu browser. Se ao abrir o arquivo, nenhuma mensagem aparecer você tem suporte a função mail do PHP e pode criar um formulário, se aparecer alguma mensagem de erro vocês não poderão criar o formulário. A imagem a seguir mostra o erro que é exibido pelo PHP quando não tem suporte a função mail.</p>
<p><img style="vertical-align: middle" src="http://www.mxstudio.com.br/wp-content/uploads/2008/04/email.jpg" alt="Mensagem de erro" width="610" height="62" /></p>
<p>Vocês podem estar se perguntando, porque tem servidor que não dá suporte a função mail do PHP. Simples, controle contra SPAM. Existem vários usuários que aproveitam para ficar enviando mensagens sem que nós tenhamos conhecimento.</p>
<p>Aos que podem usar a função, vamos a criação do arquivo PHP que vai receber os dados vindos do Flash e enviar o E-mail. Salvem esse arquivo com o nome de <strong>contato.php</strong>.</p>
<p>&lt;?php<br />
/* Valores enviados pelo Flash */<br />
/* Para esse tutorial irei enviar 5 valores */<br />
/* Fiquem livres a enviar quantos valores quiserem */<br />
$nome = utf8_decode(@$_POST['nome']);<br />
$email = utf8_decode(@$_POST['email']);<br />
$cidade = utf8_decode(@$_POST['cidade']);<br />
$assunto = utf8_decode(@$_POST['assunto']);<br />
$mensagem = utf8_decode(@$_POST['mensagem']);<br />
$news = utf8_decode(@$_POST['news']);<br />
$programas = utf8_decode(@$_POST['programas']);<br />
/* Coloquem seu E-mail aqui */<br />
$para = &#8220;seu email@dominio.com.br&#8221;;<br />
/* Aqui uma pequena verificação para evitar que enviem E-mails sem valores */<br />
if ($nome != &#8220;&#8221; &amp;&amp; $email != &#8220;&#8221; &amp;&amp; $cidade != &#8220;&#8221; &amp;&amp; $assunto != &#8220;&#8221; &amp;&amp; $mensagem != &#8220;&#8221;) {<br />
/* Montamos o E-mail */<br />
/* Criei um exemplo bem simples de E-mail usando HTML */<br />
/* Fiquem livres para modificar conforme desejam */<br />
$corpo = &#8216;&lt;html&gt;&lt;head&gt;&lt;title&gt;&#8217;.$assunto.&#8217;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&#8217;;<br />
$corpo .= &#8216;Nome: &#8216;.$nome.&#8217;&lt;br /&gt;E-mai: &#8216;.$email.&#8217;&lt;br /&gt;Quer receber a Newsletter: &#8216;.$news.&#8217;&lt;br /&gt;&#8217;;<br />
$corpo .= &#8216;Programas usados: &#8216;.$programas.&#8217;&lt;br /&gt;&#8217;;<br />
$corpo .= &#8216;Cidade: &#8216;.$cidade.&#8217;&lt;br /&gt;Assunto: &#8216;.$assunto.&#8217;&lt;br /&gt;Mensagem: &#8216;.$mensagem;<br />
/* Aqui modificamos o tipo de E-mail para o formato HTML */<br />
$headers = &#8216;MIME-Version: 1.0&#8242; . &#8220;\r\n&#8221;;<br />
$headers .= &#8216;Content-type: text/html; charset=iso-8859-1&#8242; . &#8220;\r\n&#8221;;<br />
/* Aqui mudamos o cabeçalho para exibir o E-mail de quem enviou */<br />
$headers .= &#8216;From:&#8217;. $email . &#8220;\r\n&#8221;;<br />
/* Por fim enviamos o E-mail com os dados recebidos do Flash */<br />
mail($para, $assunto, $corpo, $headers);<br />
/* Retornamos um Ok para o Flash */<br />
print &#8216;erro=0&#8242;;<br />
/* Caso os campos não sejam preenchidos */<br />
} else {<br />
/* Retorna o erro ao Flash */<br />
print &#8216;erro=1&#8242;;<br />
}<br />
?&gt;</p>
<h2>Pulando para o Flash</h2>
<p>Chegou a hora de ir para o Flash. Como disse no começo do tutorial, esse tutorial serve tanto para usuários do ActionScript 3 quanto para usuários do ActionScript 2. Para esse tutorial começarei com um palco de tamanho 470&#215;300, criem duas camadas, ações e objetos.</p>
<p><img style="vertical-align: middle" src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/contato3.jpg" alt="Disposição camadas" width="215" height="109" /></p>
<p>Montem o layout que preferir para o Formulário, a quantidade de campos é livre, assim como o uso de Componentes. Vou aproveitar esse tutorial e mostrar como usar os Componentes ComboBox, CheckBox e RadioButtons. O layout que montei está abaixo, as linhas em vermelho são as instancias dos objetos, lembre-sem de colocar os objetos no primeiro frame da camada objetos.</p>
<p><img style="vertical-align: middle" src="http://www.mxstudio.com.br/wp-content/uploads/2008/04/contato2.jpg" alt="Instancias dos objetos" width="475" height="300" /></p>
<p>Os botões possuem instancia de <span style="color: #ff0000">limpar_btn</span> e <span style="color: #ff0000">enviar_btn</span> respectivamente. Os CheckBoxs possuem instancia de <span style="color: #ff0000">dream_ch</span>, <span style="color: #ff0000">fire_ch</span>, <span style="color: #ff0000">flash_ch</span>, <span style="color: #ff0000">illus_ch</span> e <span style="color: #ff0000">photo_ch</span> respectivamente.</p>
<p>Com os nossos objetos no palco, vamos ao ActionScript. Primeiro, aos usuários que usam o <strong>ActionScript 2</strong>. Colem as ações abaixo no primeiro frame da camada <strong>ações</strong>:</p>
<pre> /* Criamos um Array para preencher o ComboBox cidades */
var cidades:Array = ["São Paulo", "Rio de Janeiro", "Belo Horizonte", "Porto Alegre", "Outra cidade"];
/* Preenchemos o ComboBox com os valores do Array */
cidade_cb.dataProvider = cidades;
/* Criamos um Array para preencher o ComboBox assunto */
var assunto:Array = ["Dúvidas", "Sugestões", "Elogios", "Reclamações", "Outros"];
/* Preenchemos o ComboBox com os valores do Array */
assunto_cb.dataProvider = assunto;
/* Criamos uma variável para armazenar os valores do CheckBox selecionados */
var programas:String = new String();
/* Criamos uma instancia para a Classe LoadVars */
var envia:LoadVars = new LoadVars();
/* Ao clicar do botão enviar */
enviar_btn.onPress = function() {
   /* Verifica se preencheu o campo nome */
   if (nome_txt.text == "") {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo Nome corretamente";
   /* Verifica se preencheu o campo email */
   } else if (email_txt.text == "") {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo E-mail corretamente";
   } else if ((email_txt.text.indexOf("@") == -1 || email_txt.text.indexOf(".") == -1)) {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo E-mail corretamente";
   /* Verifica se preencheu o campo mensagem */
   } else if (mensagem_txt.text == "") {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo Mensagem corretamente";
   /* Verifica se selecionou a opção sim ou opção não do RadioButton */
   } else if (sim.selected == false &amp;&amp; nao.selected == false) {
      /* Mostra a mensagem de erro */
      status_txt.text = "Selecione Sim ou Não";
   /* Se tudo estiver ok */
   } else {
      /* Envia para o PHP a variavel nome com os dados do campo nome */
      envia.nome = nome_txt.text;
      /* Envia para o PHP a variavel email com os dados do campo email */
      envia.email = email_txt.text;
      /* Envia para o PHP a variavel cidade com o valor selecionado no ComboBox cidade */
      envia.cidade = cidade_cb.value;
      /* Envia para o PHP a variavel assunto com o valor selecionado no ComboBox assunto */
      envia.assunto = assunto_cb.value;
      /* Envia para o PHP a variavel mensagem com os dados do campo mensagem */
      envia.mensagem = mensagem_txt.text;
      /* Verifica se a opção sim foi selecionado no RadioButton */
      if (sim.selected == true) {
         /* A opção sim foi selecionada */
         /* Envia para o PHP a variavel news com o valor sim */
         envia.news = "sim";
      /* Verifica se  a opção não foi selecionado no RadioButton */
      } else if (nao.selected == true) {
         /* A opção nao foi selecionada */
         /* Envia para o PHP a variavel news com o valor não */
         envia.news = "não";
      }
      /* Verifica se o CheckBox Dreamweaver foi selecionada */ 
      if (dream_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Dreamweaver */
         programas = "Dreamweaver, ";
      }
      /* Verifica se o CheckBox Fireworks foi selecionada */ 
      if (fire_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Fireworks */
         programas += "Fireworks, ";
      }
      /* Verifica se o CheckBox Flash foi selecionada */ 
      if (flash_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Flash */
         programas += "Flash, ";
      }
      /* Verifica se o CheckBox Illustrator foi selecionada */ 
      if (illus_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Illustrator */
         programas += "Illustrator, ";
      }
      /* Verifica se o CheckBox Photoshop foi selecionada */
      if (photo_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor PhotoShop */
         programas += "Photoshop.";
      }
      /* Envia para o PHP a variavel programas o valor da variável programas */
      envia.programas = programas;
      /* Avisa que está mandando o E-mail */
      status_txt.text = "Enviando mensagem";
      /* Enviamos as variáveis ao PHP e carregamos a mensagem que vai vir do PHP */
      envia.sendAndLoad("http://localhost/contato.php", envia, "POST");
   }
};
/* Assim que o PHP for carregado */
envia.onLoad = function(ok) {
   /* Se carregou tudo certinho */
   if (ok) {
      /* Se deu tudo ok no PHP */
      if (this.erro == 0) {
         /* Chamamos a função limpa */
         limpa();
         /* Mostra mensagem de sucesso */
         status_txt.text = "Mensagem enviada com sucesso";
      } else {
         /* Mostra mensagem de erro */
         status_txt.text = "Erro ao enviar E-mail";
      }
   }
};
/* Ao clicar do botão limpar */
limpar_btn.onPress = function() {
   /* Chamamos a função limpa */
   limpa();
};
/* Função responsável por limpar os campos do formulário */
function limpa() {
   /* Zeramos a variável programas */
   programas = "";
   /* Apagamos os campos de texto */
   nome_txt.text = "";
   email_txt.text = "";
   mensagem_txt.text = "";
   status_txt.text = "";
   /* Voltamos a selecionar o primeiro item dos ComboBox */
   assunto_cb.selectedIndex = 0;
   cidade_cb.selectedIndex = 0;
   /* Deixamos os RadioButtons não selecionados */
   sim.selected = false;
   nao.selected = false;
   /* Deixamos os RadioButtons não selecionados */
   dream_ch.selected = false;
   fire_ch.selected = false;
   flash_ch.selected = false;
   illus_ch.selected = false;
   photo_ch.selected = false;
}</pre>
<p>Agora para os usuários do <strong>ActionScript 3</strong>. Colem as ações abaixo no primeiro frame da camada <strong>ações</strong>.</p>
<pre>/* Importamos a Classe DataProvider */
import fl.data.DataProvider;
/* Criamos um Array para preencher o ComboBox cidades */
var cidades:Array = ["São Paulo", "Rio de Janeiro", "Belo Horizonte", "Porto Alegre", "Outra cidade"];
/* Preenchemos o ComboBox com os valores do Array */
cidade_cb.dataProvider = new DataProvider(cidades);
/* Criamos um Array para preencher o ComboBox assunto */
var assunto:Array = ["Dúvidas", "Sugestões", "Elogios", "Reclamações", "Outros"];
/* Preenchemos o ComboBox com os valores do Array */
assunto_cb.dataProvider = new DataProvider(assunto);
/* Criamos uma variável para armazenar os valores do CheckBox selecionados */
var programas:String = new String();
/* Criamos uma instancia da Classe URLVariables */
var variaveis:URLVariables = new URLVariables();
/* Criamos uma instancia da Classe URLRequest */
var objEnvia:URLRequest = new URLRequest();
/* Criamos uma instancia da Classe URLLoader */
var objRecebe:URLLoader = new URLLoader();
/* Adicionamos um listener ao botão limpar */
limpar_btn.addEventListener(MouseEvent.MOUSE_DOWN, limparPress);
/* Função disparada quando se clica no botão limpar */
function limparPress(event:MouseEvent):void {
   /* Chamamos a função limpa */
   limpa();
}
/* Adicionamos um listener ao botão enviar */
enviar_btn.addEventListener(MouseEvent.MOUSE_DOWN, enviarPress);
/* Função disparada quando se clica no botão enviar */
function enviarPress(event:MouseEvent):void {
   /* Verifica se preencheu o campo nome */
   if (nome_txt.text == "") {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo Nome corretamente";
   /* Verifica se preencheu o campo email */
   } else if (email_txt.text == "") {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo E-mail corretamente";
   /* Verifica se preencheu o campo mensagem */
   } else if ((email_txt.text.indexOf("@") == -1 || email_txt.text.indexOf(".") == -1)) {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo E-mail corretamente";
   } else if (mensagem_txt.text == "") {
      /* Mostra a mensagem de erro */
      status_txt.text = "Preencha o campo Mensagem corretamente";
   /* Verifica se selecionou a opção sim ou opção não do RadioButton */
   } else if (sim.selected == false &amp;&amp; nao.selected == false) {
      /* Mostra a mensagem de erro */
      status_txt.text = "Selecione Sim ou Não";
   /* Se tudo estiver ok */
   } else {
      /* Envia para o PHP a variavel nome com os dados do campo nome */
      variaveis.nome = nome_txt.text;
      /* Envia para o PHP a variavel email com os dados do campo email */
      variaveis.email = email_txt.text;
      /* Envia para o PHP a variavel cidade com o valor selecionado no ComboBox cidade */
      variaveis.cidade = cidade_cb.value;
      /* Envia para o PHP a variavel assunto com o valor selecionado no ComboBox assunto */
      variaveis.assunto = assunto_cb.value;
      /* Envia para o PHP a variavel mensagem com os dados do campo mensagem */
      variaveis.mensagem = mensagem_txt.text;
      /* Verifica se a opção sim foi selecionado no RadioButton */
      if (sim.selected == true) {
         /* A opção sim foi selecionada */
         /* Envia para o PHP a variavel news com o valor sim */
         variaveis.news = "sim";
      /* Verifica se  a opção não foi selecionado no RadioButton */
      } else if (nao.selected == true) {
         /* A opção nao foi selecionada */
         /* Envia para o PHP a variavel news com o valor não */
         variaveis.news = "não";
      }
      /* Verifica se o CheckBox Dreamweaver foi selecionada */
      if (dream_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Dreamweaver */
         programas = "Dreamweaver, ";
      }
      /* Verifica se o CheckBox Fireworks foi selecionada */
      if (fire_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Fireworks */
         programas += "Fireworks, ";
      }
      /* Verifica se o CheckBox Flash foi selecionada */
      if (flash_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Flash */
         programas += "Flash, ";
      }
      /* Verifica se o CheckBox Illustrator foi selecionada */
      if (illus_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor Illustrator */
         programas += "Illustrator, ";
      }
      /* Verifica se o CheckBox Photoshop foi selecionada */
      if (photo_ch.selected == true) {
         /* A opção foi selecionada */
         /* Armazena na variável programas o valor PhotoShop */
         programas += "Photoshop.";
      }
      /* Envia para o PHP a variavel programas o valor da variável programas */
      variaveis.programas = programas;
      /* Avisa que está mandando o E-mail */
      status_txt.text = "Enviando mensagem";
      /* Dizemos que os dados a serem enviados está na variável variaveis */
      objEnvia.data = variaveis;
      /* Usaremos o método POST */
      objEnvia.method = URLRequestMethod.POST;
      /* Passamos o endereço a ser enviado */
      objEnvia.url = "http://localhost/contato.php";
      /* Dizemos que os dados serão do tipo texto */
      objRecebe.dataFormat = URLLoaderDataFormat.TEXT;
      /* Enviamos as variáveis ao PHP */
      objRecebe.load(objEnvia);
      /* Adicionamos um listener a variavel objRecebe */
      /* O listener será disparado quando terminar de carregar o arquivo PHP */
      objRecebe.addEventListener(Event.COMPLETE, onLoadRecebe);
   }
}
/* Quando o arquivo PHP for carregado */
function onLoadRecebe(event:Event):void {
   /* Recupera a mensagem que será enviada pelo PHP */
   var resultado:URLVariables = new URLVariables(event.currentTarget.data);
   /* Se deu tudo ok no PHP */
   if (resultado.erro == 0) {
      /* Chama a função limpa */
      limpa();
      /* Exibe mensagem de sucesso */
      status_txt.text = "Mensagem enviada com sucesso.";
   }
}
/* Função que limpa os campos do formulário */
function limpa() {
   /* Zeramos a variável programas */
   programas = "";
   /* Apagamos os campos de texto */
   nome_txt.text = "";
   email_txt.text = "";
   mensagem_txt.text = "";
   status_txt.text = "";
   /* Voltamos a selecionar o primeiro item dos ComboBox */
   assunto_cb.selectedIndex = 0;
   cidade_cb.selectedIndex = 0;
   /* Deixamos os RadioButtons não selecionados */
   sim.selected = false;
   nao.selected = false;
   /* Deixamos os RadioButtons não selecionados */
   dream_ch.selected = false;
   fire_ch.selected = false;
   flash_ch.selected = false;
   illus_ch.selected = false;
   photo_ch.selected = false;
}</pre>
<p>Abaixo, um exemplo de como será o E-mail que você receberá por quem usar o formulário.</p>
<p><img src="http://www.mxstudio.com.br/wp-content/uploads/2008/05/contato4.jpg" alt="E-mail enviado" width="386" height="175" /></p>
<h2>Considerações finais</h2>
<p>Espero que tenha conseguido tirar a dúvida dos que sempre tentaram criar um formulário mas nunca conseguiam, o erro mais comum é não ter suporte a função mail do PHP, por isso não funcionavam achando sempre que o problema estava no Flash quando o problema era o PHP.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a title="http://www.natanalves.com" href="http://www.natanalves.com/" target="_blank">http://www.natanalves.com/</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p><strong>Autor: Natan D. Alves &#8211; Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</strong></p>
<p>Qualquer dúvida envie um e-mail para <a href="http://mce_host/wp-admin/maito:natanalves@mxstudio.com.br">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://forum.mxstudio.com.br/" target="forum">fórum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/formulario-e-mail-flashphp/feed/</wfw:commentRss>
		<slash:comments>173</slash:comments>
		</item>
		<item>
		<title>Galeria de Imagens ActionScript 3</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/galeria_de_imagens_actionscript_3/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/galeria_de_imagens_actionscript_3/#comments</comments>
		<pubDate>Sat, 12 Jan 2008 00:00:00 +0000</pubDate>
		<dc:creator>Natan D. Alves</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash CS3]]></category>
		<category><![CDATA[galeria]]></category>
		<category><![CDATA[tween]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aprenderemos a criar uma Galeria de Imagens usando XML no Flash CS3 e ActionScript 3.]]></description>
			<content:encoded><![CDATA[<p>Olá Comunidade. Nesse meu primeiro tutorial voltado aos usuários do Flash CS3 e do ActionScript 3, irei mostrar criar uma Galeria de Imagens com XML. Essa galeria possui o mesmo efeito usado em um tutorial que fiz um tempo atrás usando ActionScript 2. Esse tutorial é para mostrar e ensinar algumas coisas sobre o ActionScript 3. Aos que nunca fizeram o tutorial, eis o link:</p>
<p><a title="Galeria de Imagens com XML ActionScript 2" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=3&amp;aid=940" target="_blank">Galeria de Imagens com XML ActionScript 2</a></p>
<p>Pré-requisitos para esse tutorial</p>
<ul>
<li>Flash CS3 usando ActionScript 3</li>
<li>Conhecimento básico de ActionScript 2 ou 3</li>
</ul>
<p>Outro requisito para esse tutorial é ler uma matéria que eu fiz sobre as mudanças do ActionScript 3. Nesse artigo vocês encontrarão as principais mudanças e vão ajudar e muito no entendimento desse tutorial:</p>
<p><a title="Conhecendo o Flash CS3 - Parte 3" href="http://www.mxstudio.com.br/views.tutorial.php?act=view&amp;cid=3&amp;aid=1113" target="_blank">Algumas diferenças e novidades no ActionScript 3</a></p>
<h3>Criando o XML</h3>
<p>Vamos ao XML que conterá nossas Imagens e seus títulos. Salve o arquivo com o nome de <strong>imagens.xml</strong>.</p>
<pre lang="xml"><?xml version="1.0" encoding="utf-8"?>
<imagens>
   <foto>
      <imagem>imagem.jpg</imagem>
      <texto>Moto Ayrton Senna</texto>
   </foto>
   <foto>
      <imagem>imagem1.jpg</imagem>
      <texto>Mclaren do Senna</texto>
   </foto>
   <foto>
      <imagem>imagem2.jpg</imagem>
      <texto>Capacete Senna</texto>
   </foto>
   <foto>
      <imagem>imagem3.jpg</imagem>
      <texto>Ferrari Shumacher</texto>
   </foto>
   <foto>
      <imagem>imagem4.jpg</imagem>
      <texto>Loro</texto>
   </foto>
   <foto>
      <imagem>imagem5.jpg</imagem>
      <texto>Trator do Sítio</texto>
   </foto>
   <foto>
      <imagem>imagem6.jpg</imagem>
      <texto>Carroça antiga</texto>
   </foto>
</imagens></pre>
<h3>Criando nossa Galeria</h3>
<p>Vamos criar nossa galeria. Você poderá fazer da maneira que desejar. Comecei com um palco com dimenções de 550&#215;420. Os nome em Vermelho são os <strong>nomes de instância</strong> de cada objeto.</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/natanalves_jan08_GaleriaImagensAS3_imagens/galeria.jpg" alt="Instâncias dos Objetos" width="550" height="363" /></p>
<p id="destaque"><strong>holder:</strong> MovieClip em branco<br />
<strong>borda:</strong> MovieClip com um retângulo desenhado dentro dele<br />
<strong>preloader:</strong> MovieClip com uma barra desenhado dentro dele<br />
<strong>porcento:</strong> campo de texto dinamico<br />
<strong>ant:</strong> MovieClip para servir como botão<br />
<strong>prox:</strong> MovieClip para servir como botão<br />
<strong>texto:</strong> campo de texto dinamico</p>
<p>Os objetos podem posicionados em qualquer camada de seu arquivo, só tomem cuidado para posicionar o MovieClip holder acima do MovieClip borda. Uma coisa muito importante. Quando criar o MovieClip borda, ele tem que ter seu ponto de registro no meio. Como na Imagem:</p>
<p><img src="http://www.mxstudio.com.br/imagens_artigos/natanalves_jan08_GaleriaImagensAS3_imagens/galeria2.jpg" alt="MovieClip borda" width="400" height="140" /></p>
<p>Com nossos MovieClips criados e instanciados vamos ao ActionScript. Coloquem isso no frame dos os objetos criados anteriormente:</p>
<pre lang="actionscript3">/* Importamos a Classe Tween */
import fl.transitions.Tween;
import fl.transitions.easing.*;
/* Importamos a Classe responsável pelos eventos da Classe Tween */
import fl.transitions.TweenEvent;
/* Criamos uma variável para armazenar o total de fotos no XML */
var total:Number = undefined;
/* Criamos uma instancia para a Classe XML */
var dadosXML:XML = new XML();
/* Criamos uma instancia para a Classe Loader */
/* Essa Classe vai carregar nossas imagens */
var loader:Loader = new Loader();
/* Criamos uma variável para saber qua a foto atual */
var fotoAtual:Number = 0;
/* Criamos ima instancia para a Classe URLoader */
/* Essa Classe vai carregar nosso arquivo XML */
var carregaXML:URLLoader = new URLLoader();
/* Adiciono um EventListener para a instancia da Classe URLLoader */
/* O evento será chamado quando a terminar de carregar o arquivo XML */
/* Quando terminar de carregar, chama a função monta */
carregaXML.addEventListener(Event.COMPLETE, monta);
/* Carregegamos o arquivo XML */
carregaXML.load(new URLRequest("imagens.xml"));
/* Função chamada ao carregar o arquivo XML */
function monta(event:Event) {
	/* Armazenamos nosso arquivo XML */
	dadosXML = new XML(event.target.data);
	/* Armazenamos o total de fotos no XML */
	total = dadosXML.foto.length();
	/* Chama a função mostraImagem chamando a primeira imagem */
	mostraImagem(0);
}
/* Função responsável por carregar as imagens do XML */
function mostraImagem(atual:Number):void {
	/* Descarrega qualquer imagem já carregada */
	loader.unload();
	/* Adiciono um EventListener para a instancia da Classe Loader */
	/* Esse listener será acionado sempre que a imagem estiver sendo carregada */
	/* Quando o listener for acionado, chamará a função loadProgress */
	loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress);
	/* Adiciono um EventListener para a instancia da Classe Loader */
	/* Esse listener será acionado assim que a imagem terminar de ser carregada */
	/* Quando o listener for acionado, chamará a função loadComplete */
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
	/* Carregamos a imagem */
	loader.load(new URLRequest(dadosXML.foto.imagem[atual]));
	/* Carregamos a imagem dentro do MovieClip holder */
	holder.addChild(loader);
	/* Deixamos o MovieClip holder com alpha igual a 0 */
	holder.alpha = 0;
	/* Usamos o removeEventListener para desativar o evento CLICK da Classe MouseEvent */
	/* Removemos o evento CLICK dos MovieClips prox e ant */
	prox.removeEventListener(MouseEvent.CLICK, proxPress);
	ant.removeEventListener(MouseEvent.CLICK, antPress);
	/* Desativamos os botões ant e prox */
	prox.enabled = false;
	ant.enabled = false;
}
/* Função responsável por exibir o progresso do carregamento da imagem */
function loadProgress(Event:ProgressEvent) {
	/* Criamos uma variável para saber quando carregou */
	var carregado:Number = Event.bytesLoaded;
	/* Criamos uma variável para saber o tamanho da imagem */
	var tamanho:Number = Event.bytesTotal;
	/* Modifica o tamanho do MovieClip preloader conforme a imagem estiver sendo carregada */
	preloader.scaleX = carregado/tamanho;
	/* Exibe a porcentagem carregada */
	porcento.text = Math.round(carregado/tamanho*100)+"%";
}
/* Função responsável por exibir a imagem carregada */
function loadComplete(event:Event) {
	/* Mostramos o texto da imagem */
	texto.text = dadosXML.foto.texto[fotoAtual];
	/* Aumentamos o MovieClip borda para o mesmo tamanho do MovieClip holder */
	/* Acrescentamos 16px para poder fazer uma borda */
	var tww:Tween = new Tween(borda, "width", Back.easeOut, borda.width, holder.width+16, 1, true);
	var twh:Tween = new Tween(borda, "height", Back.easeOut, borda.height, holder.height+16, 1, true);
	/* Movemos o MovieClip holder */
	var twhx:Tween = new Tween(holder, "x", Back.easeOut, holder.x, borda.x-holder.width/2, 1, true);
	var twhy:Tween = new Tween(holder, "y", Back.easeOut, holder.y, borda.y-holder.height/2, 1, true);
	/* Movemos o MovieClip ant */
	var twant:Tween = new Tween(ant, "y", Back.easeOut, ant.y, (borda.y+holder.height/2)+8, 1, true);
	/* Movemos o MovieClip prox */
	var twpro:Tween = new Tween(prox, "y", Back.easeOut, prox.y, (borda.y+holder.height/2)+8, 1, true);
	/* Movemos o campo de texto dinamico */
	var twtxt:Tween = new Tween(texto, "y", Back.easeOut, texto.y, (borda.y+holder.height/2)+8+ant.height, 1, true);
	/* Adicionamos um EventListener para uma das instancias da Classe Tween criadas */
	/* Esse listener será disparado assim que o MovieClip holder terminar de se mover */
	/* Quando o listener for acionado, chamará a função termina */
	twhx.addEventListener(TweenEvent.MOTION_FINISH, termina);
}
/* Função chamada quando o MovieClip holder terminar de ser movido */
function termina(Event:TweenEvent) {
	/* Escondemos o MovieClip preloader */
	preloader.scaleX = 0;
	/* Apagamos o texto do campo porcento */
	porcento.text = "";
	/* Damos um efeito em alpha ao MovieClip holder */
	var twha:Tween = new Tween(holder, "alpha", Regular.easeOut, 0, 1, 1, true);
	/* Adicionamos um EventListener para a instancia da Classe Tween */
	/* Esse listener será disparado assim que o MovieClip holder tiver um alpha de 100% */
	/* Quando o listener for acionado, chamará a função alphaTerminou */
	twha.addEventListener(TweenEvent.MOTION_FINISH, alphaTerminou);
}
/* Função chamada quando o MovieClip holder tiver um alpha de 100% */
function alphaTerminou(Event:TweenEvent) {
	/* Adicionamos os EventListener novamente */
	prox.addEventListener(MouseEvent.CLICK, proxPress);
	ant.addEventListener(MouseEvent.CLICK, antPress);
	/* Habilitamos os MovieClips prox e ant */
	prox.enabled = true;
	ant.enabled = true;
}
/* Adicionamos um EventListener para os MovieClips prox e ant */
/* Esse listener será disparado assim que o Mouse for clicado sobre eles */
/* Quando o listener for acionado, chamará a função mudaImagem */
prox.addEventListener(MouseEvent.CLICK, proxPress);
ant.addEventListener(MouseEvent.CLICK, antPress);
/* Usando a propriedade buttonMode fazemos com que os MovieClips */
/* Passem a ter a mãozinha do Mouse */
prox.buttonMode = true;
ant.buttonMode = true;
/* Função que carrega uma outra imagem */
function proxPress(event:MouseEvent):void {
	/* Verifica se a foto atual é menor que o total de imagens */
	if (fotoAtual < (total-1)) {
		/* Incrementamos a variável fotoAtual */
		fotoAtual++;
		/* Chama a função mostraImagem */
		mostraImagem(fotoAtual);
	}
}
function antPress(event:MouseEvent):void {
	/* Verifica se a foto atual é maior que 0 */
	if (fotoAtual > 0) {
		/* Decrementa a variável fotoAtual */
		fotoAtual--;
		/* Chama a função mostraImagem */
		mostraImagem(fotoAtual);
	}
}</pre>
<p><a href="http://www.natanalves.com/mx/imagens_as3.html" target="_blank">Aqui um Exemplo da Galeria funcionando.</a></p>
<h3>Considerações Finais</h3>
<p>O objetivo desse tutorial é fazer uma comparação da mesma galeria feita em ActionScript 2 dessa vez usando o ActionScript 3, ver quais funções mudaram, novas regras, etc. Não entrei em muitos detalhes sobre algumas funções pois esse não era o ojetivo principal, entrarei com mais detalhes em futuros tutoriais usando o ActionScript 3.</p>
<p>Uma dica aos que querem começar a aprender ActionScript 3, pegue seus projetos, tutoriais e aplicações feitas em ActionScript 2 tentem converter para o ActionScript 3. Apesar das novidades, não é tão complicado aprender se já tiver uma base no ActionScript 2, vocês irão se surpreender.</p>
<p>Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: <a title="http://www.natanalves.com" href="http://www.natanalves.com" target="_blank">http://www.natanalves.com</a></p>
<p>Um abraço a todos e até a próxima.</p>
<p><strong>Autor: Natan D. Alves &#8211; Moderador do Fórum de Flash &amp; ActionSctipt MXSTUDIO</strong></p>
<p>Qualquer dúvida envie um e-mail para <a href="maito:natanalves@mxstudio.com.br" target="new">natanalves@mxstudio.com.br</a> ou acesse nosso <a href="http://forum.mxstudio.com.br" target="forum">fórum</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/galeria_de_imagens_actionscript_3/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

