<?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>Daniela Araujo &#187; Flash</title>
	<atom:link href="http://blog.nyan.com.br/pt/category/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nyan.com.br/pt</link>
	<description>Flash, ActionScript e eu.</description>
	<lastBuildDate>Fri, 27 Aug 2010 04:25:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Adeus duplicateMovieClip, mas cadê o clone?</title>
		<link>http://blog.nyan.com.br/pt/2009/03/29/adeus-duplicatemovieclip-mas-cade-o-clone/</link>
		<comments>http://blog.nyan.com.br/pt/2009/03/29/adeus-duplicatemovieclip-mas-cade-o-clone/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 02:43:24 +0000</pubDate>
		<dc:creator>Daniela</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[bitmap]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[clone]]></category>

		<guid isPermaLink="false">http://blog.nyan.com.br/pt/?p=164</guid>
		<description><![CDATA[No ActionScript 3 não existe o duplicateMovieClip e a DisplayObject não implementa nenhum método de clone (espero que isso não dure muito). Ué, mas qual é o problema? É simples. As vezes não é necessária apenas uma nova instância de um objeto, mas uma que carregue consigo o estado do objeto original. Para isso serve [...]]]></description>
			<content:encoded><![CDATA[<p>No ActionScript 3 não existe o <code>duplicateMovieClip</code> e a <code>DisplayObject</code> não implementa nenhum método de <code>clone</code> (espero que isso não dure muito). Ué, mas qual é o problema? É simples. As vezes não é necessária apenas uma nova instância de um objeto, mas uma que carregue consigo o <strong>estado</strong> do objeto original. Para isso serve (ou serviria) o método <code>clone</code>. Na prática, em um dado momento, elas são iguais e são diferentes. Isso quer dizer que elas possuem <a href="?p=166" target="_self">referência a endereços de memória distintos</a> e se uma delas sofrer alteração  a outra se manterá intacta. Ou seja, no momento em que a instância <code>clone</code> é criada ambas possuem o mesmo <strong>estado</strong>, mas não a mesma <strong>identidade</strong>.</p>
<p>Onde isso faz falta?</p>
<p>Suponha que você queira manter 2 imagens iguais aparecendo na tela para simular um efeito de espelho ou que você precise mostrar um thumb e uma imagem grande e esta imagem é carregada dinâmicamente. Você não pode simplesmente dar <code>addChild</code> uma segunda vez, pois o seu objeto vai se mover. Sim, ele vai sumir do lugar antigo e aparecer no novo lugar, mas por quê? Não era para ser uma referência na memória? Sim, continua sendo, mas&#8230; Todo <code>DisplayObject</code> possui uma propriedade <code>parent</code> que faz referência ao <code>DisplayObjectContainer</code> onde ele foi adicionado. Sempre que o método <code>addChild</code> é chamado o valor da propriedade <code>parent</code> é alterado e consequentemente o <code>DisplayObject</code> deixa de estar no lugar anterior, porque afinal de contas ele só tem um pai.</p>
<p>Para <code>Bitmap</code> felizmente existe um jeitinho, mas para outros <code>DisplayObject</code>, não. Mas o que um <code>Bitmap</code> tem de tão especial? Um objeto <code>Bitmap</code> tem em sua <strong>composição</strong> um objeto <code>BitmapData</code>, e este por sua vez tem o método <code>clone</code> implementado. É na propriedade <code>bitmapData</code> que estão armazenadas todas as características da imagem. Segue um exemplo com um <code>Bitmap</code> gerado pelo código, mais especificamente um quadrado vermelho, veja como é simples:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// criando um bitmap (quadrado)</span>
<span style="color: #000000; font-weight: bold;">var</span> bitmap:Bitmap = <span style="color: #000000; font-weight: bold;">new</span> Bitmap<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> BitmapData<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span>, <span style="color: #cc66cc;">100</span>, <span style="color: #000000; font-weight: bold;">false</span>, 0xBB0000<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// adicionando bitmap no palco</span>
<span style="color: #0066CC;">this</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>bitmap<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// criando um novo bitmap com o clone do bitmap data</span>
<span style="color: #000000; font-weight: bold;">var</span> bitmapClone:Bitmap = <span style="color: #000000; font-weight: bold;">new</span> Bitmap<span style="color: #66cc66;">&#40;</span>bitmap.<span style="color: #006600;">bitmapData</span>.<span style="color: #006600;">clone</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// modificando o posicionamento p/ enxergarmos os 2 elementos</span>
bitmapClone.<span style="color: #006600;">x</span> = <span style="color: #cc66cc;">100</span>;
bitmapClone.<span style="color: #006600;">y</span> = <span style="color: #cc66cc;">100</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// adicionando o clone no palco</span>
<span style="color: #0066CC;">this</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>bitmapClone<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Se uma imagem é carregada dinamicamente o processo é exatamente o mesmo, já que todo objeto <code>Bitmap</code> possui em sua composição um <code>BitmapData</code> sendo ele carregado externamente ou não. Então aproveitamos o que a imagem já tem. Segue um exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// declara e instancia um objeto loader</span>
<span style="color: #000000; font-weight: bold;">var</span> loader:Loader = <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// adiciona listener para o carregmento da imagem</span>
loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, handleLoadComplete<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// define uma url para carregamento</span>
<span style="color: #000000; font-weight: bold;">var</span> urlRequest:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://www.nyan.com.br/ico/it.png&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// inicia o processo de carregamento</span>
loader.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span>urlRequest<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// handle para o evento de complete</span>
<span style="color: #000000; font-weight: bold;">function</span> handleLoadComplete<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> 
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #808080; font-style: italic;">// cria referencia para a imagem carregada</span>
	<span style="color: #000000; font-weight: bold;">var</span> image:Bitmap = loader.<span style="color: #006600;">content</span> as Bitmap;	
&nbsp;
	<span style="color: #808080; font-style: italic;">// adiciona a imagem no palco</span>
 	<span style="color: #0066CC;">this</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>image<span style="color: #66cc66;">&#41;</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">// cria um novo bitmap e adiciona um clone </span>
	<span style="color: #808080; font-style: italic;">// do BitmapData contido no Bitmap carregado</span>
	<span style="color: #000000; font-weight: bold;">var</span> imageCopy:Bitmap = <span style="color: #000000; font-weight: bold;">new</span> Bitmap<span style="color: #66cc66;">&#40;</span>image.<span style="color: #006600;">bitmapData</span>.<span style="color: #006600;">clone</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">// adicionando copia no palco</span>
	<span style="color: #0066CC;">this</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>imageCopy<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #808080; font-style: italic;">// mudando posicionamento para enxergarmos</span>
	imageCopy.<span style="color: #006600;">x</span> = <span style="color: #cc66cc;">100</span>;
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>Tem mais uma coisa interessante nisso: se você declarar um novo <code>Bitmap</code>, atribuindo a ele um <code>BitmapData</code> existente mas sem chamar o método <code>clone</code>, também vai funcionar. A diferença é que se você fizer qualquer alteração no <code>bitmapData</code> através de qualquer um dos <code>Bitmaps</code>, ambos serão alterados, o que não acontece quando invocamos o método <code>clone</code>, pois ele sempre retorna uma nova instância. Este é um bom exemplo pra entender a diferença entre instâncias e referências.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nyan.com.br/pt/2009/03/29/adeus-duplicatemovieclip-mas-cade-o-clone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Forçando o download de arquivos no Flash</title>
		<link>http://blog.nyan.com.br/pt/2009/03/28/forcando-o-download-de-arquivos-no-flash/</link>
		<comments>http://blog.nyan.com.br/pt/2009/03/28/forcando-o-download-de-arquivos-no-flash/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 19:29:10 +0000</pubDate>
		<dc:creator>Daniela</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[FileReference]]></category>

		<guid isPermaLink="false">http://blog.nyan.com.br/pt/?p=233</guid>
		<description><![CDATA[Quantas vezes já não passamos pela situação onde nosso arquivo era uma imagem, um mp3, um pdf, etc e não queríamos que ele abrisse no navegador, mas ao invés disso desejavamos forçar o download? Não é necessário comprimir o arquivo (gerar um zip, um rar ou qualquer outra coisa) ou forçar pelo php, .net, etc. [...]]]></description>
			<content:encoded><![CDATA[<p>Quantas vezes já não passamos pela situação onde nosso arquivo era uma imagem, um mp3, um pdf, etc e não queríamos que ele abrisse no navegador, mas ao invés disso desejavamos forçar o download?</p>
<p>Não é necessário comprimir o arquivo (gerar um zip, um rar ou qualquer outra coisa) ou forçar pelo php, .net, etc. Você pode usar a  classe <code>FileReference</code>. Todo mundo lembra dessa classe na hora de fazer upload, mas a maioria esquece o método <code>download</code> que abre a caixa de diálogo no navegador para salvar o arquivo. </p>
<p>O código é muito simples:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// definindo url do arquivo</span>
<span style="color: #000000; font-weight: bold;">var</span> fileURL:URLRequest = <span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;http://www.nyan.com.br/ico/feed.png&quot;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">// instancionado objeto file reference</span>
<span style="color: #000000; font-weight: bold;">var</span> fileReference:FileReference = <span style="color: #000000; font-weight: bold;">new</span> FileReference<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
fileReference.<span style="color: #006600;">download</span><span style="color: #66cc66;">&#40;</span>fileURL<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Só não esqueça de uma coisa: O Flash Player 10 sofreu várias atualizações de segurança e uma delas está diretamente relacionada à classe <code>FileReference</code>. Não é possivel chamar os métodos <code>download</code> ou <code>browser</code> se não for através de uma interação do usuário (pressionando uma tecla ou clicando com o mouse, por exemplo).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nyan.com.br/pt/2009/03/28/forcando-o-download-de-arquivos-no-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Não existe programador Flash</title>
		<link>http://blog.nyan.com.br/pt/2009/03/24/nao-existe-programador-flash/</link>
		<comments>http://blog.nyan.com.br/pt/2009/03/24/nao-existe-programador-flash/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 02:56:09 +0000</pubDate>
		<dc:creator>Daniela</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://blog.nyan.com.br/?p=156</guid>
		<description><![CDATA[Na época em que programava outras coisas (que não flash, ou melhor, ActionScript) sempre ouvi o discurso do bom programador ou do mau programador e, outro dia, quando esperava o ônibus para voltar pra casa depois do trabalho comecei a pensar no que seria um bom ou um mau  programador flash. Depois de ir e [...]]]></description>
			<content:encoded><![CDATA[<p>Na época em que programava outras coisas (que não flash, ou melhor, ActionScript) sempre ouvi o discurso do bom programador ou do mau programador e, outro dia, quando esperava o ônibus para voltar pra casa depois do trabalho comecei a pensar no que seria um bom ou um mau  programador flash. Depois de ir e voltar inúmeras vezes com meus pensamentos, cheguei a conclusão que não existe programador flash e por isso minhas idéias já eram baseados em uma coisa sem fundamento. </p>
<p>Se não existe, onde fica toda essa galera que programa para flash? Sinceramente, eu não pensei muito no todo, mas na pequena parcela que pode ser chamada de programador. Ou você é programador ou você não é e isso independe da linguagem que você decidiu se especializar. Um programador conhece e domina lógica &#8211; e nos dias de hoje OOP é fundamental &#8211; e depois só precisa aplicar isso na linguagem dos seus sonhos (Tá, não é só isso, mas não quero ficar fazendo listas de x ou y).</p>
<p>Mas, segundo o dicionário essa é a definição de programador:</p>
<blockquote><p>Inform.,<br />
aquele que cria programas de computador.</p></blockquote>
<p>Aposto que quem escreveu essa definição não é programador e nunca teve que alterar um código que mais parecia uma macarronada ou as paredes de um quarto pintadas por uma criança de 5 anos&#8230; E sendo realista, não existe programador flash principalmente porque o Flash não é uma linguagem de programação e sim um aplicativo. Só que isso é um erro de nomeclatura ( que cá pra nós devia ser corrigido ) e não é o foco desse post, então eu vou dividir o universo do &#8220;programador flash&#8221; em 2 partes principais: os programadores e os não-programadores.</p>
<p>O cara que faz funcionar, entende como funciona o programa, fuçou horrores na vida, mas parou por aí é um não-programador. Ele conhece sintaxe, mas normalmente não sabe exatamente o que está fazendo. Ele só sabe que vai funcionar porque está assim no exemplo que ele achou na internet ou porque ele já fez 500 vezes desse jeito. Infelizmente, é o que mais tem no mercado e digo infelizmente não pelo mercado apenas, mas pelo futuro profissional dessas pessoas. Boa parte de quem programa para Flash tem um início sem embasamento teórico nenhum: são designers, publicitários, curiosos&#8230; Mas essas pessoas nunca serão programadores ActionScript? Depende de cada um. Conheço ótimos programadores que começaram assim, na curiosidade. Um programador tem que ser capaz de entender a lógica e também de produzir coisas lógicas ( e que de preferência não tenham lógica só na cabeça dele, que é o que acontece muito nesses casos ). </p>
<p>O Programador ActionScript sabe o que está fazendo, mas ele pode ter muita ou pouca experiência. Ele possui n níveis de especilização e isso varia conforme sua experiência com a linguagem, mas não considere isso como anos trabalhados. </p>
<p>Mas onde está o bom ou o mal programador? Bem, pra mim, em termos de código ele nã existe. O que define se alguém é um mau programador ( ou mau profissional ) são suas questões éticas e seus princípios. Cada um deve conhecer os seus limites, fazer o que está de acordo com suas habilidades e ter noção de quanto pode arriscar as coisas em um projeto deixando isso muito claro para todos os envolvidos. </p>
<p>Alguém que realmente é bom ( e bom em qualquer coisa ) está sempre procurando acompanhar a evolução do nicho no qual está inserido. Sempre dando uma olhadinha aqui e outra ali tentando melhorar sua lógica, seu código e sua experiência. Aliás, um programador mais experiente normalmente agrega velocidade aos projetos, mas não quer dizer que um menos experiente necessáriamente vá produzir um código pior, ele só vai levar mais tempo. </p>
<p>Em fim&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nyan.com.br/pt/2009/03/24/nao-existe-programador-flash/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
