<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "threads"]]></title>
		<link>http://www.guj.com.br/posts/list/13.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "threads"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>threads</title>
				<description><![CDATA[ segue em anexo o codigo da pequena animacao....para ficar mais facil de resolver o meu problema.<br /> <br /> <br /> Eu queria saber como fazer para que o meu fundo de tela pare de piscar!!!<br /> o meu professor sugeriu que eu usasse o paintcomponents, mais nao consegui...que q vcs me mostrem como usa-lo.<br /> <br /> Ficarei grata se alguem puder me ajudar!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/57956/304702.java</guid>
				<link>http://www.guj.com.br/posts/preList/57956/304702.java</link>
				<pubDate><![CDATA[Tue, 24 Apr 2007 10:27:55]]> GMT</pubDate>
				<author><![CDATA[ Gleice Gomes]]></author>
			</item>
			<item>
				<title>Re:threads</title>
				<description><![CDATA[ Em primeiro lugar, não duplique tópicos. Você poderia ter dado continuidade ao assunto no seu post original:<br /> http://www.guj.com.br/posts/list/57701.java<br /> E nem sequer ter criado esse segundo post:<br /> http://www.guj.com.br/posts/list/57585.java<br /> <br /> E nem esse terceiro, que estou respondendo agora...<br /> <br /> Bem, tenho uma série de sugestões a fazer... Na verdade, tem bastante coisa para melhorar no seu algoritmo. Se você quer partir diretamente para a solução do seu problema, leia o meu próximo post. Mas tire um tempo para ler esse, depois.<br /> <br /> 1. O método pintar() deve ser chamado antes do método contaTempo(). Caso contrario, a tela pode piscar no primeiro quadro (você terá contado o tempo, antes de exibir qualquer imagem);<br /> <br /> 2.Existe uma regra no swing de que o objeto graphics não deve ser alterado. Para corrigir isso, sempre que utilizar um método do swing (paint, paintComponent, paintComponents, paintChildren ou paintBorder), faça o seguinte:<br /> <br /> [code]public void paint(Graphics g)<br /> {<br />    Graphics tela = g.create();<br />    //Aqui vai o seu código normal<br />    tela.dispose();<br /> }[/code]<br /> <br /> No geral, essa é uma boa prática. Você garante que um método de pintura não irá interferir no outro. <br /> <br /> 3. O segredo para uma boa aplicação de animações está naquele loop, que você chamou de inicioAnimacao. <br /> <br /> Quem deve controlar o seu próprio x, y e z são as classes que serão pintadas na tela, ou classes específicas para objetos da animação. <br /> <br /> Geralmente, vão ser criadas classes com dois métodos, que serão chamados por seu animation loop:<br /> <br /> processLogics(); (Ajusta o x, y e z do objeto animado)<br /> renderGraphics(); (Pinta o objeto)<br /> <br /> O animation loop (ou MainLoop), fica com a árdua tarefa de manter a taxa de processamento da lógica constante (independente da velocidade do hardware), enquanto mantém ao máximo possível a atualização dos gráficos (em chamadas ao paint()). Geralmente "o máximo possível" é a taxa de atualização do monitor, ou seja, em torno de 75 quadros em um segundo: mais do que isso é desperdício de processamento.<br /> <br /> Esse tipo de abordagem é válido tanto para uma animação estática quanto para jogos de computador. Quanto à isso, fiz [url=http://vinigodoy.wordpress.com/2007/03/31/controlando-a-velocidade-de-seu-jogo/]esse post no meu blog[/url] que explica como funciona um bom animation loop.<br /> <br /> Existe uma ótima teoria sobre o animation loop, imagens e animação no site do livro [url=http://fivedots.coe.psu.ac.th/~ad/jg/]Killer Game Programming in Java[/url].]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/57956/304723.java</guid>
				<link>http://www.guj.com.br/posts/preList/57956/304723.java</link>
				<pubDate><![CDATA[Tue, 24 Apr 2007 11:39:47]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
			<item>
				<title>Corrigindo o problema do flickering</title>
				<description><![CDATA[ Agora que as sugestões foram dadas, vamos ao seu problema específico, o flickering.<br /> <br /> Flickering é o fato da tela "piscar". Por que isso ocorre? Isso ocorre porque a imagem é exibida enquanto é desenhada. Como parte dela está pronta e parte não está, você tem a impressão da tela estar piscando. Isso acontece muito rapidamente.<br /> <br /> As técnicas utilizadas para eliminar isso são chamadas [i]Double Buffering[/i] e [i]Page Flipping[/i]. Como isso funciona? Basicamente você trabalhará com duas imagens, uma que está em memória e outra que está desenhada na tela. Você faz os desenhos na imagem que não está sendo exibida e depois "troca" ela com a que está sendo exibida. O fato de ter duas imagens é o tal Double Buffering e troca-la de maneira imediata é o [i]page flipping[/i].<br /> <br /> [img]http://java.sun.com/docs/books/tutorial/figures/extra/fullscreen/pageFlipping.gif[/img]<br /> <br /> Como implementamos isso? O Java possui a classe BufferStrategy para te auxiliar a usar double buffering. Os componentes do swing também tem suporte direto a esse recurso. Faremos o seguinte:<br /> <br /> 1. Primeiramente, na última linha do construtor da janela, vamos indicar para ela que queremos [i]double buffering[/i]. Na última linha do seu construtor faça:<br /> [code]public Janela() {<br />    //Código de inicialização<br />    createBufferStrategy(2); //Queremos double buffering<br /> }[/code]<br /> <br /> 2. Depois, vamos alterar o método paint. Primeiramente, não usaremos o método paint do java diretamente. Deixemos que ele gerencie a pintura para nós. Altere o nome do método paint para pintar. Pintar não precisa receber nenhum parâmetro (nem mesmo o objeto graphics).<br /> <br /> Na primeira linha do método pintar, pedimos a nossa BufferStrategy para retornar o objeto graphics da imagem em memória. Na última, pedimos para que esse objeto seja exibido:<br /> [code]private void pintar() {<br />   //Pedimos a imagem em memória<br />   Graphics tela = getBufferStrategy().getDrawGraphics().create();<br />   //Aqui vai o código que estava no seu paint original<br />   tela.dispose(); //Liberamos a memória do objeto Graphics<br />   getBufferStrategy().show(); //Fazemos o page flipping, exibindo a tela recém desenhada.<br /> }[/code]<br /> <br /> Agora, só falta corrigir o método inicioAnimacao() para chamar pintar() ao invés de repaint(). <br /> <br /> Pronto! O flickering foi embora!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/57956/304745.java</guid>
				<link>http://www.guj.com.br/posts/preList/57956/304745.java</link>
				<pubDate><![CDATA[Tue, 24 Apr 2007 12:25:28]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
	</channel>
</rss>