<?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>Francisco Prado &#187; Dicas &amp; Tutoriais</title>
	<atom:link href="http://franciscoprado.com.br/category/dica-tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://franciscoprado.com.br</link>
	<description>Mais um blog sobre Web, desenvolvimento e assuntos em geral...</description>
	<lastBuildDate>Sat, 19 May 2012 13:01:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Como descobrir se um objeto foi clicado no Canvas 2D &#8211; HTML 5</title>
		<link>http://franciscoprado.com.br/2012/02/11/descobrir-objeto-clicado-canvas-2d-html-5-listener-clique-desenho-javascript-mouse/</link>
		<comments>http://franciscoprado.com.br/2012/02/11/descobrir-objeto-clicado-canvas-2d-html-5-listener-clique-desenho-javascript-mouse/#comments</comments>
		<pubDate>Sat, 11 Feb 2012 18:14:01 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[2d]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[clique]]></category>
		<category><![CDATA[desenho]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1842</guid>
		<description><![CDATA[Nesse artigo, inaugural no assunto HTML 5*, falarei de como saber que o usuário clicou em determinado objeto desenhado no Canvas 2D, haja vista que não há suporte a esse recurso no elemento Canvas (quando você adiciona um listener de evento ao Canvas ele diz respeito apenas ao &#60;canvas&#62;, e não a seus desenhos). O ...]]></description>
			<content:encoded><![CDATA[<p>Nesse artigo, inaugural no assunto <a href="http://www.w3schools.com/html5/default.asp" target="_blank">HTML 5</a>*, falarei de como saber que o usuário clicou em determinado objeto desenhado no Canvas 2D, haja vista que não há suporte a esse recurso no elemento Canvas (quando você adiciona um listener de evento ao Canvas ele diz respeito apenas ao <code>&lt;canvas&gt;</code>, e não a seus desenhos).</p>
<p>O truque é simples: basta adicionar um listener de clique ao elemento Canvas, e, baseando-se nas coordenadas X e Y do clique, buscar se os valores estão &#8220;dentro&#8221; de um desenho, aferindo através dos valores da posição (X e Y do desenho) e sua largura. Se não quiser acompanhar o texto, você pode ir até o final do post, que lá há link com o arquivo HTML para download contendo o código comentado.</p>
<p>Primeiro, adiciona-se o elemento com o atributo <em>id:</em></p>
<pre>
&lt;!-- cabe&ccedil;alho do arquivo html ocultado--&gt;

&lt;canvas id=&quot;canvas-element&quot; width=&quot;350&quot; height=&quot;300&quot; style=&quot;border: solid 1px; cursor: pointer;&quot;&gt;
&lt;/canvas&gt;

&lt;!-- onde vai o Script JS --&gt;
</pre>
<p>&nbsp;</p>
<p>No exemplo abaixo, para facilitar, criei uma &#8220;classe&#8221;** no Javascript chamada <strong>Rectangle</strong>, que vai encapsular toda a tarefa de armazenar esses valores e desenhar um retângulo vermelho.</p>
<pre>
function Rectangle(x,y,width,height)
{
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;

    // responsável por desenhar o retângulo
    this.draw = function(ctx)
    {
        ctx.rect(this.x, this.y, this.width, this.height);
        ctx.fillStyle = "#F00";
        ctx.fill();
        ctx.stroke();
    }
}
</pre>
<p>&nbsp;</p>
<p>Em seguida, criamos objetos que irão desenhar o retângulo, e adicionamos o listener para o momento do clique (mais precisamente, um evento &#8220;mousedown&#8221;). Ele chamará a função que irá verificar se o clique foi sobre o retângulo:</p>
<pre>

var r = new Rectangle(20, 50, 150, 100);
var el = document.getElementById("canvas-element");
var ctx = el.getContext("2d");

r.draw(ctx);

el.addEventListener("mousedown", onMouseClick);

// event listener
function onMouseClick(evt)
{
    // o valor do X e Y do mouse no momento do clique
    var mouseX = evt.offsetX;
    var mouseY = evt.offsetY;

    // valor booleano de retorno
    var was_clicked = detectTarget(mouseX, mouseY);

    // se "true", exibe a mensagem
    if (was_clicked)
        alert("Clicou no retângulo!");
}
</pre>
<p>&nbsp;</p>
<p>Depois de adicionar o listener para o clique no elemento Canvas em questão, ele chamará um método (no caso, <em>detectTarget</em>) que irá descobrir se a posição do mouse no instante do clique foi dentro do tal retângulo vermelho. Quando o retângulo for clicado, será exibida uma mensagem. O código Javascript correspondente:</p>
<pre>
function detectTarget(mouseX, mouseY)
{
    /*
    outros objetos booleanos.
    No caso do horizontal, se a posição X do clique for maior ou igual
    ao X do retângulo, e também menor ou igual à sua posição X mais a largura,
    é porque o clique foi dentro do retângulo. O mesmo procedimento
    é adotado no limite vertical.
    */
    var horizontal_limit = mouseX &gt;= r.x &amp;&amp; mouseX &lt;= (r.x + r.width);
    var vertical_limit = mouseY &gt;= r.y &amp;&amp; mouseY &lt;= (r.y + r.height);

    /*
    se o clique for dentro do espaço que compreende o retângulo
    tanto na horizontal quanto na vertical, retorna verdadeiro
    */
    if (horizontal_limit &amp;&amp; vertical_limit)
        return true;
    else
        return false;
}
</pre>
<p>Aqui segue o resultado final:</p>
<p><iframe src="http://franciscoprado.com.br/wp-content/uploads/2012/02/canvas2d.html" frameborder="0" width="400" height="350"></iframe></p>
<p><a href="http://franciscoprado.com.br/wp-content/uploads/2012/02/canvas2d.html" target="_blank">Clique aqui para fazer o download</a>.</p>
<p>Estava com dúvida de como implementar de forma esse esquema de interação no Canvas e por isso resolvi criar esse exemplo e publicar aqui. Pode-se ver que o código não está aquelas maravilhas pelo simples motivo de rapidez e de tentar deixar bem claro como funciona &#8211; afinal, uma solução completa seria criar classes, mais métodos e atributos, entre outros. Enfim, é isso!</p>
<hr />
<p><small><em>* É verdade, já falei de SVG por aqui, mas ao contrário do que muitos dizem SVG não pertence ao arco do HTML 5 &#8211; é um padrão diferente.</em></small></p>
<p><small><em>** Não existe, na realidade, classes em Javascript, com suporte a herança, interfaces, etc. A Orientação a Objetos é tratada de maneira diferente, com base em protótipos. No entanto, é possível &#8220;imitar&#8221; classes através de function, como foi o caso. Para saber mais, ver: <a href="https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript">https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript</a></em></small></p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2012/02/11/descobrir-objeto-clicado-canvas-2d-html-5-listener-clique-desenho-javascript-mouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Games na Web: como distribuir, divulgar e faturar &#8211; parte 1</title>
		<link>http://franciscoprado.com.br/2012/01/29/games-na-web-como-distribuir-divulgar-e-faturar-parte-1/</link>
		<comments>http://franciscoprado.com.br/2012/01/29/games-na-web-como-distribuir-divulgar-e-faturar-parte-1/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 18:26:44 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Colunas]]></category>
		<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[conceito]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dinheiro]]></category>
		<category><![CDATA[ideia]]></category>
		<category><![CDATA[negócios]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1820</guid>
		<description><![CDATA[Bem, caro visitante, este post não é assim tão original, você consegue encontrar dicas de como divulgar seu game (seja ele em Flash, foco do meu blog, ou em outras plataformas) em blogs, fóruns e portais estrangeiros. No entanto, gostaria de contribuir postando algo em português daquilo que aprendi até agora &#8211; que é muito ...]]></description>
			<content:encoded><![CDATA[<p>Bem, caro visitante, este post não é assim tão original, você consegue encontrar dicas de como divulgar seu game (seja ele em Flash, foco do meu blog, ou em outras plataformas) em blogs, fóruns e portais estrangeiros. No entanto, gostaria de contribuir postando algo em português daquilo que aprendi até agora &#8211; que é muito pouco, admito, pois praticamente estou apenas começando &#8211; mas que pode servir de apontamento para quem está debutando na área e sonha em viver de games, focados em Web, como é o meu caso, e percebe que ainda há conteúdo incipiente ou muito disperso em português.</p>
<p>Pretendo fazer uma série de posts, pois colocar todo o conteúdo numa só postagem além de excessivo fica maçante. Vou começar discutindo sobre a ideia do jogo &#8211; onde me sinto mais à vontade, por ter formação em publicidade também.</p>
<h2>O conceito</h2>
<p><a href="http://franciscoprado.com.br/wp-content/uploads/2012/01/lamp_idea.png" rel="lightbox[1820]"><img class="alignleft  wp-image-1827" style="margin: 11px;" title="lamp_idea" src="http://franciscoprado.com.br/wp-content/uploads/2012/01/lamp_idea.png" alt="Ideia" width="190" height="190" /></a>Penso que para criar um jogo, se você é programador, é, primeiro, definir <strong>BEM</strong> o que será o jogo. É péssimo ter um estalo (o tal do <em>insight</em> &#8211; detesto esse termo) e querer sair programando. Aí corre-se o risco de se desiludir com a tal ideia até então genial e ficar frustado, ou então tentar adaptar uma nova ideia ao código já feito &#8211; o que tornará o código uma maçaroca e de infindáveis dores de cabeça.</p>
<p>Sendo assim, é interessante <strong>conversar</strong>. Apresente e pergunte às pessoas sobre a ideia. Elas podem colaborar ou advertir sobre o conceito, erros e acertos. Existe aquela máxima do Steve Jobs sobre inovação, em que se Henry Ford perguntasse aos clientes o que eles queriam, eles diriam &#8220;um cavalo mais rápido&#8221;. No entanto, se você não tem a intenção de fazer games de <a href="http://pt.wikipedia.org/wiki/Vanguarda" target="_blank">vanguarda</a> ( <img src='http://franciscoprado.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' />  ) seria interessante, também, fazer uma <strong>versão alpha/beta do jogo </strong>para demonstração da ideia, e assim esperar o <em>feedback</em>, como fizeram, de maneira extremamente bem-sucedida, <a href="http://en.wikipedia.org/wiki/Minecraft" target="_blank">os criadores do Minecraft</a>.</p>
<p>No caso de <strong>games casuais e sociais em Flash</strong> um lugar bom para isso é o site americano <a href="newgrounds.com" target="_blank">Newgrouds</a>. É um portal que nasceu como fanzine e reúne pessoal que faz <strong>música</strong> (muitas vezes disponibilizando elas para uso em games de maneira gratuita), <strong>ilustrações</strong> e, principalmente,<strong> games e animações em Flash</strong>. É nele também em que muitos outros portais pegam novos jogos, ajudando na distribuição.</p>
<p>Entre outros sites para isso temos os <a href="http://www.kongregate.com/forums" target="_blank">fóruns do Kongregate</a>, do <a href="http://armorgames.com/community/" target="_blank">ArmorGames</a>, ambos em inglês, e do <a href="http://www.programadoresdejogos.com/forum/" target="_blank">PDJ </a>(este, nacional). Pessoalmente, prefiro ir em fóruns estrangeiros, pois o <em>feedback</em> tende a ser mais rápido.</p>
<p>&#8211;X&#8211;</p>
<p>Enfim, é isso, sem muitas delongas. Espero ter ajudado e, ah, não percam às próximas partes. Antes de mais nada, se quiser mais sobre assunto:</p>
<ul>
<li>&#8220;<a href="http://abrindoojogo.com.br/lancamento-do-minecraft-e-alphafunding" target="_blank">Lançamento do Minecraft e Alphafunding</a>&#8220;, do blog <em>Abrindo o Jogo</em>.</li>
</ul>
<p><strong>Ver também</strong>: <a href="http://franciscoprado.com.br/2012/02/07/games-na-web-como-distribuir-divulgar-e-faturar-parte-2/" target="_blank">Parte 2 da série</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2012/01/29/games-na-web-como-distribuir-divulgar-e-faturar-parte-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Detectando quais teclas estão pressionadas em ActionScript 3</title>
		<link>http://franciscoprado.com.br/2011/01/06/detectando-teclas-pressionadas-actionscript/</link>
		<comments>http://franciscoprado.com.br/2011/01/06/detectando-teclas-pressionadas-actionscript/#comments</comments>
		<pubDate>Thu, 06 Jan 2011 13:21:21 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[teclado]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1651</guid>
		<description><![CDATA[É simples você saber qual tecla foi pressionada em ActionScript. Um pouco mais complicado é saber qual conjunto de teclas estão sendo pressionadas simultaneamente. Isto pode ser necessário em caso de games, como num de corrida, em que o usuário pressionará várias teclas ao mesmo tempo, como um botão para acelerar, outro para direcionar o ...]]></description>
			<content:encoded><![CDATA[<p>É simples você saber qual tecla foi pressionada em ActionScript. Um pouco mais complicado é saber qual conjunto de teclas estão sendo pressionadas simultaneamente. Isto pode ser necessário em caso de games, como num de corrida, em que o usuário pressionará várias teclas ao mesmo tempo, como um botão para acelerar, outro para direcionar o carro, e assim vai.</p>
<p>Algumas bibliotecas oferecem esse recurso, como o <a href="http://casalib.org/" target="_blank">CASALib</a>. No entanto basta um código simples para isso. A seguir, segue um exemplo em que são mostradas num campo de texto as teclas que estão sendo pressionadas num momento. No campo de texto será exibido os valores <em>keyCode </em>(a representação da tecla em número da <a href="http://pt.wikipedia.org/wiki/ASCII" target="_blank">tabela ASCII</a>) das teclas.</p>
<pre>
// campo de texto informativo
var output:TextField = new TextField();

// as teclas pressionadas
var arr_teclas:Array = new Array();

// listeners que detectarão o pressionamento de teclas
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);

// tamanho do texto e adicionando ao stage
output.text = "Teclas pressionadas: ";
output.scaleY = output.scaleX = 2;
output.width = 300;
addChild(output);

function keyDown(evt:KeyboardEvent):void {
	/* se não houver nenhuma tecla na array que
	 * corresponda à tecla pressionada,
	 * adiciona a atual à array */

	if (arr_teclas.indexOf(evt.keyCode) < 0) {
		arr_teclas.push(evt.keyCode);
	}

	// exibe as teclas pressionadas atualmente
	output.text = "Teclas pressionadas: " + arr_teclas.join();
}

function keyUp(evt:KeyboardEvent):void {
	/* Se a tecla deixou de ser pressionada,
	 * busca ela na array e a remove */

	if (arr_teclas.indexOf(evt.keyCode) >= 0) {
		arr_teclas = arr_teclas.splice(0, arr_teclas.indexOf(evt.keyCode));
	}

	// exibe as teclas pressionadas atualmente
	output.text = "Teclas pressionadas: " + arr_teclas.join();
}
</pre>
<p>Veja o resultado a seguir, pressionando teclas (dê foco ao SWF clicando no quadro abaixo):</p>
<div style="border:solid 1px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://franciscoprado.com.br/wp-content/uploads/2011/01/Teclas1.swf" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://franciscoprado.com.br/wp-content/uploads/2011/01/Teclas.swf"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2011/01/06/detectando-teclas-pressionadas-actionscript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Criando um sistema de partículas simples com ActionScript 3.0</title>
		<link>http://franciscoprado.com.br/2010/12/20/criando-sistema-particulas-actionscript-3/</link>
		<comments>http://franciscoprado.com.br/2010/12/20/criando-sistema-particulas-actionscript-3/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 18:51:13 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[efeitos]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[FX]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[TweenMax]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1604</guid>
		<description><![CDATA[Há várias maneiras de como se criar partículas em Flash. Há desde bibliotecas que facilitam o trabalho e permitem criar efeitos excelentes (é o caso da Tweensy e a sua parte &#8211; ainda em beta &#8211; FX) até os tutoriais dificílimos disponíveis na Web, que geralmente envolvem muita matemática &#8211; e que são muito bons ...]]></description>
			<content:encoded><![CDATA[<p>Há várias maneiras de como se criar partículas em Flash. Há desde bibliotecas que facilitam o trabalho e permitem criar efeitos excelentes (é o caso da <a href="http://code.google.com/p/tweensy/wiki/TweensyFX" target="_blank">Tweensy e a sua parte &#8211; ainda em beta &#8211; FX</a>) até os tutoriais dificílimos disponíveis na Web, que geralmente envolvem muita matemática &#8211; e que são muito bons -, de sites como o <a href="http://www.flashandmath.com/" target="_blank">Flash &amp; Math</a>.</p>
<p>No entanto, até que não é muito complicado criar efeitos simples usando bibliotecas como a <a href="http://www.greensock.com/tweenmax/" target="_blank">TweenMax</a>. Com uma quantidade enxuta de linhas é possível fazer efeitos interessantes.</p>
<p>A seguir, posto um exemplo bem simples, mas que serve para ilustrar que usar métodos e métodos para controle de tempo e criação de efeitos são desnecessários usando TweenMax:</p>
<pre>
package
{
	import flash.display.*;
	import flash.events.*;
	import com.greensock.*; 

	/**
	 * ...
	 * @author Francisco Prado
	 */
	public class Main extends MovieClip
	{
		private var volume:int = 0;
		private var particulas:Array = new Array();

		public function Main():void
		{
			// inicia (ou desenha mais) "partículas"
			desenharParticula();
		}

		private function desenharParticula():void {
			var mc:MovieClip = new MovieClip();
			mc.graphics.beginFill(Math.round(Math.random()*0x6666ff));
			mc.graphics.drawCircle(0, 0, 5);
			mc.graphics.endFill();

			mc.x = 200;
			mc.y = 300;

			addChild(mc);

			// fazendo as "partículas" subirem e desaparecerem
			TweenMax.to(mc, Math.random() + 1,
			{ bezier: [
			{ x: mc.x, y: mc.y },
			{ x: (Math.random() * 50) + mc.x, y: 250 },
			{ x: (Math.random() * -50) + mc.x, y: 180 },
			{ x: mc.x, y: 80 }],
			orientToBezier:true, blurFilter: { blurX: 10, blurY: 10 }, alpha: 0, motionBlur:true,
			onComplete: function removendo():void {
					removeChild(mc);
					mc = null;
				}
			});

			// chama o método para adicionar novas partículas à cena
			TweenMax.to(this, 0, { delay: 0.05, onComplete: desenharParticula } );
		}
	}
}
</pre>
<p>O código fará o efeito seguinte:</p>
<div style="text-align: center; margin: 20px 0 20px 0;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://franciscoprado.com.br/wp-content/uploads/2010/12/NewProject.swf" /><embed type="application/x-shockwave-flash" width="400" height="400" src="http://franciscoprado.com.br/wp-content/uploads/2010/12/NewProject.swf"></embed></object></div>
<p>A ideia aqui não é mostrar necessariamente como fazer um sistema bonitinho de particulas, mas sim demonstrar que com uma linha do TweenMax é possível fazer um método para tempo e efeitos de cores e luz.</p>
<p>Usando ActionScript &#8220;puro&#8221; seria necessário apelar para uma variável <em>Timer</em>, uma outra linha para iniciar a contagem e uma função para manipular eventos no AS (<em>TimerEvent</em>).</p>
<p>Já com uma linha (no caso, a 48 do exemplo anterior) do TweenMax é possível fazer uma contagem (usando a propriedade de atraso <em>delay</em>) é possível fazer todas as coisas: o tempo e a chamada da função (no atributo <em>onComplete </em>é chamado o método que adicionará mais partículas).</p>
<p>A mesma situação na linha que fazem as partículas subirem e sumirem. Com o parâmetro <em>bezier </em>da TweenMax é possível fazer animações em curvas. Você pode conhecer mais efeitos testando <a href="http://www.greensock.com/tweenmax/" target="_blank">nesta página, na seção Plugins</a>.</p>
<p>Enfim, com um punhado de linhas é possível fazer efeitos bem interessantes, dispensando assim volumosos códigos chatos para caramba.</p>
<p>Acredito que, em se trantando de Flash &#8211; largamente utilizado na publicidade -, quanto menos linhas de código melhor, pois os prazos nem sempre são generosos (geralmente tudo é &#8220;pra ontem&#8221; <img src='http://franciscoprado.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) e eficiência é sempre fundamental.</p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/12/20/criando-sistema-particulas-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Editores de texto em JavaScript/HTML para uso no seu site</title>
		<link>http://franciscoprado.com.br/2010/07/16/editor-texto-javascript-html-wysiwyg/</link>
		<comments>http://franciscoprado.com.br/2010/07/16/editor-texto-javascript-html-wysiwyg/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 23:15:16 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[Padrões Web]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1542</guid>
		<description><![CDATA[Nesta postagem rápida falarei de editores de texto feitos em JavaScript de código aberto, para uso em sites, blogs, entre outros. A maioria funciona de modos parecidos: basta você adicionar uma área de texto em HTML (&#60;textarea&#62;&#60;/textarea&#62;), ligar o arquivo JavaScript da biblioteca &#8211; podendo definir algumas características &#8211; e pronto. Via Google são fáceis ...]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://moxiecode.cachefly.net/tinymce/img/editor.gif" alt="Editor de Texto em JavaScript" width="200" height="145" />Nesta postagem rápida falarei de editores de texto feitos em JavaScript de código aberto, para uso em sites, blogs, entre outros.</p>
<p>A maioria funciona de modos parecidos: basta você adicionar uma área de texto em HTML (&lt;textarea&gt;&lt;/textarea&gt;), ligar o arquivo JavaScript da biblioteca &#8211; podendo definir algumas características &#8211; e pronto.</p>
<p>Via Google são fáceis de encontrar, mas aqui vou aproveitar para falar a respeito de dois deles com quem já lidei: o TinyMCE e o NicEdit.</p>
<p><a href="http://tinymce.moxiecode.com/" target="_blank"><strong>TinyMCE</strong></a> &#8211; provavelmente o mais popular, utilizado inclusive pelo WordPress, Joomla, entre outros. Talvez seja o que conheça melhor, não por ter usado em algum trabalho, mas por curiosidade (fucei sua documentação e experimentei criar plugin, entre outros). Gostei muito: bem completo, integrado com jQuery (permite usar código desta biblioteca sem grande conflito), fácil de usar, boa documentação, entre outros.</p>
<p><a href="http://ckeditor.com/" target="_blank"><strong>CKEditor</strong></a> &#8211; nunca usei, mas parece ser tão bom quanto o TinyMCE. A barra de ferramentas é bem completa, a interface é linda, além de já vir com versão em português. Só tenho dúvidas com relação à documentação: procurei e não encontrei. Além de tudo, ao que parece, vários recursos são pagos (?). Enfim, vale ficar de olho.</p>
<p><a href="http://nicedit.com/" target="_blank"><strong>NicEdit</strong></a> &#8211; já usei este, na seção de comentários deste blog, até um tempo atrás. Retirei ele por &#8220;comer&#8221; as quebras de linha (as tags &lt;br /&gt; &#8211; o texto do comentarista ficava todo colado). Acho-o muito limitado, mas talvez seja o mais simples de se integrar. Para quem não quer lidar com muito código, talvez seja a melhor solução.</p>
<p>Enfim, acredito que podemos resumir assim: caso queira um editor completo e precise personalizá-lo, o TinyMCE é para você. Se você quer um editor bonitão, vá de CKEditor. Agora, se você não entende muito de Javascript nem de HTML, experimente o NicEdit.</p>
<p>E este é o fim da postagem. E caso queira sair, aperte o botão de &#8220;Fechar&#8221; do seu navegador! <img src='http://franciscoprado.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/07/16/editor-texto-javascript-html-wysiwyg/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Brushes para Photoshop: como usar e onde encontrar</title>
		<link>http://franciscoprado.com.br/2010/06/20/brush-photoshop-download-tutorial-resources/</link>
		<comments>http://franciscoprado.com.br/2010/06/20/brush-photoshop-download-tutorial-resources/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 14:34:54 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[brushes]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1467</guid>
		<description><![CDATA[Quem tem que desenhar sites sabe que muitas vezes os prazos são exíguos e quanto mais uma tarefa é agilizada, melhor. Por isso muitas vezes o jeito é se utilizar de ferramentas e recursos &#8220;pré-fabricados&#8221;. Não costumo usar o Photoshop para criação de layouts (para isso prefiro o Adobe Fireworks), mas como há muitos brushes ...]]></description>
			<content:encoded><![CDATA[<p><span class="capitular">Q</span><span class="versaletes">uem tem que desenhar sites</span> sabe que muitas vezes os prazos são exíguos e quanto mais uma tarefa é agilizada, melhor.</p>
<p>Por isso muitas vezes o jeito é se utilizar de ferramentas e recursos &#8220;pré-fabricados&#8221;. Não costumo usar o Photoshop para criação de <em>layouts </em>(para isso prefiro o <strong>Adobe Fireworks</strong>), mas como há muitos <strong>brushes</strong> (tipos de pincéis) disponíveis na Web para download, uso para criação de algumas partes, como efeitos de plano de fundo.<span id="more-1467"></span></p>
<p>Deixo então nesta postagem uma seleção de links bacanas dos inúmeros que tenho <a href="http://delicious.com/franciscoprado/brushes" target="_blank">favoritado no meu Delicious</a>.</p>
<p><strong><a href="http://www.webdesignmash.com/2010/06/freebies-20-watercolor-photoshop-brushes/" target="_blank">Brushes de aquarela</a></strong> &#8211; quer criar um efeito rápido de pintura? Aí estão 20 brushes ótimos para isso.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.webdesignmash.com/trial/wp-content/uploads/2010/06/watercolor-brushes02.jpg" alt="" width="480" height="251" /></p>
<p><strong><a href="http://www.1stwebdesigner.com/freebies/awesome-grunge-style-photoshop-brush-packs/" target="_blank">40 brushes estilo </a></strong><strong><em><a href="http://www.1stwebdesigner.com/freebies/awesome-grunge-style-photoshop-brush-packs/" target="_blank">grunge </a></em><a href="http://www.1stwebdesigner.com/freebies/awesome-grunge-style-photoshop-brush-packs/" target="_blank">(&#8220;sujo&#8221;)</a></strong> &#8211; uma postagem com um pacotão de brushes para criação de efeitos bem <em>punks</em>, em diversos estilos. Recomendo.</p>
<p><a href="http://www.webdesignmash.com/2010/02/20-free-splat-brushes-for-photoshop/?utm_medium=bt.io-twitter" target="_blank"><strong>20 brushes para efeitos de tinta espirrada</strong></a> &#8211; outra boa série. Lembra muito a série de brushes do link anterior.</p>
<p><a href="http://theroxor.com/2010/01/14/350-photoshop-stain-brushes/" target="_blank"><strong>350 efeitos de mancha</strong></a> &#8211; também segue a mesma linha.</p>
<p><strong><a href="http://sixrevisions.com/photoshop/24-useful-tutorials-on-creating-photoshop-brushes/" target="_blank">24 tutoriais para criação de brushes de Photoshop</a></strong> &#8211; aí segue uma coleção de tutoriais para você criar seus próprios pincéis.</p>
<p><strong><a href="http://mediamilitia.com/bling-effects-pack-pack-50-free-photoshop-brushes/" target="_blank">50 brushes com efeitos de luz/estrela</a></strong> &#8211; talvez seja mais fácil usar o efeito de luz nativo do Photoshop para isso. Mas caso queira uma coisa diferente, segue aí um pacote.</p>
<p>Confesso que não testei todos os links que passei aqui. Mas os que baixei funcionaram bem. Para instalar os brushes basta você copiar o arquivo do download (deverá ser um arquivo com extensão .abr) para a pasta Presets&gt;&gt;Brushes da sua instalação do Adobe Photoshop (exemplo: &#8220;C:/Arquivos de programas/Adobe/Adobe Photoshop CS4/Presets/Brushes&#8221;), daí é iniciar o programa e correr para o abraço.</p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/06/20/brush-photoshop-download-tutorial-resources/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gráficos SVG no Internet Explorer usando uma biblioteca JavaScript</title>
		<link>http://franciscoprado.com.br/2010/06/03/graficos-svg-no-internet-explorer-usando-uma-biblioteca-javascript/</link>
		<comments>http://franciscoprado.com.br/2010/06/03/graficos-svg-no-internet-explorer-usando-uma-biblioteca-javascript/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 14:49:53 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[Padrões Web]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[navegador]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[svg]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1413</guid>
		<description><![CDATA[É conhecida a limitação do Internet Explorer no que diz respeito a padrões Web. Uma das mais conhecidas é sobre o suporte à exibição de gráficos vetoriais SVG. No entanto, existe uma biblioteca Javascript chamada svgweb que procura cobrir essa limitação. Linkando a biblioteca a um arquivo ela substituirá a parte em SVG (que é ...]]></description>
			<content:encoded><![CDATA[<p>É conhecida a limitação do <strong>Internet Explorer</strong> no que diz respeito a <a href="http://pt.wikipedia.org/wiki/Padr%C3%B5es_web#Padr.C3.B5es_W3C" target="_blank">padrões Web</a>. Uma das mais conhecidas é sobre o suporte à exibição de <strong><a href="http://pt.wikipedia.org/wiki/Scalable_Vector_Graphics" target="_blank">gráficos vetoriais SVG</a></strong>. No entanto, existe uma biblioteca Javascript chamada <strong><a href="http://code.google.com/p/svgweb/" target="_blank">svgweb</a> </strong>que procura cobrir essa limitação.</p>
<p>Linkando a biblioteca a um arquivo ela substituirá a parte em SVG (que é suportada pelos outros navegadores populares, como Firefox, Chrome e Opera) por um arquivo em Flash, que irá exibir praticamente a mesma coisa. Em outras palavras: se a biblioteca reconhecer que o navegador suporta SVG, ela não fará nada, apenas deixa o SVG ser exibido normalmente; se ele perceber que é o IE 8 e anteriores (que não suportam SVG) que o usuário está usando ele irá substituir por um arquivo em Flash que exibirá o arquivo SVG, com todos as suas configurações, como animação e interatividade.</p>
<p>Testei alguns exemplos e achei bem interessante. Ainda não testei na minha máquina, e sim apenas os exemplos fornecidos no site do projeto, e cumpriu bem a tarefa.</p>
<p>Trata-se de uma solução interessante. O iPad, por exemplo, suporta SVG, mas não animações em Flash; já o IE é o contrário. Usando essa biblioteca podemos programar apenas uma vez (SVG com JavaScript) e rodar em qualquer navegador.</p>
<p>Fica a dica. <img src='http://franciscoprado.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/06/03/graficos-svg-no-internet-explorer-usando-uma-biblioteca-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando jQuery para manipular arquivos SVG</title>
		<link>http://franciscoprado.com.br/2010/05/28/usando-jquery-para-manipular-arquivos-svg-javascript-tutorial/</link>
		<comments>http://franciscoprado.com.br/2010/05/28/usando-jquery-para-manipular-arquivos-svg-javascript-tutorial/#comments</comments>
		<pubDate>Fri, 28 May 2010 14:31:18 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[Padrões Web]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1345</guid>
		<description><![CDATA[Em uma postagem anterior falei da biblioteca Raphaël para criação de gráficos vetoriais SVG usando Javascript. Agora nesta postagem, demonstrarei como usar a popular biblioteca jQuery para manipular arquivos SVG, usando um plugin. Utilizar este plugin, em detrimento de uma biblioteca mais específica, pode ser útil quando se está habituado a usar jQuery. No site ...]]></description>
			<content:encoded><![CDATA[<p><span class="capitular">E</span><span class="versaletes">m <a href="http://franciscoprado.com.br/2010/05/02/usando-raphael-para-geracao-de-svg-atraves-de-javascript-tutorial/" target="_blank">uma postagem anterior</a></span> falei da biblioteca Raphaël para criação de gráficos vetoriais SVG usando Javascript. Agora nesta postagem, demonstrarei como <a href="http://plugins.jquery.com/project/svg" target="_blank">usar a popular biblioteca jQuery para manipular arquivos SVG, usando um plugin</a>.</p>
<p>Utilizar este plugin, em detrimento de uma biblioteca mais específica, pode ser útil quando se está habituado a usar <a href="http://jquery.com/" target="_blank">jQuery</a>. No <a href="http://keith-wood.name/svg.html" target="_blank">site oficial do projeto jQuery SVG</a> você encontra diversos exemplos úteis.</p>
<p>Existe a <a href="http://keith-wood.name/svgRef.html" target="_blank">documentação da biblioteca</a>, no site, onde você encontra, bem organizadamente, métodos e atributos para utilizar a biblioteca.</p>
<p>Experimentei um pouco a biblioteca. Para testes, você deve baixar os arquivos Javascript específicos e direcionar corretamente a localização nas pastas de acordo com o seu computador. A seguir, um exemplo, em que baixei do site e modifiquei, adicionando um retângulo que responde aos cliques do mouse (repare nos parâmetros &#8211; entre chaves &#8211; a chamada do método <em>alert</em>).</p>
<pre>
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;
 &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot;&gt;
&lt;title&gt;jQuery SVG - o Básico&lt;/title&gt;
&lt;style type=&quot;text/css&quot;&gt;
@import &quot;css/jquery.svg.css&quot;;

#svgbasics { width: 400px; height: 300px; border: 1px solid #484; }
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.svg.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
 $(function() {
 // Ao ser carregado, chamará a função draw...
 $('#svgbasics').svg({onLoad: draw});
 });

 function draw (svg) {
 // Desenhando um círculo...
 svg.circle(75, 75, 50, {fill: 'none', stroke: 'red', 'stroke-width': 3});

 // Criando um grupo com duas linhas...
 var g = svg.group({stroke: 'black', 'stroke-width': 2});
 svg.line(g, 15, 75, 135, 75);
 svg.line(g, 75, 15, 75, 135);

 // Desenhando um retângulo que, quando clicado, chama o método alert
 svg.rect(g, 150, 100, 200, 100, 10, 10,
 {fill: 'yellow', stroke: 'navy', strokeWidth: 5, onclick:&quot;alert('Você clicou!')&quot;});
 }

&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
 &lt;h1&gt;jQuery SVG - O Básico&lt;/h1&gt;
 &lt;p&gt;Página de exemplo&lt;/p&gt;
 &lt;div id=&quot;svgbasics&quot;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/05/28/usando-jquery-para-manipular-arquivos-svg-javascript-tutorial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando SVG através do ActionScript &#8211; AS3 SVG Renderer</title>
		<link>http://franciscoprado.com.br/2010/05/09/svg-actionscript-render-biblioteca-as3/</link>
		<comments>http://franciscoprado.com.br/2010/05/09/svg-actionscript-render-biblioteca-as3/#comments</comments>
		<pubDate>Sun, 09 May 2010 12:40:46 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[biblioteca]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1312</guid>
		<description><![CDATA[É possível carregar arquivos gráficos SVG (formato de arquivos de desenho em vetor, organizados em modo XML) através do ActionScript como se fossem Sprites. A biblioteca AS3 SVG Renderer suporta boa parte dos recursos oferecidos pela linguagem SVG. Criada por um brasileiro (veja o blog), ela ainda não suporta o carregamento de arquivos de imagem ...]]></description>
			<content:encoded><![CDATA[<p>É possível carregar arquivos gráficos <a href="http://pt.wikipedia.org/wiki/Svg" target="_blank">SVG</a> (formato de arquivos de desenho em vetor, organizados em modo XML) através do ActionScript como se fossem Sprites.</p>
<p>A biblioteca <a href="http://code.google.com/p/as3svgrendererlib/" target="_blank">AS3 SVG Renderer</a> suporta boa parte dos recursos oferecidos pela linguagem SVG. Criada por um brasileiro (<a title="Lucas Lorentz" href="http://www.lucaslorentz.com.br/2009/07/as3-svg-renderer.html" target="_blank">veja o blog</a>), ela ainda não suporta o carregamento de arquivos de imagem (como JPEG, PNG, etc., um recurso disponível no SVG), o que não chega a atrapalhar em nada (haja vista que é possível carregar Bitmaps usando classes nativas do ActionScript). Muitos outros recursos estão disponíveis (desenhos de formas, linhas, transformações como rotação e inclinação, entre outros).</p>
<p>O uso da biblioteca é muito simples: basta carregar o arquivo como se fosse um XML, usando o <em>package </em>do ActionScript. O programa Adobe Flash torna-se dispensável.</p>
<p>O exemplo a seguir carrega e exibe um SVG carregado a partir de uma URL qualquer.<span id="more-1312"></span></p>
<p>[actionscript3]<br />
package<br />
{<br />
	import flash.display.MovieClip;<br />
	import flash.display.Sprite;</p>
<p>	// A biblioteca AS3 SVG RENDERER<br />
	import com.lorentz.SVG.*;</p>
<p>	import flash.events.Event;</p>
<p>	import flash.net.URLLoader;<br />
	import flash.net.URLRequest;</p>
<p>	/**<br />
	 * &#8230;<br />
	 * @author FRANCISCO PRADO<br />
	 */<br />
	public class Main extends Sprite<br />
	{<br />
		public var mc:MovieClip = new MovieClip();</p>
<p>		public function Main() {<br />
			// Carregador da figura<br />
			var loader:URLLoader = new URLLoader();<br />
			loader.addEventListener(Event.COMPLETE, onComplete);</p>
<p>			// Iniciando o carregamento<br />
			loader.load(new URLRequest(&quot;URL do arquivo.svg&quot;));</p>
<p>			addChild(mc);<br />
		}</p>
<p>		public function onComplete(evt:Event):void {<br />
			var shp:Sprite;<br />
			var svg:XML = new XML(evt.target.data);</p>
<p>			// Renderizará o arquivo SVG<br />
			shp = new SVGRenderer(svg);</p>
<p>			// Adiciona ao movieclip<br />
			mc.addChild(shp);<br />
		}<br />
	}<br />
}<br />
[/actionscript3]</p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/05/09/svg-actionscript-render-biblioteca-as3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Usando Raphaël para geração de SVG através de Javascript</title>
		<link>http://franciscoprado.com.br/2010/05/02/usando-raphael-para-geracao-de-svg-atraves-de-javascript-tutorial/</link>
		<comments>http://franciscoprado.com.br/2010/05/02/usando-raphael-para-geracao-de-svg-atraves-de-javascript-tutorial/#comments</comments>
		<pubDate>Sun, 02 May 2010 15:58:30 +0000</pubDate>
		<dc:creator>Francisco</dc:creator>
				<category><![CDATA[Dicas & Tutoriais]]></category>
		<category><![CDATA[Padrões Web]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[raphael]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[vetor]]></category>
		<category><![CDATA[webstandards]]></category>

		<guid isPermaLink="false">http://franciscoprado.com.br/?p=1282</guid>
		<description><![CDATA[Neste post irei abordar como usar a biblioteca Raphaël para a geração de gráficos vetoriais em SVG, usando apenas Javascript. Vale lembrar que, apesar de ser uma maneira aberta de se gerar gráficos em vetor, o uso de SVG não está disponível para navegadores como Internet Explorer 8 e versões anteriores, além de &#8220;renderizar&#8221; de ...]]></description>
			<content:encoded><![CDATA[<p>Neste post irei abordar como usar a biblioteca Raphaël para a geração de gráficos vetoriais em <a href="http://pt.wikipedia.org/wiki/SVG" target="_blank">SVG</a>, usando apenas Javascript. Vale lembrar que, apesar de ser uma maneira aberta de se gerar gráficos em vetor, o uso de SVG não está disponível para navegadores como Internet Explorer 8 e versões anteriores, além de &#8220;renderizar&#8221; de maneiras um pouco distintas em navegadores como Chrome, Firefox e Opera.</p>
<p>Para usar esta biblioteca, é necessário que <a href="http://raphaeljs.com/" target="_blank">você baixe o arquivo Javascript no site oficial do projeto</a>. Há um plugin para esta biblioteca destinado à <a href="http://g.raphaeljs.com/" target="_blank">geração de gráficos</a>. A <a href="http://raphaeljs.com/reference.html" target="_blank">documentação</a> é bem direta e completa, o que facilita muito o aprendizado, contendo a explicação dos seus métodos.</p>
<p>Veja o exemplo a seguir. Repare que o arquivo Javascript de Raphaël está no mesmo local do arquivo HTML e que não usamos nada de HTML e CSS na geração dos gráficos &#8211; apesar do SVG permitir formatação via folha de estilos.</p>
<pre>
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&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=utf-8&quot;/&gt;
    &lt;title&gt;Raphaël - Modo de usar&lt;/title&gt;
    &lt;script src=&quot;raphael.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
        window.onload = function () {
			// Cria um painel do tamanho 800x600, na posição x=50 e y=50
			var paper = Raphael(50, 50, 800, 600);

			// Círculo na posição x=50, y=40 e com 10 de raio
			var circle = paper.circle(50, 40, 10);
			// Define o preenchimento do círculo em vermelho
			circle.attr(&quot;fill&quot;, &quot;#f00&quot;);

			// Define a linha de contorno como branca
			circle.attr(&quot;stroke&quot;, &quot;#fff&quot;);

			// -------------------------

			// Criação de um retângulo
			var rectangle = paper.rect(100,50,100,100,0);

			// Definindo vários atributos de uma só vez
			rectangle.attr({
				&quot;fill&quot;: &quot;#00f&quot;,
				&quot;stroke&quot;: &quot;#0f0&quot;
			});

			// Rotacioando o objeto
			rectangle.rotate(45);

	};
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Este código irá gerar um painel SVG (<em>paper</em>), criará um círculo vermelho (<em>circle</em>) e um retângulo azul rotacionado em 45 graus (<em>rectangle</em>).</p>
<div id="attachment_1299" class="wp-caption aligncenter" style="width: 310px"><a rel="lightbox" href="http://franciscoprado.com.br/wp-content/uploads/2010/05/javascript-svg-raphael-library.jpg"><img class="size-medium wp-image-1299" title="javascript-svg-raphael-library" src="http://franciscoprado.com.br/wp-content/uploads/2010/05/javascript-svg-raphael-library-300x216.jpg" alt="Raphaël - resultado do exemplo" width="300" height="216" /></a><p class="wp-caption-text">Resultado do exemplo.</p></div>
<p style="text-align: center;">
<p>Espero ter ajudado. Até a próxima! <img src='http://franciscoprado.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://franciscoprado.com.br/2010/05/02/usando-raphael-para-geracao-de-svg-atraves-de-javascript-tutorial/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

