Ajuda com jogo

Eu estou fazendo um jogo em que um personagem atira no outro (não atira diretamente, atira pra cima e depois o tiro desce, parecido com worms), mas estou com um problema, o tiro não é desenhado na tela. Se alguem puder me ajudar, aí vai o código: (o código completo está anexado)

//CALCULAR A TRAJETORIA
public void atirar() {
		System.out.println("Atirou");
		xTiro = x;
		yTiro = y;
		int cont = anguloTiro;
		while(cont > 0 && dentroDaTela(xTiro, yTiro)){
			cont--;
			xTiro+=2;
			yTiro-=2;
			
			System.out.println("X = " + xTiro + " Y = " + yTiro);
			
			try {
				Thread.sleep(5);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		while(dentroDaTela(xTiro, yTiro)){
			
			xTiro+=2;
			yTiro+=2;
			
			try {
				Thread.sleep(5);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		xTiro = 800; //Deixa fora da tela
		yTiro = 600; //Deixa fora da tela
	}

[code]
//Desenha os graficos
protected void paintComponent(Graphics g) {
g.drawImage(background, 0, 0, this);
desenhaPersonagens(g);
desenhaTiro(g);
}

private void desenhaTiro(Graphics g) {
		//System.out.println("XTiro = "+ xTiro+" YTiro = " + yTiro);
		g.setColor(Color.BLACK);
		Personagem personagem = personagens.get(cont);
		g.fillOval(personagem.getXTiro(), personagem.getYTiro(), TAM_TIRO, TAM_TIRO);
		System.out.println(personagem.getXTiro()+ " " + personagem.getYTiro());
}[/code]

[code]
//Thread para pintar a tela
import javax.swing.JPanel;

public class PintorDeTela implements Runnable{
JPanel tela;
int tempoDormindo = 50;

@Override
public void run(){
	try {
		this.pintar();
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}
public PintorDeTela(TelaDeJogo tela){
	super();
	setTela(tela);
}
public void setTela(TelaDeJogo t) {
	tela = t;
}
public JPanel getTela() {
	return tela;
}
public void setTempoDormindo(int tempo){
	if(tempo > 0){
		tempoDormindo = tempo;
	}
}
public void pintar() throws InterruptedException {
	while(true){
		tela.repaint();
		Thread.sleep(tempoDormindo);
	}
}

}[/code]

Obrigado;