Limpar Graphics mantendo trasparencia

5 respostas
geovanni

E ai pessoal!

Achei essa solução:

g2D.setComposite( AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); Rectangle2D.Double rect = new Rectangle2D.Double(0,0,width,height); g2D.fill(rect);

Mas pelo que percebi tudo que vem depois começa a ser pintado com AlphaComposite , assim tudo é pintado trasparente. D=

Alguém sabe outra solução , ou um jeito de arrumar isso!?

5 Respostas

ViniGodoy

Faça uma cópia do contexto gráfico, faça a limpeza, e descarte a cópia:

Graphics2D temp = (Graphics2D) g2D.create(); temp.setComposite( AlphaComposite.getInstance(AlphaComposite.CLEAR, 0.0f)); Rectangle2D.Double rect = new Rectangle2D.Double(0,0,width,height); temp.fill(rect); temp.dispose();

Outra possibilidade é armazenar o Composite do seu Graphics2D antes de altera-lo para o AlphaComposite, assim vc pode restaura-lo depois de desenhar o retângulo.

geovanni

Funcionou Perfeitinho!

Valeu!

Tava ficando loco com isso, já tinha procurado em tudo quanto era lado e não achava. D=

Estou montando um jogo , e desenhando todas as camadas em BufferedImage antes de pintar na tela.

Inclusive estou usando seu GameLoop Vini. =D

Muito Obrigado!

ViniGodoy

Pra que desenhar em BufferedImage antes de pintar na tela?

Eu não usaria Java para fazer um jogo hoje em dia. A tecnologia é muito ruim para games, não há investimento ou interesse da Oracle.
Não há boas classes para muitas coisas… música, joysticks, etc…

Sem falar que é super pouco portável.

Se fosse usar uma linguagem similar para fazer o jogo, usaria XNA.

geovanni

Hm…

Esse jogo é um trabalho de curso mesmo,tem que ser em java.

Mas como pretendo continuar esse jogo , estou pensando em usar XNA.

Dei uma mexida e tal,e achei bom de trabalhar.

Que dica tu deixaria para a pintura por camadas!?

ViniGodoy

Ah, entendi o que vc quer fazer. Pode usar as imagens mesmo.

Criado 20 de novembro de 2011
Ultima resposta 20 de nov. de 2011
Respostas 5
Participantes 2