Qual o método correto para se desenhar?

1 resposta
dudaskank

Olá grandes mestres do Java!

Gostaria de saber se o que estou fazendo é o correto...

Estou tentando criar algum tipo de framework para jogos... bom, ele até agora só desenha na tela... mas vamos lá. O método que estou usando é o seguinte:

Eu crio uma thread para rodar, por exemplo, 60 vezes por segundo. Cada vez que esse tempo passa, eu atualizo as posições dos objetos na tela e chamo um métooo que chamei de draw(). Este método lê o java.awt.Graphics que está fora da tela, desenha nele, e manda mostrar.

public void draw() {
	Graphics graphics;
	Iterator iterator;
	GameObject actor;

	sortGameObjects();
	graphics = displayManager.getDrawGraphics();
	iterator = objectsList.iterator();
	while (iterator.hasNext()) {
		actor = (GameObject) iterator.next();
		actor.paint(graphics);
	}
	graphics.dispose();
	displayManager.show();
}

A sim, esta classe é filha de um JPanel, e o displayManager.getDrawGraphics() e show() usam os métodos da classe BufferStrategy, do Java 1.4, para usar page flipping ou double buffer de maneira mais rápida.

Bom, então queria saber se está certo ou devo somente sobrescrever o método paint() que aí já irei obter double buffer e page flipping... esta parte é que não entendo direito...

Falou e obrigado antecipado ^__^

1 Resposta

dudaskank

Bom, já uqe ninguém respondeu, eu mesmo respondo ¬_¬

Antes, uma correção, a classe é filha de um JFrame, não de JPanel…

Quando for criar algo para ser desenhado, e não importe muito a hora em que ele for desenhado, não há problemas em se sobrescrever o método paint() da classe pai.

O problema aí é que, caso se acumulem muitos paints() para a JVM realizar, ele pode pular alguns caso não haja muito tempo para realizá-los, ocasionando um “flickering” da imagem.

Para isso não ocorrer, deve-se utilizar uma técnica chamada “active drawing” se não me engano, que consiste em quando você precisar desenhar, não chamar o método paint(), mas sim pegar você mesmo o Graphics onde deverá ser desenhado e desenhar nele, que no caso é o que está sendo feito na minha classe.

falou :slight_smile:

Criado 21 de abril de 2004
Ultima resposta 26 de abr. de 2004
Respostas 1
Participantes 1