﻿<?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>Virtualize Interatividade Digital &#187; Actionscript 3</title>
	<atom:link href="http://www.virtualizeid.com.br/category/artigos-e-tutoriais/actionscript3/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.virtualizeid.com.br</link>
	<description>Agencia Digital de Salvador</description>
	<lastBuildDate>Sat, 27 Feb 2010 18:08:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Formulario de contato e envio de e-mail</title>
		<link>http://www.virtualizeid.com.br/2009/09/formulario-de-contato-e-envio-de-e-mail/</link>
		<comments>http://www.virtualizeid.com.br/2009/09/formulario-de-contato-e-envio-de-e-mail/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 22:01:59 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/?p=771</guid>
		<description><![CDATA[Seja em um formulário de contato, uma validação de e-mail, um pré-orçamento ou confirmação de um pedido, uma das tarefas mais comuns em projetos com Flash é o envio de e-mail. Nesse tutorial discutiremos como enviar e-mails utilizando Actionscript 3 e um script CGI.]]></description>
			<content:encoded><![CDATA[<p>Enviar e-mail é sem dúvida uma função fundamental em qualquer aplicação WEB.</p>
<p>Para entendermos a mecânica de envio de e-mail, precisamos entender o formato cliente-servidor da comunicação na Internet.</p>
<p>Quando acessamos uma página na Internet, tudo que vemos é o resultado do processamento de um arquivo que está hospedado no servidor da página. Para tanto, existem tecnologias cujo objetivo é possibilitar ao desenvolvedor da página definir como o conteúdo a ser enviado paro visitante será gerado.</p>
<p>Dessa forma, temos duas perspectivas na aplicação: a perspectiva do desenvolvedor, que, por exemplo, ao acessar o código fonte da página verá as diversas regras e algorítmos que definem como o conteúdo será gerado, e a persperctiva do cliente, que ao acessar o código-fonte da página verá apenas o conteúdo gerado, e desconhece as regras.</p>
<p>Para definir as regras para geração dinâmica de conteúdo existem linguagens como PHP, ASP ou JSP. Essas linguagem são chamadas &#8220;server-side&#8221;, pois são executadas no lado servidor. Para definir o formato, layout e mecânicas de interação da página existem linguagens como HTML, Javascript e CSS. São linguagens &#8220;client-side&#8221; pois são executadas no lado cliente (no navegador do visitante).</p>
<p>Para enviarmos um e-mail precisamos utilizar um servidor de e-mail. Os servidores de hospedagem de sites frequentemente possuem um servidor de e-mail integrado. Quando, por exemplo, configuramos nossa conta de e-mail no outlook (informando smtp, pop3, etc), estamos configurando a conexão entre o outlook e o servidor de e-mail, para que ele possa realizar os envios.</p>
<p>Da mesma forma, para enviarmos um e-mail através de uma aplicação Actionscript precisamos utilizar um servidor de e-mail. A forma mais fácil de fazer essa conexão entre nossa aplicação e o servidor de e-mail é utilizar uma página em linguagem &#8220;server-side&#8221;.</p>
<p>Nosso projeto em Actionscript envia os dados que desejamos enviar para a página e essa página conecta com o servidor de e-mail, enviando o e-mail. Nesse exemplo utilizarei uma página em linguagem PHP, mas isso se aplica a outras linguagens. Vamos ao exemplo!</p>
<p>Crie um formulário no seu projeto em Flash. Para isso crie campos de texto do tipo InpuText (nome, email e mensagem). Nomeie eles de nome_txt, email_txt e mensagem_txt. Crie também um campo de texto chamado resultado_txt (para exibirmos o resultado do envio) e um botão enviar_btn. Veja a figura (o exemplo estará disponível para download ao fim do tutorial):</p>
<div id="attachment_772" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/09/exemplo.jpg"><img src="http://www.virtualizeid.com.br/wp-content/uploads/2009/09/exemplo-300x234.jpg" alt="Exemplo do tutorial." title="Tutorial Actionscript 3 - Formulário de contato e envio de e-mails com Actionscript 3" width="300" height="234" class="size-medium wp-image-772" /></a><p class="wp-caption-text">Exemplo do tutorial.</p></div>
<p>O código para que nosso formulário funcione é apresentado a seguir:</p>
<pre class="brush: as3;">
// Associamos o click no botão enviar à função de envio de e-mail.
enviar_btn.addEventListener(MouseEvent.CLICK, EnviarEmail);

function EnviarEmail(evt)
{
	resultado_txt.text = &quot;Enviando mensagem... aguarde!&quot;;

	// Cria o objeto que realizará o envio dos dados para a página
	// envio_email.php.
	var loader:URLLoader = new URLLoader();

	// Criamos o listener que será chamado ao fim da execução do script
	// de envio de e-mail.
	loader.addEventListener(Event.COMPLETE					, FimLoad);

	// Criamos os listener que serão chamados em caso de erro ao tentar abrir
	// o script (arquivo não encontrado ou em outro domínio por exemplo).
	loader.addEventListener(IOErrorEvent.IO_ERROR				, ErroLoad);
	loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR	, ErroLoad);	

	// Definimos qual script enviará o e-mail e como serão enviados os
	// parâmetros para esse script.
	var request:URLRequest = new URLRequest(&quot;envio_email.php&quot;);
	request.method = &quot;POST&quot;;

	// Definimos os parâmetros a serem passados para o script
	// envio_email.php.
	var variables:URLVariables = new URLVariables();
	variables.nome	 	= nome_txt.text;
	variables.email		= email_txt.text;
	variables.mensagem	= mensagem_txt.text;
	request.data 		= variables;

	// Solicitamos a execução do Script.
	loader.load(request);
}

function FimLoad(evt)
{
	// Exibimos o resultado do envio.
	resultado_txt.text = evt.target.data;
}

function ErroLoad(evt)
{
	resultado_txt.text = &quot;Ocorreu um erro durante o envio do e-mail.&quot;;
}
</pre>
<p>Na linha 2 associamos o clique no botão enviar à função que realiza o envio de e-mail.</p>
<p>Na linha 10 criamos um objeto do tipo URLLoader. Esse objeto é utilizado para se carregar conteúdos de páginas externas. Ele servirá como ponte entre nossa aplicação em Flash e a página em PHP que realizará o envio do e-mail.</p>
<p>Nas linhas 14 dizemos que quando o objeto URLLoader terminar de carregar os dados da página (que definiremos qual será mais adiante) queremos que a função FimLoad seja executada. Nas linhas 18 e 19 definimos que a função ErroLoad deverá ser chamada caso ocorra algum erro durante o carregamento da página.</p>
<p>Na linha 23 criamos um objeto que define qual página deverá ser carregada. Na linha 24 definimos o formato do envio de dados para a página, não irei entrar em detalhes quanto a isso para não alongar o tutorial.</p>
<p>Na linha 28 criamos um objeto que passará parâmetros para a página que iremos carregar. Assim, poderemos definir o nome de quem está enviado o e-mail, o e-mail desta pessoa e a mensagem. Nas linhas 29 a 31 definimos os parâmetros, e na linha 32 associamos esses parâmetros ao objeto Request.</p>
<p>Por fim, na linha 35 solicitamos o carregamento da página. A partir daí entra em execução a página PHP que realizará o envio da mensagem, cujo código é apresentado a seguir:</p>
<pre class="brush: php;">
// Recuperamos os parâmetros enviados através do formulário.
$nome		= $_POST[&quot;nome&quot;];
$email		= $_POST[&quot;email&quot;];
$mensagem	= $_POST[&quot;mensagem&quot;];

// Definimos o título da mensagem (lembrando que '.' é operador de concatenação em PHP).
$assunto	= &quot;Mensagem de &quot; . $mensagem . &quot; (&quot; . $email . &quot;)&quot;;

// Definimos o destinatário da mensagem.
$destino	= &quot;seuemail@seudominio.com.br&quot;;

// Enviamos o e-mail.
if (mail($destino, $assunto, $mensagem))
{
	echo &quot;Mensagem enviada com sucesso!&quot;;
}
else
{
	echo &quot;Não foi possível enviar sua mensagem!&quot;;
}
</pre>
<p>Nas linhas 1 a 3 recuperamos os parâmetros que enviamos através do Actionscript 3. Observe que o nome dos parâmetros têm que ser idêntico aos digitado nas linhas 29 a 31 do código Actionscript. Na linha 13, utilizamos a função mail() do PHP, para realizar o envio do e-mail. Observe que isso tudo ocorre no lado servidor, e até agora não geramos nenhum conteúdo para o cliente (no caso a aplicação Flash). Na linha 15 utilizamos o comando &#8220;echo&#8221; para enviar um resultado ao cliente, que será recuperado na linha 41 da aplicação Flash, com o acesso a propriedade target.data do evento de fim de load.</p>
<p><strong><br />
Lembre-se que para que esse exemplo funcione você precisa enviá-lo (tanto o arquivo .swf e o arquivo .php) para um servidor de hospedagem com suporte a PHP.</strong></p>
<p>O uso de linguagens dinâmicas (como o PHP) e seu acesso através do Flash possibilita a criação de sistemas que acessam banco de dados, o que é fundamental em diversos projetos.</p>
<p>Vamos ficando por aqui, até o próximo tutorial. Dúvidas?</p>
<p><center><a href='http://www.virtualizeid.com.br/wp-content/uploads/2009/09/email.zip' alt="Tutorial Actionscript 3 - Formulario de contato e envio de e-mails com Actionscript 3." title="Tutorial Actionscript 3 - Formulario de contato e envio de e-mails com Actionscript 3.">Baixar tutorial</a></center></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F09%2Fformulario-de-contato-e-envio-de-e-mail%2F&amp;linkname=Formulario%20de%20contato%20e%20envio%20de%20e-mail">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/09/formulario-de-contato-e-envio-de-e-mail/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Reposicionando elementos após redimensionamento da janela</title>
		<link>http://www.virtualizeid.com.br/2009/07/reposicionando-elementos-apos-redimensionamento-da-janela/</link>
		<comments>http://www.virtualizeid.com.br/2009/07/reposicionando-elementos-apos-redimensionamento-da-janela/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 21:42:17 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=582</guid>
		<description><![CDATA[Quando desenvolvemos um site, uma preocupação que devemos ter diz respeito a resolução que será utilizada pelo visitante para visualização. Atualmente, a resolução mais comum é 1024x768. Entretanto, muitos computadores adotam resoluções superiores a esta, e alguns resoluções inferiores. No flash, podemos redistribuir os elementos do layout de um site, posicionando-os de forma a explorar toda a área disponível no navegador, resultando em um layout mais agradável e com mais espaço. Vejamos como fazer isso neste tutorial.]]></description>
			<content:encoded><![CDATA[<p>O layout de uma página de internet ou de uma aplicação desktop em flash deve ser projetado tendo em mente uma resolução mínima. Caso não tratemos a possibilidade de várias resoluções (ou mesmo o redimensionamento da área disponível no navegador), é possível que o usuário do produto veja barras de rolagem horizontais e verticais (em aplicações WEB), ou que parte do seu conteúdo seja cortado.</p>
<p>Barras de rolagem (principalmente a horizontal) afetam a usabilidade e a estética do site. Para evitar esse tipo de problema em aplicações Flash, podemos estabelecer que o nosso conteúdo SWF ocupará 100% da área disponível no navegador, conforme explicado no tutorial &#8220;Fazendo o site ocupar toda a área do navegador&#8221;.</p>
<p>Entretanto, quando adotamos essa abordagem, o conteúdo Flash é redimensionado de acordo com a resolução e área disponível no navegador do visitante, o que pode resultar em efeitos indesejados na aparência final (redimensionamentos que não seguem proporção por exemplo).</p>
<p>Para evitar esse tipo de efeito, podemos gerenciar o redimensionamento do conteúdo em Flash, reposicionando e redimensionado o conteúdo conforme desejarmos.</p>
<p>Podemos ter, por exemplo, um website composto de um menu esquerdo, um conteúdo central, e um espaço na lateral direita reservado para banners. Eu desejo que o menu esquerdo fique sempre a 20 pixels da margem esquerda do navegador (centralizado verticalmente), que o conteúdo central fique sempre no centro (vertical e horizontal), e que o espaço de banners fique a 20 pixels da margem direita (centralizado verticalmente). Desejo também que o conteúdo não seja rediomensionado de acordo com o tamanho da área do navegador.</p>
<p>Tendo em vista essas especificações, devemos definir os pontos de registro dos movieclips correspondentes de acordo com os respectivos alinhamentos. Exemplo, se eu quero que o menu esquerdo fique alinhado a esquerda horizontalmente e ao centro verticalmente, o ponto de registro do seu movieclip deverá estar alinhado a esquerda e centralizado verticalmente, conforme a figura a seguir:</p>
<div id="attachment_583" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/ponto-registro.jpg"><img class="size-medium wp-image-583" title="Tutorial actionscript - Definição do ponto de registro - Criação de sites" src="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/ponto-registro-300x240.jpg" alt="Definindo corretamente o ponto de registro" width="300" height="240" /></a><p class="wp-caption-text">Definindo corretamente o ponto de registro</p></div>
<p>Essa configuração do ponto de registro não é obrigatória, mas facilitará o nosso trabalho ao alinhar o elemento. A mesmo lógica se aplica a outros tipos de alinhamento. Por exemplo, se desejo alinhar um elemento ao centro (horizontalmente e verticalmente), seu ponto de registro deve estar no centro.</p>
<p>Após definirmos corretamente os pontos de registro, precisamos dizer ao flash que não desejamos que ele redimensione o conteúdo de acordo com a área disponível. Precisamos também, definir uma orientação para o stage, quando o arquivo flash estiver em tamanhos superiores ou inferiores ao tamanho original do stage. Para isso, usamos o código a seguir:</p>
<pre class="brush: as3;">
// Indica que o conteúdo não dever ser redimensionado.
stage.scaleMode = StageScaleMode.NO_SCALE;

// Indica que caso a área do flash (no navegador por exemplo) seja
// maior ou menor que o stage, o ponto 0,0 do stage deve-se posicionar
// no canto superior (TOP) esquerdo (LEFT) da área.
stage.align		= StageAlign.TOP_LEFT;
</pre>
<p>Feito isso, podemos tratar o redimensionamento da área de conteúdo com facilidade. Para exemplificar, vou utilizar 3 conteúdos, um que será alinhado a 10 pixels da margem superior esquerda, outro que será alinhado ao centro e outro que será alinhado a 10 pixels da margem inferior direita, conforme a figura a seguir (o código fonte deste tutorial encontra-se no fim do texto):</p>
<div id="attachment_584" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/estrutura.jpg"><img class="size-medium wp-image-584" title="Tutorial actionscript - estrutura do exemplo - criação de sites" src="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/estrutura-300x233.jpg" alt="Estrutura do exemplo apresentado nesse tutorial" width="300" height="233" /></a><p class="wp-caption-text">Estrutura do exemplo apresentado nesse tutorial</p></div>
<p>Nesse exemplo, nomearei os movieclips dos quadrados como quadEsqTop_mc, quadCent_mc e quadDirBaixo_mc (respectivamente da esquerda para direita).</p>
<p>Para realizar o reposicionamento dos elementos a partir do redimensionamento do stage criamos um ouvinte para o evento &#8220;Event.RESIZE&#8221;. O evento &#8220;Event.RESIZE&#8221; sempre que o conteúdo flash é redimensionado. Veja:</p>
<pre class="brush: as3;">

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align		= StageAlign.TOP_LEFT;

// Criamos um ouvinte para o evento Event.RESIZE (redimensionamento).
stage.addEventListener(Event.RESIZE, Redimensionamento);
function Redimensionamento(evt)
{
	// Alinhamento a 10 pixels da margem superior esquerda.
	quadEsqTop_mc.x = 10;
	quadEsqTop_mc.y = 10;

	// Alinhamento ao centro.
	quadCent_mc.x	= stage.stageWidth 	/ 2;
	quadCent_mc.y	= stage.stageHeight	/ 2;

	// Alinhamento a 10 pixels da margem inferior direita.
	quadDirBaixo_mc.x = stage.stageWidth 	- 10;
	quadDirBaixo_mc.y = stage.stageHeight 	- 10;
}

// Chamamos a função inicialmente para que os quadrados posicionem-se
// nas margens desejadas.
Redimensionamento(null);
</pre>
<p>Na linha 05, associamos o evento de redimensionamento à função Redimensionamento, que irá tratar esse evento. Nas linhas 09 a 18 posicionamos os quadrados de acordo com o desejado. Utilizamos as propriedades stage.stageWidth e stage.stageHeight para saber a largura e altura atuais do stage.</p>
<p>Na linha 23 realizamos uma chamada à função, para assegurar que assim que o site seja carregado a função seja disparada, e a distribuição dos elementos seja aplicada.</p>
<p>Experimente rodar esse exemplo no flash e redimensionar a janela do .SWF. Veja que as margens se mantêm as mesmas, e quadrado central permanece sempre no centro.</p>
<p>Dúvidas, é só perguntar! Até o próximo artigo!</p>
<p><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/exemplo.fla">Tutorial actionscript &#8211; Reposicionando elementos após redimensionamento da janela</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F07%2Freposicionando-elementos-apos-redimensionamento-da-janela%2F&amp;linkname=Reposicionando%20elementos%20ap%C3%B3s%20redimensionamento%20da%20janela">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/07/reposicionando-elementos-apos-redimensionamento-da-janela/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Dicas de performance</title>
		<link>http://www.virtualizeid.com.br/2009/07/dicas-de-performance/</link>
		<comments>http://www.virtualizeid.com.br/2009/07/dicas-de-performance/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 15:17:01 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[3. Avançado]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=566</guid>
		<description><![CDATA[Em certos tipo de projeto o desempenho é um fator crítico para uma boa experiência do usuário (jogos eletrônicos por exemplo). Nesse post apresentamos algumas dicas que podem ser úteis para otimizar e acelerar o desempenho do seu filme em Flash / Actionscript 3.]]></description>
			<content:encoded><![CDATA[<p>É fato que o desempenho oferecido pelo Actionscript 3, apesar de ser bastante superior ao actionscript 2, ainda deixa muito a desejar. O Actionscript é uma linguagem interpretada (script), e por isso seu desempenho dificilmente atingirá o de verdadeiras linguagens de programação, utilizadas para aplicações mais avançadas, tal como o C/C++. Os problemas de desempenho do Actionscript se evidenciam quando trabalhamos em projetos onde interatividade e  animação se fazem presente de forma intensiva.</p>
<p>Assim, é importante conhecer algumas diretrizes para se obter melhor desempenho em projetos em Flash / Actionscript 3. A seguir, enumeramos numa ordem de importância, as diretrizes para se otimizar o desempenho de sua aplicação em flash.</p>
<h3><span style="text-decoration: underline;"><strong>1. Sempre que possível, use bitmaps ao invés de vetores</strong></span></h3>
<p>O flash se diferenciou na Web por ser um programa vetorial. O conteúdo em vetor era extremamente adequado para a Web de alguns anos atrás, por ser leve para ser transferido pela rede. Hoje, o tamanho final do projeto (tamanho em disco) ainda é um fator importante, porém não crucial. É importante encontrar um equilíbrio entre símbolos em formato de vetor e símbolos em formato de imagem.</p>
<p>Vetores são pequenos pois representam imagens através de funções matémáticas. Entretanto, cada vez que um vetor é desenhado na tela, a função que o representa precisa ser executada, para que ele seja convertido em uma representação visual, e posteriormente desenhado. Uma imagem, por sua vez, precisa apenas ser desenhada. Da pra imaginar a diferença de desempenho não é?</p>
<p>Assim a dica é: se você precisa otimizar o desemenho do seu projeto, só utilize vetores onde for indispensável.</p>
<h3><span style="text-decoration: underline;"><strong>2. Evite máscaras.</strong></span></h3>
<p>Máscaras forçam o flash player a calcular o que deve e o que não deve ser renderizado a cada desenho de quadro. Caso a máscara possua um formato complexo a situação se agrava ainda mais. Dessa forma, sempre que possível, utilize um shape simples, ou mesmo uma imagem, sobre o conteúdo que deseja mascarar, ao invés de utilizar uma máscara.</p>
<h3><span style="text-decoration: underline;"><strong>3. Vídeos e imagens (PNGs) com canal de alpha</strong></span></h3>
<p>Assim como para máscaras, os canais de alpha tornam complexo a renderização de um filme ou imagem. Dessa forma, evite utilizá-los sempre que possível.</p>
<h3><span style="text-decoration: underline;"><strong>4. Use cacheAsBitmap (da forma correta)</strong></span></h3>
<p>&#8220;cacheAsBitmap&#8221; é uma propriedade dos MovieClips que permite-nos informar ao flash que aquele MovieClip deverá ser armazenado em memória como um Bitmap e não como um vetor. Dessa forma, ao renderizar o MovieClip o flash não precisará fazer calcular a função que representa o vetor, pois ele ja terá em memória o vetor em um formato de bitmap.</p>
<p>&#8220;cacheAsBitmap&#8221; parece então ser a solução para todos os problemas de desempenho do flash, certo? Não é bem assim.Você só deve utilizar &#8220;cacheAsBitmap&#8221; em MovieClips que não possuem animação e que não serão alterados ao longo da execução do filme (rotação, escalonamento, aplicação de filtros, etc). Caso o filme seja alterado, o flash precisará recalcular a função que representa o vetor, o que tornará o processo ainda mais lento que se ele não estivesse marcado como &#8220;cacheAsBitmap&#8221;.</p>
<h3><span style="text-decoration: underline;"><strong>5. ENTER_FRAME e setInterval</strong></span></h3>
<p>Crie o mínimio de event listeners para o evento ENTER_FRAME. Em algumas aplicações, como os jogos, o ideal é que você crie apenas um event listener para esse evento, e ele centralizará todos os controles. Lembre-se também de remover os event listeners quando a captura do evento não for mais necessária (utilize &#8220;removeEventListener()&#8221;).</p>
<p>O mesmo se aplica ao setInterval. Crie o mínimo de intervals possível.Utilize clearInterval para remover o interval criado da memória e parar sua execução.</p>
<h3><span style="text-decoration: underline;"><strong>6. Recorte símbolos grandes</strong></span></h3>
<p>Caso você possua símbolos que, por serem grandes, não estarão completamente visíveis na tela, recorte as partes não visíveis.</p>
<h3><span style="text-decoration: underline;"><strong>7. Complexidade algorítmica</strong></span></h3>
<p>Faça uma análise da complexidade algorítimica dos seus códigos actionscript. Otimize seus códigos!</p>
<p>Essas são as principais dicas para se obter melhores desempenhos nas aplicações. Qualquer dúvida é só perguntar! Até o próximo artigo!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F07%2Fdicas-de-performance%2F&amp;linkname=Dicas%20de%20performance">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/07/dicas-de-performance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fazendo o site ocupar toda a área do navegador</title>
		<link>http://www.virtualizeid.com.br/2009/07/fazendo-o-site-ocupar-toda-a-area-do-navegador/</link>
		<comments>http://www.virtualizeid.com.br/2009/07/fazendo-o-site-ocupar-toda-a-area-do-navegador/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 20:14:02 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Artigos e Tutoriais]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=473</guid>
		<description><![CDATA[Quando desenvolvemos um Website Full-Flash (completamente em flash) normalmente desejamos que o site ocupe toda a área disponível do browser. Isso, além de nos oferecer mais área para explorar, também apresenta o layout de uma forma mais integrada ao navegador. Vejamos como fazer isso nesse tutorial.]]></description>
			<content:encoded><![CDATA[<p>Quando desenvolvemos um Website Full-Flash (completamente em flash) normalmente desejamos que o site ocupe toda a área disponível do browser. Isso, além de nos oferecer mais área para explorar, também apresenta o layout de uma forma mais integrada ao navegador.</p>
<p>Para que nosso site ocupe 100% da área disponível, precisamos fazer duas coisas (os arquivos fontes deste tutorial estão disponíveis ao fim do texto):</p>
<p>1. Adicionar um CSS ao HTML da página que inclui o arquivo .SWF, indicando que não desejamos nenhum tipo de borda no site. O CSS é uma linguagem padrão que trabalha junto ao HTML na formatação/estilização de sites. É uma linguagem cujo conhecimento é importantíssimo para Web Designers. Veja o exemplo a seguir.</p>
<pre class="brush: xml; highlight: [9,10,11,12,13,14,15,16];">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
		&lt;title&gt;Virtualize Interatividade Digital - Tutorial Actionscript&lt;/title&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			swfobject.embedSWF(&quot;exemplo.swf&quot;, &quot;exemplo&quot;, &quot;100%&quot;, &quot;100%&quot;, &quot;9.0.0&quot;, &quot;expressInstall.swf&quot;);
		&lt;/script&gt;
		&lt;style type=&quot;text/css&quot;&gt;
		body
		{
			height:100%;
			margin:0;
			padding:0;
		}
		&lt;/style&gt;
	&lt;/head&gt;
	&lt;body bgcolor=&quot;#000000&quot;&gt;
		&lt;div id=&quot;exemplo&quot;&gt;
			&lt;h1&gt;Conteúdo alternativo&lt;/h1&gt;
			&lt;p&gt;&lt;a href=&quot;http://www.adobe.com/go/getflashplayer&quot;&gt;&lt;img src=&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot; alt=&quot;Get Adobe Flash player&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>2. Precisamos indicar que o flash deve ocupar 100% da altura e largura da página, o que fazemos utilizando os parâmetros da tag object ou do SWFObject. O SWFObject é uma pequena biblioteca em Javascript, que permite a inclusão de conteúdo Flash em páginas HTML, através de um comando Javascript. Essa bibliteca nos livra da preocupação em identificar se o usuário possui Flash player ou Javascript ativado. Aconselho utilizá-la em seus projetos. Veja o código:</p>
<pre class="brush: xml; highlight: [6,7,8,19,20,21,22];">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
		&lt;title&gt;Virtualize Interatividade Digital - Tutorial Actionscript&lt;/title&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			swfobject.embedSWF(&quot;exemplo.swf&quot;, &quot;exemplo&quot;, &quot;100%&quot;, &quot;100%&quot;, &quot;9.0.0&quot;, &quot;expressInstall.swf&quot;);
		&lt;/script&gt;
		&lt;p&gt;&lt;style type=&quot;text/css&quot;&gt;
		body&lt;
		{
			height:100%;
			margin:0;
			padding:0;
		}
		&lt;/style&gt;
	&lt;/head&gt;
	&lt;body bgcolor=&quot;#000000&quot;&gt;
		&lt;div id=&quot;exemplo&quot;&gt;
			&lt;h1&gt;Conteúdo alternativo&lt;/h1&gt;
			&lt;p&gt;&lt;a href=&quot;http://www.adobe.com/go/getflashplayer&quot;&gt;&lt;img src=&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot; alt=&quot;Get Adobe Flash player&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nas linhas 06 a 09, importamos e fazemos uso da biblioteca SWFObject. Na linha 08, está o comando que realiza toda a &#8220;mágica&#8221; do processo. O 1° parâmetro deste comando é o arquivo .swf a ser exibido. O 2° é o identificador do arquivo, um nome que daremos para nosso conteúdo. O 3° e 4° parâmetros são as dimensões do arquivo, largura e altura, o qual pode ser fornecido em percentagem. O 5° parâmetro é a versão de Flash Player necessária para rodar o arquivo.O 6° parâmetro é um utilitário para instalação automática do Flash Player que já vem com o SWFObject.</p>
<p>Como falei, o SWFObject identifica a versão do Flash do visitante. Caso a versão seja inferior a exigida o conteúdo da div de id correspondente ao 2° parâmetro da chamada &#8220;swfobject.embedSWF()&#8221;. Caso  contrário, o SWF será exibido no lugar da div.</p>
<p>Isso é o suficiente para o seu conteúdo Flash ser executado ocupando toda a área do navegador. Observe que quando definimos tamanho 100% para o conteúdo flash, o conteúdo também cresce, e não apenas o Stage. Isso não é desejado na maioria dos projetos. Nos próximo artigos veremos como evitar isso e também como alinhar os elementos do site de acordo com o redimensioanamento.</p>
<p>Dúvidas, é só perguntar! Até o próximo artigo!</p>
<p><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/Fazendo-o-site-ocupar-toda-a-área-do-navegador.zip">Tutorial actionscript &#8211; Fazendo o site ocupar toda a área do navegador</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F07%2Ffazendo-o-site-ocupar-toda-a-area-do-navegador%2F&amp;linkname=Fazendo%20o%20site%20ocupar%20toda%20a%20%C3%A1rea%20do%20navegador">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/07/fazendo-o-site-ocupar-toda-a-area-do-navegador/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Laços de repetição</title>
		<link>http://www.virtualizeid.com.br/2009/07/lacos-de-repeticao/</link>
		<comments>http://www.virtualizeid.com.br/2009/07/lacos-de-repeticao/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 15:05:10 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[1. Básico]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Artigos e Tutoriais]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[laços de repeticao]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=423</guid>
		<description><![CDATA[Ao desenvolver projetos em Action Script, frequentemente nos deparamos com a necessidade de executar rotinas repetitivamente. Para isso, usamos os comandos de repetição (laços de repetição), cujo domínio é fundamental para criação de projetos avançados. Vejamos como eles funcionam.]]></description>
			<content:encoded><![CDATA[<p>Laços de repetição constituem uma recurso das linguagens de programação para a realização de tarefas repetitivas. Os laços permitem a execução de um conjunto de comandos repetitivamente enquanto uma condição se estabelecer.</p>
<p>Imagine por exemplo um Website que carrega, em sua galeria de fotos, as imagens presentes em um arquivo XML, ou a lista de imagens presentes num arquivo de texto (na sessão intermediário você encontra artigos descrevendo como carregar arquivos XML).</p>
<p>Não sabemos quantas imagens estarão no XML, a quantidade será variável. Dessa forma, precisamos de um mecanismo para carregar as imagens <strong>enquanto houver imagens</strong>.</p>
<p>Observe que nesse exemplo, temos um processo a se repetir (carregar as imagens) e uma condição (enquanto houver imagens).</p>
<p>Para execução desse tipo de tarefa o Action Script nos fornece os laços de repetição, dentre os quais destacam-se o laço while (que significa enquanto) e o laço for (que significa para). Vejamos a sintaxe deles:</p>
<pre class="brush: as3;">

while (condição)
{
	// Comandos.
}

for (var nomeDaVariavel = valorInicial; condicao; comando)
{
	// Comandos.
}
</pre>
<p>Vamos a um exemplo simples. Vamos criar uma função para calcular o fatorial de um número. O fatorial de um número é o próprio número multiplicado por todos os seus antecessores positivos. Por exemplo, o fatorial de 3 e 3 x 2 x 1 = 6. O fatorial de 5 é 5 x 4 x 3 x 2 x  1 = 120.</p>
<p>Observamos nesse exemplo, que trata-se de uma tarefa repetitiva, onde iremos empregar um laço de repetição. A tarefa a se repetir é a multiplicação e a condição é que o valor a ser mutiplicado seja maior que zero.</p>
<p>Vamos para o Flash. Criarei dois campos de texto no stage. Um será do tipo input text (chamarei ele de fatorial_txt), e será usado para que o usuário digite o valor o qual ele deseja calcular o fatorial. O outro será um dynamic text (chamarei ele de resultado_txt) e será usado para que mostremos ao usuário o resultado. Criarei também um botão (de nome calcular_btn). Quando o usuário clicar nesse botão o cálculo será realizado (o arquivo com o exemplo está disponível para download no fim do tutorial):</p>
<div id="attachment_425" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/fatorial1.JPG"><img class="size-medium wp-image-425" title="Tutorial laços de repetição em Actionscript 3." src="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/fatorial1-300x232.jpg" alt="Criando os campos de texto." width="300" height="232" /></a><p class="wp-caption-text">Criando os campos de texto.</p></div>
<p>Vamos ao código:</p>
<pre class="brush: as3;">

// Função que realiza o cálculo do fatorial. Essa função é invocada quando
// o usuário clica em calcular.
function Fatorial(evt: MouseEvent)
{
	// Verifica se o usuário informou o valor.
	if (fatorial_txt.text == &quot;&quot;)
	{
		resultado_txt.text = &quot;Informe o valor.&quot;;
	}
	else
	{
		// Recupera o valor que o usuário digitou, convertendo-o
		// para o tipo int
		var valor = int(fatorial_txt.text);

		// Cria uma variavel para armazenar o resultado. Inicializa essa variável
		// com valor 1.
		var resultado = 1;

		// Usa o laço while para calcular o resultado.
		while (valor &gt; 0)
		{
			// Multiplica o resultado pelo valor.
			resultado = resultado * valor;

			// Subtrai o valor em 1.
			valor = valor - 1;

			// Exibe o valor (apenas para entendermos melhor).
			trace(valor);
		}

		// Exibe o resultado.
		resultado_txt.text = &quot;O resultado é&quot; + resultado;
	}
}

// Associa o evento de clicar no botão à função que calcula o fatorial.
calcular_btn.addEventListener(MouseEvent.CLICK, Fatorial);
</pre>
<p>Na linha 06 verificamos se o campo de texto input foi preenchido pelo usuário. Caso não tenha sido, exibimos a mensagem &#8220;Informe o valor.&#8221; no campo de texto fatorial_txt. Na linha 14 recuperamos o valor digitado pelo usuário. Veja que temos que fazer uma conversão (também chamada cast), usando o comando &#8220;int(alvo)&#8221;. Isso porque o que o usuário digita em um campo de texto assume o tipo textual (String), e não podemos realizar operações matemáticas em uma String. Assim armazenamos na variável valor o que foi digitado pelo usuário, mas em formato numérico.</p>
<p>Na linha 21 executamos o laço while. Assim, tudo que estiver dentro deste laço (o que é definido pelas chaves { }), vai se repetir enquanto a condição estabelecida entre os parênteses for verdadeira.</p>
<p>Vamos fazer uma simulação para entendermos melhor. Vamos supor que o usuário digite 3 e clique em calcular. A variável resultado é iniciada como 1 e o valor como 3.</p>
<p><strong>Primeira repetição</strong>: a condição é satisfeita, tendo em vista que o valor é 3, sendo maior que 0. A linha 24 faz o resultado passar a valer 3. A linha 27 faz o valor valer 2.</p>
<p><strong>Segunda repetição</strong>: a condição é satisfeita, tendo em vista que o valor é 2, sendo maior que 0. A linha 24 faz o resultado passar a valer 6. A linha 27 faz o valor valer 1.</p>
<p><strong>Terceira repetição</strong>: a condição é satisfeita, tendo em vista que o valor é 1, sendo maior que 0. A linha 24 faz o resultado passar a valer 6. A linha 27 faz o valor valer 0.</p>
<p><strong>Quarta repetição</strong>: a condição não é satisfeita, tendo em vista que o valor é 0, não sendo maior que 0. O laço de repetição termina.</p>
<p>O laço for também poderia ser utilizado para solucionar esse mesmo problema. Veja como seria (apenas o trecho do laço de repetição):</p>
<pre class="brush: as3;">
for (var resultado = 1; valor &gt; 0; valor--)
{
	// Multiplica o resultado pelo valor.
	resultado = resultado * valor;
}
</pre>
<p>O laço for é mais compacto. Veja que em apenas uma linha eu consigo declarar e iniciar a variável resultado, estabelecer a condição do laço (valor &gt; 0) e determinar um comando para ser executado a cada repetição (valor&#8211;). O comando &#8220;valor&#8211;;&#8221; equivale a &#8220;valor = valor &#8211; 1;&#8221; assim como &#8220;valor++;&#8221; equivale a &#8220;valor = valor + 1;&#8221; São apenas formas compactas de se escrever essas idéias.</p>
<p>Nos tutoriais da sub-categoria Intermediário encontraremos exemplos mais completos, que usarão os conceitos aprendidos. Caso tenha alguma dúvida, fique a vontade em postar! Até o próximo tutorial!</p>
<p style="text-align: center;"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/lacos-de-repeticao.zip">Tutorial laços de repetição em Actionscript 3.</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F07%2Flacos-de-repeticao%2F&amp;linkname=La%C3%A7os%20de%20repeti%C3%A7%C3%A3o">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/07/lacos-de-repeticao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Estruturas condicionais</title>
		<link>http://www.virtualizeid.com.br/2009/07/estruturas-condicionais/</link>
		<comments>http://www.virtualizeid.com.br/2009/07/estruturas-condicionais/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 14:17:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[1. Básico]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[estruturas condicionais]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=346</guid>
		<description><![CDATA[Estruturas condicionais nos permitem tomar ações baseando-se na avaliação de condições e são fundamentais para desenvolvimentos de projetos Flash. Vejamos nesse artigo como usá-las.]]></description>
			<content:encoded><![CDATA[<p>Estruturas condicionais nos permitem tomar ações baseando-se na avaliação de condições.</p>
<p>Imaginemos, por exemplo, um website de comércio eletrônico. Em uma determinada sessão, teríamos a listagem de produtos, como acontece por exemplo no mercado livre. Podemos desejar que se um produto não tiver imagem, uma imagem padrão seja exibida.</p>
<p>Algo como:</p>
<p><strong>se </strong>o produto atual tem imagem <strong>então</strong><br />
- exiba a imagem do produto atual<br />
<strong>se não</strong><br />
- exiba a imagem padrão<br />
<strong>fim</strong></p>
<p>Essa é a forma como devemos pensar as condições que vão compor o nosso projeto. O equivalente a essa lógica, em Action Script, seria:</p>
<pre class="brush: as3;">
//...

// Verificamos se a propriedade imagem do objeto que representa o produto
// está definida.
if (produtoAtual.imagem != null)
{
	// Adicionamos a imagem ao local onde a imagem deve aparecer.
	fotoProduto_mc.addChild( produtoAtual.imagem );
}
else
{
	// Adicionamos a imagem padrão ao local onde a imagem deve aparecer.
	fotoProduto_mc.addChild( imagemPadrao );
}

//...
</pre>
<p>Na linha 5, utilizamos o operador &#8220;!=&#8221; para verificar a condição de diferença. Tal trecho de código equivale a avaliação da condição:</p>
<p style="text-align: center;"><em>&#8220;imagem do produto atual diferente de nulo&#8221;</em></p>
<p>Utilizamos o valor null (nulo) para verificar se a instância de um objeto, que não seja primitivo, está definida (iniciada).  Sempre que criamos uma variável ela possuirá um valor padrão, até que este seja alterado por nós. Veja na tabela a seguir:</p>
<p style="text-align: left;">Tipo                                         Valor padrão<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
String                                           null<br />
int e Number                             0 (zero)<br />
Boolean                                      false<br />
Objetos não primitivos                 null</p>
<p>Para entender melhor, execute o código a seguir:</p>
<pre class="brush: as3;">
// Cria uma variavel do tipo boolean (tipo primitivo).
var variavelBooleana: Boolean;

// Cria uma variavel do tipo int (tipo primitivo).
var variavelInteira: int;

// Cria uma variavel do tipo String (tipo primitivo).
var variavelTextual: String;

// Cria uma variavel do tipo MovieClip (tipo não primitivo).
var variavelMovieClip: MovieClip;

// Exibe o valor inicial da variável tipo boolean.
trace(&quot;O valor inicial da variável boolean é &quot; + variavelBooleana);

// Exibe o valor inicial da variável tipo int.
trace(&quot;O valor inicial da variável int é &quot; + variavelInteira);

// Exibe o valor inicial da variável tipo String.
trace(&quot;O valor inicial da variável String é &quot; + variavelTextual);

// Exibe o valor inicial da variável tipo MovieClip.
trace(&quot;O valor inicial da variável MovieClip é &quot; + variavelMovieClip);
</pre>
<p>Voltando ao exemplo do site de comércio eletrônico, comparar o valor da imagem do produtoAtual com null nos fornece uma condição para saber se aquela variável foi preenchida em alguma outra parte do site. Caso ela não tenha sido preenchida, significa que o produto não possui imagem. Assim, adicionamos uma imagem padrão (representada pela variável &#8220;imagemPadrao&#8221; no exemplo, que poderia ser um MovieClip por exemplo) ao container de imagem (fotoProduto_mc).</p>
<p>Vamos desenvolver agora um exemplo simples e funcional, combinando o uso de Eventos e Estruturas condicionais. Vamos iniciar um projeto flash e criar uma caixa de texto dinâmico, a qual irei chamar de texto_txt:</p>
<div id="attachment_362" class="wp-caption aligncenter" style="width: 310px"><img class="size-medium wp-image-362" title="Tutorial Action Script 3 estruturas condicionais" src="http://www.virtualizeid.com.br/wp-content/uploads/2009/07/texto-300x226.jpg" alt="Estrutura do exemplo" width="300" height="226" /><p class="wp-caption-text">Estrutura do exemplo</p></div>
<p>Desejo agora escrever um código Action Script que preencha a caixa de texto informando se o cursor do mouse está a direita ou esquerda do centro do Stage. Vejamos:</p>
<pre class="brush: as3;">
// Função que irá tratar o evento de movimentação
// do cursor do mouse.
function AtualizarPosicao(evt: MouseEvent)
{
	// Caso a posição do cursor seja superior à metade da largura
	// do Stage.
	if (mouseX &gt; stage.stageWidth / 2)
	{
		texto_txt.text = &quot;Cursor do mouse a direita&quot;;
	}
	// Caso contrário.
	else
	{
		texto_txt.text = &quot;Cursor do mouse a esquerda&quot;;
	}
}

// Associamos o evento de mover o mouse sobre o stage à função AtualizarPosicao
stage.addEventListener(MouseEvent.MOUSE_MOVE, AtualizarPosicao);
</pre>
<p>Na linha 7 introduzimos uma nova propriedade, pertencente a classe MovieClip. Trata-se da propriedade mouseX que indica a posição horizontal do mouse em relação ao MovieClip. Como não especificamos um nome de instância de MovieClip, o flash assumirá a timeline que possui o código Action Script (ou seja, a Timeline principal, o root) como sendo a &#8220;dona&#8221; dessa propriedade. Também existe a propriedade mouseY que indica a posição vertical, funcionando da mesma forma.</p>
<p>Assim, em &#8220;mouseX &gt; stage.stageWidth / 2&#8243; estamos avaliando se a posição horizontal do cursor do mouse (em relação ao movie clip root) é maior que a metade da largura do stage.</p>
<p>É importante lembrar que esse evento será disparado sempre que o cursor do mouse se mover, o que garantirá a exibição da informação atualizada com relação à sua posição.</p>
<p>No próximo artigo discutiremos as estruturas de repetição, que como o nome indica, nos permite executar rotinas de forma repetitiva, enquanto uma condição se manter. Em caso de dúvidas, pergunte! Até lá.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F07%2Festruturas-condicionais%2F&amp;linkname=Estruturas%20condicionais">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/07/estruturas-condicionais/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando MovieClips dinamicamente com Action Script 3 &#8211; III</title>
		<link>http://www.virtualizeid.com.br/2009/06/criando-movieclips-dinamicamente-com-action-script-3-iii/</link>
		<comments>http://www.virtualizeid.com.br/2009/06/criando-movieclips-dinamicamente-com-action-script-3-iii/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 21:09:36 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[Actionscript 3]]></category>
		<category><![CDATA[Artigos e Tutoriais]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[criando movieclips dinamicamente]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=495</guid>
		<description><![CDATA[Neste artigo exploraremos as funções de desenho oferecidas pelo Flash. Elas permitem a criação de projetos interessantes, como jogos de pintar e aplicações onde o usuário pode alterar e brincar com o layout.]]></description>
			<content:encoded><![CDATA[<p>Criar MovieClips dinamicamente, utilizando Action Script 3, é uma tarefa fundamental para ao desenvolvimento de aplicações dinâmicas e interativas.</p>
<p>Quando falamos em criação de MovieClips dinamicamente, temos três finalidades:</p>
<p>1. Utilizar o MovieClip criado como container para outros símbolos.<br />
2. Utilizar o MovieClip criado como um elemento de interface modelo (que se repetirá).<br />
3. Desenhar dinamicamente o conteúdo do MovieClip.</p>
<p>Nesse artigo iremos falar sobre a terceira finalidade.</p>
<p>Para acessar os recursos de desenho nós utilizaremos a propriedade graphics dos MovieClips. Essa propriedade nos fornece acesso a um objeto do tipo Graphics, que está presente em todos os MovieClips.<br />
Ao realizar uma chamada a um método da classe Graphics o flash realiza a ação sobre o movieclip proprietário do atributo graphic correspondente. Por exemplo, se você usa &#8220;movie_mc.drawCircle()&#8221;, você estará desenhando um círculo dentro do MovieClip de nome &#8220;movie_mc&#8221;.  Execute o exemplo a seguir no flash:</p>
<pre class="brush: as3;">
// Criamos um MovieClip vazio.
var circulo_mc = new MovieClip();

// Definimos a cor (ox123456) ao desenharmos dentro do MovieClip circulo_mc.
circulo_mc.graphics.beginFill(0x123456);

// Desenhamos um círculo com a cor específicada no comando anterior, na posição
// 100,100 e com raio de 50 pixels.
circulo_mc.graphics.drawCircle(100, 100, 50);

// Adicionamos o MovieClip criado/desenhado ao root.
addChild(circulo_mc);
</pre>
<p>Os recursos da classe Graphics permite-nos a criação de aplicações muito intessantes. Existem até mesmo programas de edição gráfica disponíveis na Web que utilizam a classe Graphics. Sugiro ao leitor acessar o help da classe Graphics do flash. Lá encontramos a lista completa de métodos da classe.</p>
<p>Vamos a um exemplo um pouco mais complexo. Crie um projeto em flash e adicione dois botões ao stage, um chamado &#8220;desenhar_btn&#8221; e outro chamado &#8220;apagar_btn&#8221;. Esses botões vão assumir a função dos botões de lápis e borracha da toolbar de uma aplicação gráfica, como o paint, por exemplo. Veja:</p>
<div id="attachment_501" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/imagem.JPG"><img class="size-medium wp-image-501" title="Tutorial actionscript - criando MovieClips dinamicamente." src="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/imagem-300x227.jpg" alt="Tutorial actionscript - criando MovieClips dinamicamente." width="300" height="227" /></a><p class="wp-caption-text">Estrutura do exemplo</p></div>
<p>Agora adicione o código Actionscript a seguir na primeira frame do projeto:</p>
<pre class="brush: as3;">
// Indica se o botão do mouse está pressionado.
var desenhando   = false;

// Indica qual ação deve ser realizada de acordo com o botão clicado (desenhar ou apagar).
var modo		 = &quot;&quot;;

// Ouvintes para os eventos do mouse.
stage.addEventListener(MouseEvent.MOUSE_DOWN	, IniciarDesenho);
stage.addEventListener(MouseEvent.MOUSE_UP		, TerminarDesenho);
stage.addEventListener(MouseEvent.MOUSE_MOVE	, Desenhar);

// Ouvintes para os botões.
desenhar_btn.addEventListener(MouseEvent.CLICK	, AlterarModo);
apagar_btn.addEventListener(MouseEvent.CLICK	, AlterarModo);

// Tratador do evento de movimentação do cursor do mouse. Realiza o desenho
// quando o usuário pressiona a tecla do mouse.
function Desenhar(evt: Event)
{
	if (desenhando)
	{
		// Desenha um circulo preto na posição do mouse (lápis).
		if (modo == &quot;desenhar&quot;)
		{
			container_mc.graphics.beginFill(0x000000, 0.5);
			container_mc.graphics.drawCircle(mouseX, mouseY, 2);
		}
		// Desenha um circulo branco na posição do mouse (borracha).
		else
		{
			container_mc.graphics.beginFill(0xFFFFFF, 1);
			container_mc.graphics.drawCircle(mouseX, mouseY, 20);
		}

		// Assegura que o desenho estará atrás dos demais elementos (botões).
		if (getChildAt(0) != container_mc) swapChildren(container_mc, getChildAt(0));
	}
}

// Tratador do evento de clique nos botões &quot;Desenhar&quot; e &quot;Apagar&quot;.
function AlterarModo(evt: Event)
{
	if (evt.target.name == &quot;desenhar_btn&quot;)	modo = &quot;desenhar&quot;;
	else modo = &quot;apagar&quot;;
}

// Tratadores dos eventos de pressionar e soltar tecla do mouse.
function IniciarDesenho(evt: Event)
{
	desenhando = true;
}

function TerminarDesenho(evt: Event)
{
	desenhando = false;
}
</pre>
<p>Nas linhas 7 a 10 criamos os EventListeners para os eventos do mouse, pois desejamos que quando o usuário clique no stage ele desenhe ou apague na posição clicada.</p>
<p>Nas linhas 13 e 14 criamos os EventListeners para os botões &#8220;desenhar_btn&#8221; e &#8220;apagar_btn&#8221;, pois desejamos que quando o usuário clique nesses botões a aplicação mude o a ferramenta selecionada (lápis ou borracha).</p>
<p>Nas linhas 18 a 38 definimos a função que será executada quando o cursor do mouse for movimentado sobre o stage. Nas linhas 23 a 33 executamos a ação apropriada de acordo com o botão clicado pelo usuário. Caso seja &#8220;desenhar&#8221;, desenhamos um círculo preto com transparência 0.5 (na linha 25 definimos a cor e o alpha do circulo) de raio 2 e na posição do cursor do mouse (na linha 26 definimos onde o círculo será desenhado e qual o seu raio).</p>
<p>O mesmo se repete para a ação de apagar (linhas 31 e 32), só que dessa vez usamos um raio maios e a cor branca sem transparência.</p>
<p>Nas linhas 41 a 45 definimos o tratador para o evento de clique nos botões, que define a ação de acordo com o botão clicado pelo usuário. Nas linhas 48 a 56 identificamos se o usuário está com o botão do mouse pressionado ou não, armazenando true ou false na variável desenhando.</p>
<p>Em caso de dúvidas é só perguntar! Até o próximo artigo!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F06%2Fcriando-movieclips-dinamicamente-com-action-script-3-iii%2F&amp;linkname=Criando%20MovieClips%20dinamicamente%20com%20Action%20Script%203%20%26%238211%3B%20III">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/06/criando-movieclips-dinamicamente-com-action-script-3-iii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando MovieClips dinamicamente com Action Script 3 &#8211; II</title>
		<link>http://www.virtualizeid.com.br/2009/06/criando-movieclips-dinamicamente-com-action-script-3-i/</link>
		<comments>http://www.virtualizeid.com.br/2009/06/criando-movieclips-dinamicamente-com-action-script-3-i/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 21:53:09 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criando movieclips dinamicamente]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=316</guid>
		<description><![CDATA[Criar MovieClips dinamicamente, utilizando Action Script 3, é uma tarefa fundamental para ao desenvolvimento de aplicações dinâmicas e interativas. Neste artigo, veremos como utilizar o Linkage para criar cópias de MovieClips presentes na bibliteca.]]></description>
			<content:encoded><![CDATA[<p>Criar MovieClips dinamicamente, utilizando Action Script 3, é uma tarefa fundamental para ao desenvolvimento de aplicações dinâmicas e interativas.</p>
<p>Quando falamos em criação de MovieClips dinamicamente, temos três finalidades:</p>
<p>1. Utilizar o MovieClip criado como container para outros símbolos.<br />
2. Utilizar o MovieClip criado como um elemento de interface modelo (que se repetirá).<br />
3. Desenhar dinamicamente o conteúdo do MovieClip.</p>
<p>Nesse artigo iremos falar sobre a segunda finalidade.</p>
<p>O Action Script nos permite criar um MovieClip no Flash e adicioná-lo dinamicamente ao Stage durante a execução da aplicação.</p>
<p>Isso é muito útil e fundamental para algumas finalidades. Imagine por exemplo um jogo de tetris. Desejamos que as peças apareçam aleatoriamente, e que o jogo não tenha fim. Evidentemente não iremos posicionar milhões de peças durante a criação do projeto no Flash, a adição das peças será feita dinamicamente via Action Script. Precisamos apenas dizer pro Flash que ele deve disponibilizar os MovieClips para que possamos adicioná-los dinamicamente.</p>
<p>Para exportamos um MovieClip para uso em Action Script basta clicarmos com a tecla direita do mouse sobre o MovieClip desejado na biblioteca e clicar em &#8220;Linkage&#8221; (o código fonte deste artigo está disponível no final):</p>
<div id="attachment_317" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/linkage.JPG"><img class="size-medium wp-image-317" title="Tutorial Actionscript - Criando MovieClips dinamicamente" src="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/linkage-300x232.jpg" alt="Tutorial Actionscript - Criando MovieClips dinamicamente" width="300" height="232" /></a><p class="wp-caption-text">Acessando o Linkage de um item de biblioteca</p></div>
<p>Será exibida uma janela chamada &#8220;Linkage properties&#8221;. Nessa janela devemos marcar &#8220;Export for ActionScript&#8221; e no campo de texto &#8220;Class&#8221; devemos informar o nome que desejamos utilizar para instanciar esse MovieClip (nome da classe). Vou chamar apenas de &#8220;Quadrado&#8221;.</p>
<div id="attachment_318" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/linkage2.JPG"><img class="size-medium wp-image-318" title="Tutorial Actionscript - Utilizando o linkage" src="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/linkage2-300x232.jpg" alt="Tutorial Actionscript 3 - Utilizando o linkage" width="300" height="232" /></a><p class="wp-caption-text">Preenchimento da janela Linkage</p></div>
<p>Após isso será exibida uma janela &#8220;ActionScript Warning&#8221;. Clique em Ok. Agora, para criarmos dinamicamente uma cópia desse MovieClip, precisamos apenas usar &#8220;new Quadrado()&#8221;. Veja o exemplo:</p>
<pre class="brush: as3;">

// Quantidade de quadrados dinâmicos que criaremos.
var QUANTIDADE_QUADRADOS = 10;

// Laço de repetição que cria os quadrados.
for (var i = 0; i &lt; QUANTIDADE_QUADRADOS; i++)
{
	// Instancia o quadrado (usando a classe que exportamos no linkage)
	var quadrado_mc = new Quadrado();

	// Posiciona o quadrado de acordo com o valor de i.
	quadrado_mc.x = i * 30;

	// Cria os ouvintes de evento para os eventos MOUSE_DOWN (pressionar tecla do mouse)
	// e MOUSE_UP (soltar tecla do mouse) sobre o quadrado em criação.
	quadrado_mc.addEventListener(MouseEvent.MOUSE_DOWN    , IniciarDrag);
	quadrado_mc.addEventListener(MouseEvent.MOUSE_UP    , PararDrag);

	// A propriedade buttonMode define se o MovieClip deverá se comportar como um botão.
	// Se buttonMode for true, o cursor do mouse irá virar uma mão quando estiver sobre
	// o MovieClip.
	quadrado_mc.buttonMode = true;

	// Define a transparência do MovieClip de acordo com o valor de i.
	quadrado_mc.alpha = (i+1) * (1 / QUANTIDADE_QUADRADOS);

	// Adiciona o quadrado_mc ao root (timeline principal).
	addChild(quadrado_mc);
}

// Ouvinte do evento MOUSE_DOWN dos quadrados.
function IniciarDrag(evt: Event)
{
	// Recuperamos o MovieClip (quadrado) que foi clicado.
	var alvo_mc = MovieClip(evt.target);

	// O método startDrag() da classe MovieClip faz o
	// movieclip seguir o cursor do mouse.
	alvo_mc.startDrag();
}

// Ouvinte do evento MOUSE_UP dos quadrados.
function PararDrag(evt: Event)
{
	// Recuperamos o MovieClip (quadrado) que foi clicado.
	var alvo_mc = MovieClip(evt.target);

	// O método stopDrag() da classe MovieClip faz o
	// movieclip parar de seguir o cursor do mouse.
	alvo_mc.stopDrag();
}
</pre>
<p>Neste exemplo, introduzimos mais alguns recursos da classe MovieClip. A propriedade &#8220;buttoMode&#8221; permite definirmos se desejamos que o MovieClip se comporte como um botão. Caso seja definida com true, ao posicionarmos o cursor do mouse sobre o MoviveClip, o cursor assumirá a aparência de uma mão (hand cursor). Caso seja false, o cursor permanecerá uma seta.</p>
<p>Os métodos &#8220;startDrag()&#8221; e &#8220;stopDrag()&#8221; iniciam e interrompem o drag do mouse. O drag faz com que o MovieClip siga o cursor do mouse.</p>
<p>No próximo artigo veremos como desenhar dinamicamente utilizando as funções de desenho presentes em MovieClips. Sinta-se a vontade para perguntas!</p>
<p style="text-align: center;"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/linkage.zip" alt="Download do tutorial actionscript">Clique aqui para fazer o download do arquivo-fonte deste tutorial</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F06%2Fcriando-movieclips-dinamicamente-com-action-script-3-i%2F&amp;linkname=Criando%20MovieClips%20dinamicamente%20com%20Action%20Script%203%20%26%238211%3B%20II">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/06/criando-movieclips-dinamicamente-com-action-script-3-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando MovieClips dinamicamente com Action Script 3 &#8211; I</title>
		<link>http://www.virtualizeid.com.br/2009/06/criando-movieclips-com-action-script-3-i/</link>
		<comments>http://www.virtualizeid.com.br/2009/06/criando-movieclips-com-action-script-3-i/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 20:39:03 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[criação de sites]]></category>
		<category><![CDATA[criando movieclips dinamicamente]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=304</guid>
		<description><![CDATA[Criar MovieClips dinamicamente, utilizando Action Script 3, é uma tarefa fundamental para ao desenvolvimento de aplicações dinâmicas e interativas. Nesse artigo veremos uma das formas de utilizar a criação dinâmica de MovieClips.]]></description>
			<content:encoded><![CDATA[<p>Criar MovieClips dinamicamente, utilizando Action Script 3, é uma tarefa fundamental para ao desenvolvimento de aplicações dinâmicas e interativas.</p>
<p>Quando falamos em criação de MovieClips dinamicamente, temos três finalidades:</p>
<ol>
<li>Utilizar o MovieClip criado como container para outros símbolos.</li>
<li>Utilizar o MovieClip criado como um elemento de interface modelo (que se repetirá).</li>
<li>Desenhar dinamicamente o conteúdo do MovieClip.</li>
</ol>
<p>Nesse artigo iremos falar sobre a primeira finalidade.</p>
<p>Para criar um MovieClip como container, basta apenas criar um MovieClip vazio e utilizar o metódo &#8220;addChild()&#8221; para adicionar o conteúdo. Posteriormente podemos acessar o conteúdo que adicionamos ulizando variáveis ou alguns recursos da classe MovieClip.</p>
<p>Vejamos o exemplo a seguir:</p>
<pre class="brush: as3;">
// Array (vetor) com os endereços das imagens que iremos
// carregar.
var imagens = new Array(&quot;http://assets3.blogblogs.com.br/avatars/0/131/avatar_131176_50.jpg&quot;,
	&quot;http://assets3.blogblogs.com.br/avatars/0/119/avatar_119276_50.jpg&quot;,
	&quot;http://babado.ig.com.br/images/2/2/2/1702400.babado_mercado_atrizes_1gente___fotos_40_39.jpg&quot;,
	&quot;http://1.gravatar.com/avatar/7b9b4d233fdd7dccfea4aeab695c960b?s=48&amp;d=wavatar&quot;,
	&quot;http://www.minhaserie.com.br/imagens/usuarios/avatar/m/p/19529.jpg&quot;,
	&quot;http://contigo.abril.ig.com.br/imagem/foto/outra/bem-pagas/280708-bem-paga-5.jpg&quot; );

// Criamos um MovieClip vazio (container).
var containerImagens_mc = new MovieClip();

// Adicionamos o MovieClip ao nosso filme.
addChild(containerImagens_mc);

// Ouvinte do evento CLICK no botão Carregar.
function CarregarImagens(evt: Event)
{
	// Percorre o array de imagens carregando-as.
	for (var i = 0; i &lt; imagens.length; i++)
	{
		// Cria um objeto Loader.
		var loader = new Loader();

		// Solicita o load da imagem.
		loader.load(new URLRequest(imagens[i]));

		// Posiciona o objeto a direita do anterior.
		loader.x = i * 60;

		// Adiciona o objeto Loader no MovieClip container.
		// Quando a imagem for carregada ela será exibida.
		containerImagens_mc.addChildAt(loader, i);
	}
}

// Ouvinte do evento CLICK no botão Apagar.
function ApagarImagens(evt: Event)
{
	// Enquanto existirem elementos dentro do MovieClip containerImagens_mc.
	while (containerImagens_mc.numChildren &gt; 0)
	{
		// Removemos o primeiro elemento da lista de elementos.
		containerImagens_mc.removeChildAt(0);
	}
}

// Associamos o evento de click no botão &quot;carregar_btn&quot; à função CarregarImagens.
carregar_btn.addEventListener(MouseEvent.CLICK    , CarregarImagens);

// Associamos o evento de click no botão &quot;apagar_btn&quot; à função ApagarImagens.
apagar_btn.addEventListener(MouseEvent.CLICK    , ApagarImagens);
</pre>
<p>Na linha 11, criamos um MovieClip vazio, utilizando o comando &#8220;new MovieClip()&#8221;. Conforme vimos em artigos anteriores, utilizamos o operador new para criar novos objetos de uma determinada classe.</p>
<p>Na linha 20 utilizamos um laço de repetição &#8220;for&#8221; para percorrer o array de urls que criamos na linha 1. Caso você tenha dificuldades em entender esse trecho, sugiro que você procure pelo tutorial sobre laços de repetição e sobre arrays (vetores) na categoria básico.</p>
<p>A cada iteração do nosso laço &#8220;for&#8221;, uma nova ordem de load de imagem é enviada ao flash. Lembre-se que os comandos são executados independente do load da imagem ter sido concluído ou não, ou seja, a instrução de load de imagem é enviada para o Flash e o load é iniciado em paralelo ao laço &#8220;for&#8221; que avançará para o próximo item do vetor &#8220;imagens&#8221;.</p>
<p>Na linha 29 posicionamos o objeto loader de acordo com o valor da varíavel i. Dessa forma, as imagens não ficarão uma em cima da outra.</p>
<p>Na linha 33 adicionamos o objeto loader ao MovieClip containerImagens_mc. Assim, logo que o load finalizar, o conteúdo correspondente será exibido dentro do MovieClip containerImagens_mc. A função &#8220;addChildAt()&#8221; permite especificarmos a posição Z onde o elemento será adicionado ao MovieClip alvo do método. A posição Z define a ordem dos elementos dentro de um MovieClip, ou seja, qual elemento vem a frente de qual. Dessa forma, estamos adicionando elementos com propriedade Z crescente iniciando 0.</p>
<p>Já na função ApagarItens na linha 41 criamos um laço de repetição que se repete enquanto o MovieClip &#8220;containerImagens_mc&#8221; possuir elementos filhos (elementos dentro dele). Assim, enquanto essa condição for verdadeira, o código presente na linha 44 realiza a remoção do primeiro elemento da lista de filhos dele.</p>
<p>Neste artigo apresentamos alguns recursos que nos permitem, por exemplo, criar uma galeria de imagens. Podemos usar um MovieClip vazio para armazenar, posicionar e remover imagens.</p>
<p>Nos próximos artigos veremos outras finalidades para a criação dinâmica de MovieClips. Em artigos futuros também exploraremos exemplos mais completos. Em caso de dúvidas, fique a vontade para perguntar.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F06%2Fcriando-movieclips-com-action-script-3-i%2F&amp;linkname=Criando%20MovieClips%20dinamicamente%20com%20Action%20Script%203%20%26%238211%3B%20I">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/06/criando-movieclips-com-action-script-3-i/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Carregando imagens externas</title>
		<link>http://www.virtualizeid.com.br/2009/06/carregando-imagens-externas/</link>
		<comments>http://www.virtualizeid.com.br/2009/06/carregando-imagens-externas/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 20:00:55 +0000</pubDate>
		<dc:creator>arivanbastos</dc:creator>
				<category><![CDATA[2. Intermediário]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[carregando imagens]]></category>
		<category><![CDATA[load de imagens]]></category>
		<category><![CDATA[tutorial action script]]></category>
		<category><![CDATA[tutorial actionscript]]></category>

		<guid isPermaLink="false">http://www.virtualizeid.com.br/blog/?p=294</guid>
		<description><![CDATA[No tutorial passado vimos como criar um pré-loader durante o desenvolvimento de um site. Neste artigo criaremos um load um pouquinho diferente e veremos alguns detalhes no load de imagens em Action Script 3.]]></description>
			<content:encoded><![CDATA[<p>No tutorial passado vimos como criar um pré-loader durante o desenvolvimento de um site. O processo de load de imagens é bastante semelhante ao load de arquivos .swf.</p>
<p>Nesse artigo iremos utilizar uma estrutura semelhante ao arquivo &#8220;loading.fla&#8221; do tutorial passado, estrutura essa apresentada a seguir (o arquivo-fonte está disponivel para download no final do texto):</p>
<div id="attachment_301" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/load-imagens.JPG"><img class="size-medium wp-image-301" title="Tutorial Actionscript 3 - Load de imagens externas" src="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/load-imagens-300x227.jpg" alt="Tutorial Actionscript 3 - Load de imagens externas" width="300" height="227" /></a><p class="wp-caption-text">Estrutura do exemplo deste tutorial</p></div>
<p>Vejamos o código:</p>
<pre class="brush: as3;">
// Criamos um objeto Loader. A classe Loader nos permite
// realizar o load de conteúdos externos.
var loader = new Loader();

// Associamos o evento COMPLETE a função ExibirImagem. Assim, quando o load for
// terminado a função ExibirSite será invocada.
loader.contentLoaderInfo.addEventListener(Event.COMPLETE            , ExibirImagem);

// Associamos o evento PROGRESS a função ProgressoLoad. Assim, sempre que o progresso do
// load do conteúdo for atualizado, essa função será invocada.
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS    , ProgressoLoad);

// Solicitamos o load do arquivo de imagem.
loader.load(new URLRequest(&quot;http://www.imotion.com.br/imagens/data/media/41/paisagem1024x768.jpg&quot;));

// Função ouvinte do evento PROGRESS.
function ProgressoLoad(evt: ProgressEvent)
{
	// Calculamos a percentagem de progresso do load.
	// bytesLoaded é uma propriedade do evento que nos fornece a quantidade de bytes que
	// já foram carregados enquanto bytesTotal nos fornece a quantidade total de bytes
	// do arquivo que está sendo carregado.
	var percentagem     = evt.bytesLoaded / evt.bytesTotal;

	// Definimos a largura da cortina de acordo com a percentagem carregada.
	cortina_mc.scaleX     = percentagem;

	// Definimos o texto da percentagem de progresso.
	percentagem_txt.x   = stage.stageWidth * percentagem;
	percentagem_txt.y   = (stage.stageHeight / 2) - (percentagem_txt.textHeight/2);
	percentagem_txt.text= Math.floor(percentagem * 100) + &quot;%&quot;;
}

// Função ouvinte do evento COMPLETE.
function ExibirImagem(evt: Event)
{
	// Armazenamos a imagem em uma variável.
	var imagem = Bitmap(evt.target.content);

	// Suavizamos a imagem (remove pixels).
	imagem.smoothing = true;

	// Adicionamos a imagem ao stage (root).
	addChild(imagem);
}
</pre>
<p>Neste exemplo introduzimos alguns recursos novos do Action Script 3. Nas linhas 29 e 30 utilizamos o objeto &#8220;stage&#8221; para acessar as propriedades &#8220;stageHeight&#8221; e &#8220;stageWidth&#8221;. Esse objeto está disponível em qualquer projeto Flash, e nos fornece uma referência ao stage. Lembre-se que uma referencia ao stage não é uma referencia ao root, ou seja, o stage não é do tipo MovieClip e sim do tipo Stage.</p>
<p>Através das propriedades &#8220;stageWidth&#8221; e &#8220;stageHeight&#8221; temos acesso a largura e altura atual do stage. Isso significa que se redimensionarmos a janela do flash ou do navegador (no caso de um site que ocupe toda a janela do navegador) essa propriedade apresentará o valor atualizado. Nos próximos artigos falaremos mais sobre isso, quando falarmos sobre redimensionamento de janela.</p>
<p>Na linha 38 utilizamos uma nova classe e um recurso da linguagem Action Script chamado &#8220;casting&#8221;. A nova classe utilizada é Bitmap que é utilizada para representar imagens. Casting é um recurso onde informamos ao Flash que temos certeza sobre um tipo de dados que estamos acessando. Quando realizamos o load de um conteúdo externo, esse pode por exemplo ser uma imagem ou um MovieClip (arquivo .swf). Assim, a propriedade &#8220;evt.target.content&#8221; assume um tipo genérico, mesmo quando carrega um arquivo .swf ou uma imagem.</p>
<p>Vamos tentar fazer uma anologia. No mundo real podemos ter caminhões ou carros de passeio, mas ambos são automóveis. Automóveis é então uma definição genérica. O mesmo acontece no Flash. Temos MovieClips, Bitmaps, TextFields, mas todos eles são Objects (objetos). Esse é um conceito de orientação a objetos, chamado herança, mas veremos ele mais a frente.</p>
<p>Voltando a linha 38, o que ela faz é armazenar o valor carregado no formato de um Bitmap. Quando usamos &#8220;Bitmap(evt.target.content)&#8221; estamos dizendo pro flash que temos certeza que &#8220;evt.target.content&#8221; é um Bitmap e que ele pode nos devolver ele como tal.</p>
<p>Na linha 41 utilizamos a propriedade smoothing para suavizar o desenho da imagem. Tente executar esse exemplo sem essa linha, dê zoom na imagem, depois execute com essa linha, dê zoom novamente e compare.</p>
<p>Por fim adicionamos a imagem ao stage. Lembrando que a primeira vez que executarmos o exemplo o load funcionará. A partir da segunda vez não veremos mais o load, pois a imagem estará em cache. Limpe o cache ou utilize outra imagem.</p>
<p>Nos próximos tutoriais veremos como criar MovieClips dinamicamente. Caso tenha dúvidas, não exite me perguntar!</p>
<p style="text-align: center;"><a href="http://www.virtualizeid.com.br/wp-content/uploads/2009/06/load-imagens.zip" alt="Tutorial actionscript 3 - Download do tutorial">Clique aqui para baixar o código-fonte desse tutorial</a></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.virtualizeid.com.br%2F2009%2F06%2Fcarregando-imagens-externas%2F&amp;linkname=Carregando%20imagens%20externas">Compartilhar</a>]]></content:encoded>
			<wfw:commentRss>http://www.virtualizeid.com.br/2009/06/carregando-imagens-externas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
