Desenhando

Meu codigo implementa o Tetris
tenho uma matriz bidimensional de booleanos, o metodo paintComponent verifica essa matriz e onde eh true ele desenha um quadrado amarelo e onde eh false o quadrado eh preto. Os valores dessa matriz sao mudados a todo momento, pois, a figura fica descendo.
No entanto, quando dou um repaint() percebi que ele so desenha corretamente o quadrado descendo se eu chamar um metodo que percorre a matriz imprimindo no Console o valor true ou false e imprime no console. (Nao sei ainda o que uma coisa tem a ver com a outra…)
Pelo o que eu entendi, o java precisa percorrer a matriz verificando cada valor para poder desenha corretamente… ???..
A logica do jogo esta funcionando corretamente.

public void paintComponent(Graphics a)
	{
		for (int i=0; i < grid.getAltura(); i++  ){
			for (int j=0; j< grid.getLargura(); j++){
				
				if (grid.getGrid(j, grid.getAltura() -1 -i) == true){
					a.setColor(Color.YELLOW);
					a.fillRect(j*larguraQuadrado, i*larguraQuadrado, larguraQuadrado, larguraQuadrado);
				}else{
					a.setColor(Color.BLACK);
					a.fillRect(j*larguraQuadrado, i*larguraQuadrado, larguraQuadrado, larguraQuadrado);
				}
					
				}
			}
		}
	public static void desenhagrid (GridTetris a){
		for(int i=(a.getAltura()-1);i>=0;i--){                    //"imprime" a tabela de booleanos
		for(int j=0;j<a.getLargura();j++){
			System.out.print("\t"+a.getGrid(j, i)+"|");	
		}
		System.out.println("");
	}
		System.out.println("");
}
repaint();
//desenhagrid(grid);     //NAO DESENHA O QUADRADO CORRETAMENTE SE EU NAO CHAMAR O METODO
repaint();
desenhagrid(grid);     //FUNCIONA CORRETAMENTE,  A CADA REPAINT() O QUADRADO APARECE UM PIXEL ABAIXO.

Poste o método completo que está chamado “repaint()”.

Realmente não faz sentido, vc tem uma classe chamada GridTetris, passe o que o método getGrid() faz, minha aposta é que esse método chama algum repaint() e por isso só funciona ao dar um sysout, vc pode tá mandando renderizar tudo com esse comando. No aguardo.

Bom, como passou quase 1 dia eu consegui resolver meu problema… era meu thread.sleep() em uma posicao errada no escopo dentro do for que causava isso… o thread.sleep deveria vir antes do repaint() mas isso eu ainda nao sei pq, mas funcionou…

obrigado!!

[quote=aos00]Bom, como passou quase 1 dia eu consegui resolver meu problema… era meu thread.sleep() em uma posicao errada no escopo dentro do for que causava isso… o thread.sleep deveria vir antes do repaint() mas isso eu ainda nao sei pq, mas funcionou…

obrigado!!
[/quote]
O loop básico de um jogo é: atualizar dados, renderizar e dormir.

Se o loop estava sendo executado muito rápido (sem o sleep()) ou se o repaint() estava no lugar errado é bem provável que não funcione mesmo. E, quando você usava o System.out.println(), você estava dando “uma folga” para que a Thread responsável pela renderização da janela atuasse.