<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MXStudio &#187; joaoguilherme</title>
	<atom:link href="http://www.mxstudio.com.br/author/joaoguilherme/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mxstudio.com.br</link>
	<description>Macromedia e Adobe - Artigos, colunas, tutorias e muito mais...</description>
	<lastBuildDate>Sun, 29 Jan 2012 11:31:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Menu tsunami com XML</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/menu_tsunami_com_xml/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/menu_tsunami_com_xml/#comments</comments>
		<pubDate>Mon, 05 Feb 2007 00:00:00 +0000</pubDate>
		<dc:creator>joaoguilherme</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vamos trabalhar de maneira mais elaborada com os famosos menus tsunami.]]></description>
			<content:encoded><![CDATA[<link rel="stylesheet" type="text/css" href="http://www.mxstudio.com.br/webgerenciador/_css/PadraoCss.css" /><script src="http://www.mxstudio.com.br/js/ColorCode.js"></script><br />
<table border="0" width="100%" cellPadding="0" cellSpacing="0">
<tr>
<td vAlign="top" id="colunaTexto">
<h3>menu tsunami com XML</h3>
<h1 align="justify">Pré-Requisitos</h1>
<p align="justify">Macromedia Flash 8, conhecimento avançado de actionscript, conhecimento da sintaxe XML.</p>
<h3 align="justify"><strong>Conteúdo</strong></h3>
<p align="justify">Menus Tsunami são feitos desde o flash 5. Existem muitos para baixar na internet. Mas eu resolvi fazer um porque meu amigo <a target="_blank" href="http://www.rafaelrinaldi.com">bitubas</a>, um desenvolvedor muito bom, disse que a maioria dos arquivos encontrados na net hoje em dia são muito antigos e não funcionam no Flash 8 porque agora o actionscript está case sensitive. Então esse tutorial é o resultado de uma pesquisa que eu fiz com os menus tsunamis disponíveis na internet. Eu baixei vários, editei e montei meu próprio efeito. Aviso aos navegantes, ele não está 100%, tem um bug ou outro, mas dá pra usar sem problemas. Vamos dá uma olhada no bicho:</p>
<p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="215" height="400" codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"><param name="_cx" value="5689"></param><param name="_cy" value="10583"></param><param name="FlashVars"></param><param name="Movie" value="joaoguilherme_tsunami_janeiro07_imagens/tsunami_menu_vertical.swf"></param><param name="Src" value="joaoguilherme_tsunami_janeiro07_imagens/tsunami_menu_vertical.swf"></param><param name="WMode" value="Window"></param><param name="Play" value="-1"></param><param name="Loop" value="-1"></param><param name="Quality" value="High"></param><param name="SAlign"></param><param name="Menu" value="-1"></param><param name="Base"></param><param name="AllowScriptAccess"></param><param name="Scale" value="ShowAll"></param><param name="DeviceFont" value="0"></param><param name="EmbedMovie" value="0"></param><param name="BGColor"></param><param name="SWRemote"></param><param name="MovieData"></param><param name="SeamlessTabbing" value="1"></param><param name="Profile" value="0"></param><param name="ProfileAddress"></param><param name="ProfilePort" value="0"></param><param name="AllowNetworking" value="all"></param><param name="AllowFullScreen" value="false"></param></object></p>
<p align="justify">Veja que fazer um menu desse é bem simples, mas exige atenção ao tutorial e um pouco de conhecimento de actionscript, principalmente ter fresquinho na cabeça conceitos de _x, _y, _xscale e _yscale. Vamos lá. Crie um filme 215 x 400 com 30 FPS e insira um retângulo 180 x 340 nas posições 17 x 40 (a parte de cima, vc deixa em branco para colocar o cabeçalho que quiser). Se você quiser dar esse efeito blur, basta convertê-lo para movieclip e aplicar um filtro de Blur 5 High quality. Agora crie um MC chamado <strong><em>tsunami</em></strong> insira-o no stage nas posições 20 x 50 e instancie-o como <em><strong>tsunamiMenu</strong></em>. Nele crie um campo de texto dinâmico com instância <strong><em>texto</em></strong>. Escolha a fonte (eu usei NewsGoth Cn BT) e coloque o tamanho 15 em negrito. Coloque <strong>Anti-alias for animation</strong> e coloque os embeds (<a target="_blank" href="http://www.flashmasters.net/forum/index.php?showtopic=18519&amp;hl=caracteres&amp;st=20"><strong>?</strong></a>) necessários. Converta esse texto para um MC chamado <em><strong>itens</strong>, </em>intancie com o mesmo nome e deixe-o nas posições 0 x 0 do MC <strong><em>tsunami</em></strong>. Ainda no MC <em><strong>tsunami</strong></em>, crie uma nova camada abaixo dos textos. Vá na biblioteca e crie um MC chamado <strong><em>area</em></strong>. Esse MC deve estar em branco. Insira esse MC na camada que você criou nas posições 0&#215;0, instancie-o com o mesmo nome. Agora abra o MC <em><strong>itens </strong></em>e converta novamente o texto para o MC <em><strong>item</strong></em> e instancie-o com o mesmo nome. Até agora, seu stage deve ter seguido essa hierarquia e está segundo a imagem abaixo:</p>
<p align="center"><img width="548" src="http://www.mxstudio.com.br/imagens_artigos/joaoguilherme_tsunami_janeiro07_imagens/img1.jpg" height="539" /></p>
<p align="justify">&nbsp;</p>
<p align="justify">Então. Basicamente isso é tudo que tem pra se fazer no Flash. Agora vamos ao actionscript. Vamos começar com o MC <em><strong>area </strong></em>dentro do MC <em><strong>tsunami</strong></em>:</p>
<p title="codigo4" id="codigo">onClipEvent (load) {<br />
_root.noLimite = &#8220;nao&#8221;;<br />
}<br />
onClipEvent (enterFrame) {<br />
if (_root._xmouse&gt;=_root.tstunamiMenu._x) {<br />
if (_root._xmouse&lt;=(_root.tstunamiMenu._x)+_root.tstunamiMenu._width) {<br />
_root.noLimite = &#8220;sim&#8221;;<br />
} else {<br />
_root.noLimite = &#8220;nao&#8221;;<br />
}<br />
} else {<br />
_root.noLimite = &#8220;nao&#8221;;<br />
}<br />
}</p>
<p align="justify"><strong>OBS: insira essas ações no MC e não no frame. </strong>Esse código calcula os limites do menu e avisa através da variável <em>noLimite</em> se os limites _x e _width do menu estão corretos. Eu usei &#8220;sim&#8221; e &#8220;nao&#8221; para deixar o código mais auto-explicativo. Feito isso, vamos para o MC <em><strong>itens, </strong></em>nele nós vamos construir nosso objeto XML e chamar os dados para dentro do flash:</p>
<p title="codigo4" id="codigo">var nomes:Array = [];<br />
var urls:Array = [];<br />
var tsunamiXML:XML = new XML();<br />
tsunamiXML.ignoreWhite = true;<br />
tsunamiXML.onLoad = function(foi) {<br />
if (foi) {<br />
for (var t = 0; t&lt;tsunamiXML.childNodes[0].childNodes.length; t++) {<br />
nomes.push(tsunamiXML.childNodes[0].childNodes[t].attributes.text);<br />
urls.push(tsunamiXML.childNodes[0].childNodes[t].attributes.url);<br />
item.duplicateMovieClip(&#8220;item&#8221;+t, t);<br />
item._visible = false;<br />
}<br />
for (var i = 0; i&lt;tsunamiXML.childNodes[0].childNodes.length; i++) {<br />
eval(&#8220;item&#8221;+i).i = i;<br />
eval(&#8220;item&#8221;+i).texto.text = nomes[i];<br />
eval(&#8220;item&#8221;+i)._y = eval(&#8220;item&#8221;+(i-1))._y + 30<br />
eval(&#8220;item&#8221;+i).onRollOver = function(){<br />
this._alpha = 50<br />
}<br />
eval(&#8220;item&#8221;+i).onRollOut = function(){<br />
this._alpha = 50<br />
}<br />
eval(&#8220;item&#8221;+i).onRelease = function(){<br />
getURL(urls[this.i],&#8221;_blank&#8221;)<br />
}<br />
}<br />
}<br />
};<br />
tsunamiXML.load(&#8220;tsunami_menu.xml&#8221;);</p>
<p align="justify"><strong>OBS: insira essas ações no frame. </strong>Como vocês podem ver, esse foi um parse normal. Primeiro criamos duas arrays (<a target="_blank" href="http://www.flashmasters.com.br/forum/index.php?showtopic=16436"><strong>?</strong></a>) vazias. Depois criamos o objeto <em><strong>tsunamiXML </strong></em>e colocamos um FOR (<a target="_blank" href="http://www.flashmasters.com.br/forum/index.php?showtopic=15930"><strong>?</strong></a>)para popular as arrays com o conteúdo dos atributos do XML (no caso text e url). Depois nós duplicamos o MC <em><strong>item </strong></em>e mudamos os seu _y para ficarem um debaixo do outro. Pra finalizar colocamos um efeito rollOver e rollOut nos botões. No onRelease, pedimos para abrir a URL armazenada dentro da array. Por fim, carregamos o <em>tsunami_menu.xml</em>. Falando nele, vamos ver a sua sintaxe?</p>
<p title="codigo4" id="codigo">&lt;?xml version=&#8221;1.0&#8243; encoding= &#8220;UTF-8&#8243; ?&gt;<br />
&lt;menu&gt;<br />
&lt;button text=&#8221;superjG.net&#8221; url=&#8221;http://www.superjg.com&#8221; /&gt;&lt;button text=&#8221;MXstudio&#8221; url=&#8221;http://www.mxstudio.com.br&#8221; /&gt;</p>
<p>&lt;button text=&#8221;Gmail&#8221; url=&#8221;http://www.gmail.com&#8221; /&gt;</p>
<p>&lt;button text=&#8221;Google&#8221; url=&#8221;http://www.google.com&#8221; /&gt;</p>
<p>&lt;button text=&#8221;rafael rinaldi&#8221; url=&#8221;http://www.rafaelrinaldi.com&#8221; /&gt;</p>
<p>&lt;button text=&#8221;flashmasters&#8221; url=&#8221;http://www.flashmasters.com.br&#8221; /&gt;</p>
<p>&lt;button text=&#8221;youtube&#8221; url=&#8221;http://www.youtube.com&#8221; /&gt;</p>
<p>&lt;button text=&#8221;orkut&#8221; url=&#8221;http://www.orkut.com&#8221; /&gt;</p>
<p>&lt;button text=&#8221;gotoAndLearn()&#8221; url=&#8221;http://www.gotoandlearn.com&#8221; /&gt;</p>
<p>&lt;button text=&#8221;site do BBB7&#8243; url=&#8221;http://www.globo.com/bbb&#8221; /&gt;</p>
<p>&lt;button text=&#8221;adobe&#8221; url=&#8221;http://www.adobe.com&#8221; /&gt;<br />
&lt;/menu&gt;</p>
<p>Para Finalizar, vamos colocar umas ações no MC <em><strong>item</strong></em>:</p>
<p title="codigo4" id="codigo">onClipEvent (load) {<br />
inicialY = _y;<br />
nivelCor = 50;<br />
alvo = 100;<br />
alvoY = inicialY;<br />
corItem = new Color(this);<br />
corItemTransform = corItem.getTransform();<br />
}<br />
onClipEvent (enterFrame) {<br />
distanciaY = Math.floor(Math.abs((_y-_parent._ymouse)));<br />
distanciaY2 = Math.floor(_y-_parent._ymouse);<br />
if (distanciaY&lt;50) {<br />
if (_root.noLimite == &#8220;sim&#8221;) {<br />
alvo = 200-distanciaY;<br />
nivelCor = 100-distanciaY;<br />
alvoY = inicialY+(distanciaY2*.1);<br />
} else {<br />
alvo = 100;<br />
nivelCor = 50;<br />
alvoY = inicialY;<br />
}<br />
} else {<br />
alvo = 100;<br />
nivelCor = 50;<br />
alvoY = inicialY;<br />
}<br />
alvoAdd = Math.floor((alvo-_xscale)*.3);<br />
_xscale += alvoAdd;<br />
_yscale += alvoAdd;<br />
yplus = Math.floor((alvoY-_y)*.3);<br />
_y += yplus;<br />
corItemTransform.ra = nivelCor;<br />
corItemTransform.ga = nivelCor;<br />
corItemTransform.ba = nivelCor;<br />
corItem.setTransform(corItemTransform);<br />
}</p>
<p>Começamos definindo algumas variáveis iniciais como o primeiro Y, ou Y base para todos, o nivel inicial de cores (perceba no swf que há uma mudança de cores). No enterFrame nós criamos uma distancia do Y baseado na diferença entre _ymouse e o _y desse mc. Perceba que existem duas distancias. Isso foi feito para termos uma diferença entre as distâncias, então é aí que entra nosso easing. Depois verificamos se o menu está dentro dos limites (lembra daquelas ações lá em cima). Se estiver, nós colorimos com uma nova cor baseada na distancia de Y. Caso contrário, é porque nós estamos no topo, então voltamos para as configuraçÕes iniciais setadas lá em cima. Além disso, nós aumentamos a _xscale e _yscale do item usando a variável alvoAdd que é a diferença entre o Y atual e o _xscale multiplicado pelo easing. Por fim, colorimos o item com o nível de cor correspondente ao _y. Dessa forma, os itens ficam sempre no mesmo nível de cor, diferenciando apenas a saturação.</p>
<p>É isso aí. Está desvendado um dos grandes mistérios do mundo do flash, de forma simplificada e rápida pra você. Esse tutorial pode ser meio dificil de se entender de primeira, mas repita os passos várias vezes até conseguir, afinal é assim que se aprende.</p>
<p align="justify">No próximo artigo: <strong>como fazer planos de fundo redimensionáveis no flash? </strong>, até lá&#8230;</p>
<p align="justify"><strong>Autor: João Guilherme Ribeiro &#8211; Colunista Flash do Portal MXSTUDIO</strong></p>
<p>Qualquer dúvida acesse o nosso <a target="forum" href="http://forum.mxstudio.com.br">fórum</a>.</td>
</tr>
<tr>
<td vAlign="top" id="colunaTexto"> </td>
</tr>
</table>
<p><script>    FormatAS(new Array(\'codigo\',\'codigo1\',\'codigo2\',\'codigo3\',\'codigo4\',\'codigo5\'));</script> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/menu_tsunami_com_xml/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Duplicando fundos usando a classe bitmapData()</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/duplicando_fundos_usando_a_classe_bitmapdata__/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/duplicando_fundos_usando_a_classe_bitmapdata__/#comments</comments>
		<pubDate>Mon, 05 Feb 2007 00:00:00 +0000</pubDate>
		<dc:creator>joaoguilherme</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Trabalhando com utiliza&#231;&#227;o de mais de um plano de fundo em seu site.]]></description>
			<content:encoded><![CDATA[<link rel="stylesheet" type="text/css" href="http://www.mxstudio.com.br/webgerenciador/_css/PadraoCss.css" /><script src="http://www.mxstudio.com.br/js/ColorCode.js"></script><br />
<table border="0" width="100%" cellPadding="0" cellSpacing="0">
<tr>
<td vAlign="top" id="colunaTexto">
<h3>duplicando fundos usando a classe bitmapData()</h3>
<h1 align="justify">Pré-Requisitos</h1>
<p align="justify">Macromedia Flash 8, conhecimento intermediário de actionscript principalmente drawing API (<a target="_blank" href="http://theflashblog.com/?p=120">instruções aqui</a>), classe tween do laco (<a target="_blank" href="http://laco.wz.cz/tween/">baixe aqui</a>) (<a target="_blank" href="http://www.flashmasters.net/forum/index.php?showtopic=24034">instruções aqui</a>)</p>
<h3 align="justify"><strong>Conteúdo</strong></h3>
<p align="justify">Um dos recursos mais legais do antigo HTML era a a forma com que ele lidava com imagens plano de fundo. Ainda mais quando veio o CSS, que detalhou esse recurso impressionante. No flash as coisas são diferentes. Não existe um recurso nativo do Flash para fazer isso, mas existem várias formas de fazê-lo por você mesmo. Você pode copiar e colar a imagem no stage (isso não e muito inteligente para um stage bem grande), você pode usar duplicateMovieClip (mas novamente isso lhe dará problemas de processamento e carragamento), ou você pode aproveitar a classe bitmapData() e mandar o flash fazer o trabalho sujo. Vamos dar uma olhada no que faremos nesse artigo:</p>
<p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400" codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"><param name="_cx" value="14552"></param><param name="_cy" value="10583"></param><param name="FlashVars"></param><param name="Movie" value="joaoguilherme_duplicarfundo_janeiro07_imagens/duplicar_fundo.swf"></param><param name="Src" value="joaoguilherme_duplicarfundo_janeiro07_imagens/duplicar_fundo.swf"></param><param name="WMode" value="Window"></param><param name="Play" value="-1"></param><param name="Loop" value="-1"></param><param name="Quality" value="High"></param><param name="SAlign"></param><param name="Menu" value="-1"></param><param name="Base"></param><param name="AllowScriptAccess"></param><param name="Scale" value="ShowAll"></param><param name="DeviceFont" value="0"></param><param name="EmbedMovie" value="0"></param><param name="BGColor"></param><param name="SWRemote"></param><param name="MovieData"></param><param name="SeamlessTabbing" value="1"></param><param name="Profile" value="0"></param><param name="ProfileAddress"></param><param name="ProfilePort" value="0"></param><param name="AllowNetworking" value="all"></param><param name="AllowFullScreen" value="false"></param></object></p>
<p align="justify">Gostaram? Pois é. Isso é muito simples de fazer e cria um efeito bem bacana nas páginas. Primeiramente, vá no site <a target="_blank" href="http://www.squidfingers.com">squidfingers.com</a> ou outro de sua preferência e baixe os seus fundos. Para esse artigo, eu baixei 8 fundos. Importe-os para o flash e renomeios da seguinte forma: <em>fundo_0X</em> ou seja (<em>fundo_00,fundo_01&#8230;fundo_07). </em>Agora na biblioteca clique sobre essas imagens com o botão direito e selecione <em>linkage. </em>Lá escolha<em> Export For Actionscript </em>e verifique se eles estão com o mesmo nome da figura.</p>
<p align="justify">Feito isso, crie um movieclip chamado de <em>fundo </em>e insira-o no stage com a mesma instância e nas posições 0 x 0. No inspetor de propriedades, aplique um alpha 0 nesse MC. Nas ações do movieclip fundo, escreva os seguintes comandos:</p>
<p title="codigo4" id="codigo">import flash.display.BitmapData;<br />
desenhaFundo = function () {<br />
fundo_mc.removeMovieClip();<br />
var fundo_img:BitmapData = BitmapData.loadBitmap(&#8220;fundo_0&#8243;+random(7));<br />
this.createEmptyMovieClip(&#8220;fundo_mc&#8221;, this.getNextHighestDepth);<br />
this.fundo_mc.beginBitmapFill(fundo_img);<br />
this.fundo_mc.lineTo(Stage.width, 0);<br />
this.fundo_mc.lineTo(Stage.width, Stage.height);<br />
this.fundo_mc.lineTo(0, Stage.height);<br />
this.fundo_mc.lineTo(0, 0);<br />
this.fundo_mc.endFill();<br />
_root.fundo.alphaTo(100, 2, &#8220;easeInOutCubic&#8221;);<br />
};<br />
desenhaFundo();</p>
<p align="justify">Explicando o código: A primeira linha importa a classe para o flash. A função desenha fundo cria um MC dentro do MC fundo chamado <em>fundo_mc.</em> Nesse MC, nós inserimos a imagem <em>fundo_img</em> que é resultante de um bitmap da biblioteca. No caso, para abrirmos fundos randômicos, colocamos a expressão <em>loadBitmap(&#8220;fundo_0&#8243;+random(7)</em>) assim um novo fundo será carregado. Além disso, nós especificamos os limites de altura e largura (no caso a largura e a altura do stage) através do drawing API (vou considerar que você já entende como funciona os comandos do drawing API). Por fim depois que o fundo está pronto, nós colocamos um alphaTo nele, pra dar um efeito de fade.</p>
<p align="justify">Agora crie um botão com o texto <em>mudar fundo</em> e coloque as ações nele:</p>
<p title="codigo4" id="codigo">on (release) {<br />
_root.fundo._alpha = 0<br />
_root.fundo.desenhaFundo()<br />
}</p>
<p align="justify">Assim, ele chamará a função cada vez que o botão for clicado.</p>
<p align="justify">Viu como é fácil. Dá pra fazer muita coisa com o bitmapData(), experimente. Falando nisso, recomendo o livro <a target="_blank" href="http://www.amazon.com/Flash-8-Essentials-Glen-Rhodes/dp/1590595327">Flash 8 Essentials.</a> Com ele, você vai ficar por dentro de tudo do Flash 8. Custa apenas $26.39, com o dolar a 2.14 fica por uns 75 reais (incluíndo a postagem). É mais barato que muito livro em português e você tem treinamento de qualidade num livro muito bem diagramado e ainda exercita seu inglês. Detalhe: se você acha que seu inglês não é bom, não se preocupe, o livro é super bem escrito, numa linguagem de fácil compreensão além de ter muitas, MUITAS figuras explicativas.</p>
<p align="justify">No próximo artigo: <strong>como fazer sites 100% flash aparecerem bonitinhos no google</strong>, até lá&#8230;</p>
<p align="justify"><strong>Autor: João Guilherme Ribeiro &#8211; Colunista Flash do Portal MXSTUDIO</strong></p>
<p>Qualquer dúvida acesse o nosso <a target="forum" href="http://forum.mxstudio.com.br">fórum</a>.</td>
</tr>
<tr>
<td vAlign="top" id="colunaTexto"> </td>
</tr>
</table>
<p><script>    FormatAS(new Array(\'codigo\',\'codigo1\',\'codigo2\',\'codigo3\',\'codigo4\',\'codigo5\'));</script> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/duplicando_fundos_usando_a_classe_bitmapdata__/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Menu scroll horizontal</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/menu_scroll_horizontal/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/menu_scroll_horizontal/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 00:00:00 +0000</pubDate>
		<dc:creator>joaoguilherme</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vamos aprender a construir um menu bem simples.]]></description>
			<content:encoded><![CDATA[<link rel="stylesheet" type="text/css" href="http://www.mxstudio.com.br/webgerenciador/_css/PadraoCss.css" /><script src="http://www.mxstudio.com.br/js/ColorCode.js"></script><br />
<table border="0" width="100%" cellPadding="0" cellSpacing="0">
<tr>
<td vAlign="top" id="colunaTexto">
<h3>menu scroll horizontal</h3>
<h1 align="justify">Pré-Requisitos</h1>
<p align="justify">Macromedia Flash 8, conhecimento intermediário de actionscript, eventos e principalmente onEnterFrame() e o método getBounds().</p>
<h3 align="justify"><strong>Conteúdo</strong></h3>
<p align="justify">Olá, após um tempinho sem poder postar, hoje eu volto com todo o gás&#8230;Aproveitando, queria divulgar a nova versão do meu portifólio que já está online. Acessem no www.superjg.com. Hoje nós vamos aprender a construir um menu bem simples, MUITO procurado pelos desenvolvedores, porque ele é muito útil na hora de fazer portfólios pois além de lindo, é tudo (ou seria além de tudo, é lindo?). Veja um exemplo do que vamos fazer:</p>
<p align="center"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="250" codeBase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"><param name="_cx" value="13229"></param><param name="_cy" value="6615"></param><param name="FlashVars"></param><param name="Movie" value="artigo 3_imagens/menu_scroll.swf"></param><param name="Src" value="artigo 3_imagens/menu_scroll.swf"></param><param name="WMode" value="Window"></param><param name="Play" value="-1"></param><param name="Loop" value="-1"></param><param name="Quality" value="High"></param><param name="SAlign"></param><param name="Menu" value="-1"></param><param name="Base"></param><param name="AllowScriptAccess"></param><param name="Scale" value="ShowAll"></param><param name="DeviceFont" value="0"></param><param name="EmbedMovie" value="0"></param><param name="BGColor"></param><param name="SWRemote"></param><param name="MovieData"></param><param name="SeamlessTabbing" value="1"></param><param name="Profile" value="-1"></param><param name="ProfileAddress"></param><param name="ProfilePort" value="1297041408"></param><param name="AllowNetworking" value="all"></param><param name="AllowFullScreen" value="false"></param></object></p>
<p align="justify">Gostaram? Vamos ver um pouco de teoria. O grande lance do menu scroll é o seguinte. Pegar propriedade _xmouse e compará-la ao _x do menu, se menor aumentar, se maior diminuir. Ou seja, a medida que você arrasta o mouse, o menu irá seguir você com base nas propriedades _x e _xmouse. Então vamos Começar. Crie um filme 500&#215;200 e deixe-o com 30FPS e 4 camadas: &#8220;as&#8221;, &#8220;degrade&#8221;, &#8220;mascara&#8221; e &#8220;menu&#8221;.</p>
<p align="justify">Abra a biblioteca e crie um movieclip chamado &#8220;botoes&#8221; dentro dele, insira uma série de botoes 100&#215;100 pixels como na figura abaixo. No meu caso, eu criei 10 botões desses:</p>
<p align="center"><img width="580" src="http://www.mxstudio.com.br/imagens_artigos/artigo%203_imagens/img1.jpg" height="202" /></p>
<p align="justify">Feito isso, insira-o na camada &#8220;menu&#8221; nas posições -751 x 82, ele deve ficar além dos limites do stage para o lado esquerdo. Instancie-o como &#8220;menu_mc&#8221; e vamos para camada &#8220;mascara&#8221;. Nela, crie um quadrado de 360 x 125 e posicione-o em 70 x 70. Agora vamos para a camada &#8220;degrade&#8221;. O objetivo dessa camada é criar um degrade que dê um efeito que os botões estão sumindo ao sair da área da máscara. Não entendeu? Dê uma olhada no swf de novo, você vai entender o que eu quis dizer. Agora preste atenção no que você vai fazer. Crie movieclip chamado &#8220;degrade&#8221; e nele um quadrado de 35 x 150 e posicione-o nos pontos -15 x 0. Abra o painel Color Mixer vá em linear e coloque duas cores, no primeiro coloque branco com 100% de alpha e no segundo coloque branco com 0% de alpha. Arraste o branco 100% para próximo do 0% (veja a figura). Copie esse quadrado, use a ferramenta de transformação e gire 180 graus pra direita. Posicione esse novo quadrado nos pontos 335 e 0. Veja a figura e entenda mais ou menos o processo:</p>
<p align="center"><img width="388" src="http://www.mxstudio.com.br/imagens_artigos/artigo%203_imagens/img2.jpg" height="217" /></p>
<p align="justify">Agora insira esse MC na camada degrade nos pontos 57 x 60 e intancie-o como &#8220;degrade_mc&#8221;. Até agora o seu fla deve ter 3 das 4 camadas completas e deve parecer um pouco com a imagem abaixo:</p>
<p align="center"><img width="675" src="http://www.mxstudio.com.br/imagens_artigos/artigo%203_imagens/img3.jpg" height="282" /></p>
<p align="justify">Agora vamos para camda ações. Nela, abra as actions e insira o código abaixo:</p>
<p title="codigo4" id="codigo">menu_mc.onRollOver = menu_mcOver;<br />
function menu_mcOver() {<br />
this.onEnterFrame = scrollmenu_mc;<br />
delete this.onRollOver;<br />
}<br />
var b = degrade_mc.getBounds(_root);<br />
function scrollmenu_mc() {<br />
if (_xmouse&lt;b.xMin || _xmouse&gt;b.xMax || _ymouse&lt;b.yMin || _ymouse&gt;b.yMax) {<br />
this.onRollOver = menu_mcOver;<br />
delete this.onEnterFrame;<br />
}<br />
if (menu_mc._x&gt;=89) {<br />
menu_mc._x = 89;<br />
}<br />
if (menu_mc._x&lt;=-751) {<br />
menu_mc._x = -751;<br />
}<br />
var xdist = _xmouse-250;<br />
menu_mc._x += Math.round(-xdist/7);<br />
}</p>
<p align="justify">Pronto. Agora vamos entender o código. As primeiras linhas associam o evento onRollOver do menu com a nossa função scrollmenu_mc. A linha <strong>var b = degrade_mc.getBounds(_root); </strong>Usa um método bem útil, mas quase esquecido depois do flash 8, o getBounds. Esse método insere dentro de um objeto os pontos x e y mínimos e máximos para o movieclip selecionado. É como se você soubesse onde começa e onde termina o movieclip. Como nosso alvo foi o degrade_mc, nós saberemos seus pontos para poder usar no nosso if. Repare que o if compara propriedade _xmouse com os xMinimo e xMaximo do movieclip degrade_mc. Além disso ele também compara o _ymouse com o yMinimo e o yMaximo do degrade_mc. Vamos pensa um pouco? Isso é necessário porque dessa forma o menu só vai dar o scroll quando eu estiver com o mouse na altura do menu. Assim, nós evitamos o problema dele ficar girando o tempo todo, mesmo quando o usuário não quiser.</p>
<p align="justify">Agora, alguém sabe por que o IF está comparando o _xmouse e _ymouse do degrade_mc e nao do menu_mc? hã? hã? hã? Simples. Porque o menu_mc está em constante movimento, portanto não podemos usá-lo como comparação (experimente fazer isso, veja o resultado). Então fizemos com o degrade_mc que é um movieclip que está parado no Stage e tem as propriedades que queremos para os limites do nosso menu.</p>
<p align="justify">Temos também dois ifs <strong>if (menu_mc._x&gt;=89) {</strong> e <strong>if (menu_mc._x&lt;=-751) {</strong> esses dois ifs verificam se o menu_mc está dentro dos limites do nosso filme. Se ele não estiver, ele &#8220;manda&#8221; pra lá. Assim sempre teremos um limite de onde o menu vai. Esperto, não?</p>
<p align="justify">E por fim, temos as linhas <strong>var xdist = _xmouse-250;</strong> e <strong>menu_mc._x += Math.round(-xdist/7);</strong> A primeira seta um valor para o _x e a segunda associa esse valor com o _x do menu_mc. Agora. vocês sabem por que esse valor é negativo? hein? hein? hein? Porque o plano cartesiano do flash é invertido, então colocando o valor negativo, garantimos que o menu rolará para os dois lados. E a divisão por 7? Vocês entenderam? Simples. Com ela, nós criamos um easing simples para a nossa animação.</p>
<p align="justify">É isso aí galera. Espero que tenham gostado. No próximo tutorial, como fazer um menu tsunami orientado por XML. Até lá</p>
<p align="justify"><strong>Autor: João Guilherme (superjG) &#8211; Colunista Flash do Portal MXSTUDIO</strong></p>
<p>Qualquer dúvida acesse o nosso <a target="forum" href="http://forum.mxstudio.com.br">fórum</a>.</td>
</tr>
<tr>
<td vAlign="top" id="colunaTexto"> </td>
</tr>
</table>
<p><script>    FormatAS(new Array(\'codigo\',\'codigo1\',\'codigo2\',\'codigo3\',\'codigo4\',\'codigo5\'));</script> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/menu_scroll_horizontal/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>easeDrag() e DepthControl()</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/easedrag___e_depthcontrol__/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/easedrag___e_depthcontrol__/#comments</comments>
		<pubDate>Wed, 18 Oct 2006 00:00:00 +0000</pubDate>
		<dc:creator>joaoguilherme</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vamos trabalhar com t&#233;cnicas de arrastar objetos, ou simplesmente Drag. <br />
]]></description>
			<content:encoded><![CDATA[<p><script src="http://www.mxstudio.com.br/js/ColorCode.js"></script></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td id="colunaTexto" valign="top">
<h3>easeDrag() e DepthControl()</h3>
<h1>Pré-Requisitos</h1>
<p align="justify">Macromedia Flash 8, conhecimento intermediário de actionscript.</p>
<h3><strong>Conteúdo</strong></h3>
<p align="justify">Vocês gostaram e eu voltei. Com mais novidades e dicas rápidas para usar no Flash. Hoje nós vamos discutir uma questão muito conhecida por ser uma das interfaces mais agradáveis e intuitivas para o usuário, mas com certeza representam um terror para a maioria dos desenvolvedores. SIM, estamos falando das técnicas de arrastar objetos, ou simplesmente Drag.</p>
<p align="justify">O Flash um método da classe MovieClip chamado <em>startDrag</em> que para muitos os casos quebra um galho. Mas imagine se sua interface toda fosse baseada em objetos arrastáveis? Isso seria um problema devido às limitações do <em>startDrag</em>, além disso para simular algo mais parecido com o <em>mundo real</em> você precisará usar uma fricção, outro detalhe  omisso no método da Macromedia. Tudo bem, ninguém é perfeito. Então vamos fazer o nosso próprio prototype de ease com fricção e bom controle.</p>
<div id="codigo" title="codigo4">MovieClip.prototype.easeDrag = function(speed, limitLeft, limitRight, limitTop, limitBottom) {<br />
refx = (_root._xmouse-this._x);<br />
refy = (_root._ymouse-this._y);</p>
<p>this.onEnterFrame = function() {<br />
newX = this._x-Math.floor(((this._x+refx)-(_root._xmouse))/speed);<br />
newY = this._y-Math.floor(((this._y+refy)-(_root._ymouse))/speed);<br />
if (newX&gt;=limitLeft and newY&gt;=limitTop and newY&lt;=limitBottom and newX&lt;=limitRight) {<br />
this._x = newX;<br />
this._y = newY;<br />
}<br />
};<br />
this.onMouseUp = function() {<br />
delete this.onEnterFrame;</p>
<p>};<br />
};</p></div>
<p>Pronto. Esse é um bom começo para a nossa interface arrastável. Mas alguns probleminhas surgem: Se eu tiver muitos objetos arrastáveis, eu quero que o que eu estiver clicando fique em cima, certo? Aí você me diz: <em>ah jota essa é fácil. é só usar o swapDepths(), certo? </em><strong>ERRADASSO! </strong>Vejamos, você já está usando um prototype para o seu drag, por que voltar aos padrões do flash no controle dos níveis. <em>Ah jota, quer dizer que eu vou ter que fazer outro prototype só para controlar os niveis dos meus emicêzinhos??? </em><strong>NÃÃÃO!!! </strong>Você pode usar<strong> A CLASSE NÃO DOCUMENTADA DA MACROMÉÉÉÉÉÉDIA! A mx.behaviors.DepthControl!!!!!</strong> Vamos dar uma olhada na classe e analisar os principais métodos:</p>
<div id="codigo" title="codigo4">
<p>class mx.behaviors.DepthControl extends Object {<br />
public function DepthControl() {<br />
}<br />
public static function sendToBack(target:MovieClip):Void {<br />
var isLowest = false;<br />
while (isLowest == false) {<br />
sendBackward(target);<br />
isLowest = (target == getInstanceAtLowest(target._parent));<br />
}<br />
}<br />
public static function bringToFront(target:MovieClip) {<br />
var isHighest = false;<br />
while (isHighest == false) {<br />
bringForward(target);<br />
isHighest = (target == getInstanceAtHighest(target._parent));<br />
}<br />
}<br />
public static function sendBackward(target:MovieClip) {<br />
var dOrder = trackDepths(target._parent);<br />
if (target != getInstanceAtLowest(target._parent)) {<br />
target.swapDepths(getInstanceLowerThan(target));<br />
}<br />
}<br />
public static function bringForward(target:MovieClip) {<br />
if (target != getInstanceAtHighest(target._parent)) {<br />
target.swapDepths(getInstanceHigherThan(target));<br />
}<br />
}<br />
private static function trackDepths(mcParent:MovieClip):Array {<br />
var dOrder:Array = [];<br />
for (var i in mcParent) {<br />
if (typeof mcParent[i] == &#8220;movieclip&#8221;) {<br />
dOrder.push({mc:mcParent[i], depth:mcParent[i].getDepth()});<br />
}<br />
}</p>
<p>continua&#8230;</p>
</div>
<p>Deixa eu dá uma explicadinha nos métodos:</p>
<ul>
<li><strong>sendToBack(): </strong>leva o movieclip indicado para o menor nível;</li>
<li><strong>bringToFront(): </strong>leva o movieclip indicado para o maior nível;</li>
<li><strong>sendBackward(): </strong>diminui 1 nível no movieclip;</li>
<li><strong>bringForward(): </strong>aumenta 1 nível no movieclip;</li>
<li><strong>trackDepths(): </strong>gera uma matriz indicando os níveis superiores e inferiores ao movieclip indicado;</li>
</ul>
<p>Observe que a diferença entre o DepthControl e o tradicional swapDepths é que você pode controlar de uma maneira mais eficaz o nível dos seus movieclips, colocando-os exatamente onde você os quer, sem muito trabalho. No swapDepths isso é mais dificil porque você nem sempre sabe o nível ou o nome do movieclip que você quer usar. Além do mais o swapDepths permite apenas fazer uma troca entre dois níveis de movieclips, o DepthControl permite que você manipule toda a estrutura do seu swf.</p>
<p>A última questão para o nosso drag ficar perfeito é melhorar a aparência do cursor no filme. A resposta do usuário seria melhor se houvesse, por exemplo um cursor que simulasse a sua mão. Algo que quando arrastasse o objeto ilustrasse exatamente isso. Para isso, basta criar um movieclip com 3 frames e um desenho de cursor em cada um: cursor normal, cursor mão e cursor &#8220;arrastando&#8221;, respectivamente. Assim, você poderia colocar um código em cada evento do botão a ser arrastado para que o movieclip cursor mude de frame de acordo com a sua tragetória em relação ao botão.</p>
<p>Para finalizar, é prudente, se você estiver usando muitos objetos arrastáveis, que você utilize alguma forma de loop para controlar os eventos dos botões de uma forma mais fácil, economizando linhas e otimizando o seu código. Você pode ler mais sobre loops no meu tutorial <em><a href="http://www.flashmasters.net/forum/index.php?showtopic=15930&amp;hl=simplificando+a+vida+com+o+for" target="_blank">Simplificando a Vida com o FOR</a></em>, publicado no fórum flashmasters.</p>
<p>Aqui, uma prévia do nosso swf montado, onde eu coloquei em prática todos os parâmetros discutidos acima:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="650" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="src" value="http://www.mxstudio.com.br/mx_novo/wp-admin/artigo 2_imagens/depthControl.swf" /><embed type="application/x-shockwave-flash" width="650" height="400" src="http://www.mxstudio.com.br/mx_novo/wp-admin/artigo 2_imagens/depthControl.swf" quality="high"></embed></object></p>
<p>E aqui um exemplo do código desse filme:</p>
<div id="codigo" title="codigo4">MovieClip.prototype.easeDrag = function(speed, limitLeft, limitRight, limitTop, limitBottom) {<br />
refx = (_root._xmouse-this._x);<br />
refy = (_root._ymouse-this._y);<br />
_root.cursor.gotoAndStop(3)<br />
mx.behaviors.DepthControl.bringToFront(_root.cursor)<br />
this.onEnterFrame = function() {<br />
newX = this._x-Math.floor(((this._x+refx)-(_root._xmouse))/speed);<br />
newY = this._y-Math.floor(((this._y+refy)-(_root._ymouse))/speed);<br />
if (newX&gt;=limitLeft and newY&gt;=limitTop and newY&lt;=limitBottom and newX&lt;=limitRight) {<br />
this._x = newX;<br />
this._y = newY;<br />
}<br />
};<br />
this.onMouseUp = function() {<br />
delete this.onEnterFrame;<br />
_root.cursor.gotoAndStop(2)<br />
};<br />
};<br />
_root.cursor.startDrag(true)<br />
Mouse.hide()<br />
logos = [logo1,logo2,logo3]<br />
for(var i=0;i&lt;logos.length;i++){<br />
logos[i].onRollOver = function(){<br />
_root.cursor.gotoAndStop(2)<br />
}<br />
logos[i].onPress= function(){<br />
mx.behaviors.DepthControl.bringToFront(this)<br />
this.easeDrag(3.00000, 0, 650-this._width, 45,355-this._height)<br />
}<br />
logos[i].onRollOut=function(){<br />
_root.cursor.gotoAndStop(1)<br />
}<br />
}</div>
<p>Se alguém reparou, ainda está faltando um detalhe para o nosso sistema de navegação com drag ficar 100%. Um sistema de colisão entre os movieclips. Mas isso eu deixo como exercício para vocês treinarem a massa cinzenta. Valeu galera, até a próxima.</p>
<p align="justify">
<p align="justify"><strong>Autor: João Guilherme Ribeiro &#8211; Colunista Flash do Portal MXSTUDIO</strong></p>
<p>Qualquer dúvida  acesse o nosso <a href="http://forum.mxstudio.com.br" target="forum">fórum</a>.</td>
</tr>
<tr>
<td id="colunaTexto" valign="top"></td>
</tr>
</tbody>
</table>
<p><script type="text/javascript"><!--
FormatAS(new Array('codigo','codigo1','codigo2','codigo3','codigo4','codigo5'));
// --></script> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/easedrag___e_depthcontrol__/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prototype.rebobinar</title>
		<link>http://www.mxstudio.com.br/desenvolvimento/flash/prototype_rebobinar/</link>
		<comments>http://www.mxstudio.com.br/desenvolvimento/flash/prototype_rebobinar/#comments</comments>
		<pubDate>Mon, 18 Sep 2006 00:00:00 +0000</pubDate>
		<dc:creator>joaoguilherme</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vamos mostrar pra voc&#234;s maneiras simples de melhorar as funcionalidades do Flash sem muito esfor&#231;o e com muito humor.]]></description>
			<content:encoded><![CDATA[<p><script src="http://www.mxstudio.com.br/js/ColorCode.js"></script></p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td id="colunaTexto" valign="top">
<h3>MovieClip.prototype.rebobinar()</h3>
<h1>Pré-Requisitos</h1>
<p align="justify">Macromedia Flash 8, Flash Communication Server ou Flash Media Server.</p>
<h3><strong>Conteúdo</strong></h3>
<p>Olá  enfermeira! Bem vindos a coluna <strong>the  flash</strong>. A coluna de artigos rápidos pra o Flash (entendeu, artigos rápidos,  the flash&#8230;hehehe). Aqui eu vou mostrar pra vocês maneiras simples de melhorar  as funcionalidades do Flash sem muito esforço e com muito humor. Com o tempo,  eu vou mostrar como tirar proveito máximo do Flash, quais são as melhores  soluções e também mostrar algumas coisas pouco discutidas como classes não  documentadas ou recursos não utilizados.</p>
<p>Para  estrear a coluna. Vamos aprender a construir um prototype¹ que rebobina o  MovieClip a qualquer momento que for chamado. Qual é a utilidade disso, seu  João Guilherme? Bem, imagina se você ta fazendo aquele site, cheio de  transições que quando clica em cada botão, a interface que você criou se desfaz  para aparecer outra. Pois é. Imagine se você tivesse que animar na timeline a  interface aparecendo e sumindo&#8230;Não seria fácil né? Esse prototype também é  usado em menus, onde na ação over do botão alguma coisa vai mudando de cor, aí  no out você quer que volte para a cor original. Às vezes, manualmente esse  efeito fica meio confuso, pois nem sempre o frame em que a cor está é adequado.  Vejam os exemplos abaixo e endentam o que eu estou falando:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="516" height="131" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.mxstudio.com.br/wp-content/uploads/2008/04/tut_1_prototype_btns.swf" /><embed type="application/x-shockwave-flash" width="516" height="131" src="http://www.mxstudio.com.br/wp-content/uploads/2008/04/tut_1_prototype_btns.swf"></embed></object></p>
<p>Entenderam?  Se vocês passarem e tirarem o mouse rápido no botão que está “sem prototype”,  provavelmente ele passará de azul claro pra azul escuro rapidamente e os  usuários nem virão a transição acontecendo. Isso não acontece com o prototype,  pois independente da posição na timeline, ela sempre voltará para o frame 1.  Isso é muito bom. Não, é demais&#8230;<br />
Para  criar o protype é muito fácil. Abra o flash, coloque as ações e escreva esse  código:</p>
<p id="codigo" title="codigo4">//declarando a função prototype<br />
MovieClip.prototype.rebobinar = function() {<br />
//fazendo o loop  onEnterFrame<br />
this.onEnterFrame =  function() {<br />
//retornar ao  frame anterior<br />
this.prevFrame();<br />
//verificar se  chegou ao primeiro frame<br />
if (this._currentframe == 1) {<br />
//acabar o loop<br />
delete this.onEnterFrame;<br />
}<br />
};<br />
};</p>
<p>Pronto,  agora sim. Fácil né? Com algumas linhas, solucionamos um dos “probleminhas”  mais comuns de quem trabalha com flash, especialmente flash animado. Abaixo  você pode ver um exemplo de uma animação com o rebobinar funcionando. Na  próxima coluna, vamos aprender a fazer o MovieClip.prototype.onEndAlpha(), um  evento para verificar fadeIn e fadeOut. Até lá.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="450" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.mxstudio.com.br/imagens_artigos/joao_proto_setembro06_imagens/tut1_prototype_rebobinar.swf" /><embed type="application/x-shockwave-flash" width="400" height="450" src="http://www.mxstudio.com.br/imagens_artigos/joao_proto_setembro06_imagens/tut1_prototype_rebobinar.swf"></embed></object></p>
<p align="justify">
<p align="justify"><strong>Autor: João Guilherme Ribeiro- Colunista Flash do Portal MXSTUDIO</strong></p>
<p>Qualquer dúvida  acesse o nosso <a href="http://forum.mxstudio.com.br" target="forum">fórum</a>.</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.mxstudio.com.br/desenvolvimento/flash/prototype_rebobinar/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

