Projeto atualizado aqui:
http://www.mediafire.com/download.php?80g6u4xkg3pbbt4
Agora eu descobri mais ou menos o que está travando a aplicação, é na hora de criar inimigos:
[code]package nave;
… imports
public class PainelJogo extends JPanel implements Runnable {
… outros atributos
ArrayList<Inimigo> arrayInimigos = new ArrayList<Inimigo>();
private int qtdIni = 1;
… outros atributos e métodos
public void startGame() {
jogador.definePosicaoInicial();
jogador.setVida(5);
jogador.setTempoInvensivel(3000);
Random ra = new Random(System.currentTimeMillis());
for (int i = 0 ; i < qtdIni; i++) {
Inimigo inimigoI = new Inimigo();
arrayInimigos.add(inimigoI);
arrayInimigos.get(i).setX(ra.nextInt(TELA_LARGURA));
arrayInimigos.get(i).setY(- ra.nextInt(2000));
arrayInimigos.get(i).setVelocidadeX(0);
arrayInimigos.get(i).setVelocidadeY(ra.nextInt(20)+5);
}
}[/code]
Como se pode perceber, a variável qtdIni diz quantos inimigos vão ser criados, eu coloquei 1 ai, porque é isso que está travando. Com 1 inimigo, o jogo funciona, mas já é meio lento pra carregar. Colocando 2 inimigos, já passa a demorar pelo menos uns 15seg pra passar pra tela do jogo, colocando mais inimigos, a demora aumenta exponencialmente. Por isso que estava travando, porque eu estava colocando 75 inimigos.
Então eu percebi que o que está travando é na parte de instanciar objetos. Com a classe tiro ocorre a mesma coisa, toda vez que se aperta espaço, ele cria um objeto Tiro e adiciona ao array de tiros. Quando eu aperto espaço no jogo, demora uns 5 segundos pra dar o tiro, nesse meio tempo a nave fica até travada.
Quando um objeto Tiro ou Inimigo é instanciado, a única coisa que acontece é ele chamar o construtor dele, que tem um super(), passando a imagem e um this.setLargura, o problema tem que estar proai Talvez na imagem.
Fiz mais alguns testes. Tentei criar imagens png e jpg, de 10x10 e de 100x100, e fazer o construtor das classes carregarem essas imagens ao invés das imagens que estavam lá. Nada mudou, continua travando do mesmo jeito, independente do tamanho ou formato da imagem.
Também mexi no construtor da classe Sprite, fiz isso:
[code]public Sprite(String nomeDoArquivo) {
/*x = 0;
y = 0;
try {
imagem = ImageIO.read(getClass().getResource(nomeDoArquivo));
this.altura = imagem.getHeight();
this.largura = imagem.getWidth();
} catch (IOException ex) {
ex.printStackTrace();
}*/
System.out.println("Sprite criada.");
}[/code]
Ou seja, comentei tudo e só mandei escrever “sprite criada” na tela toda vez. O resultado disso é que agora, apesar de ainda um pouco travado, eu consigo criar 75 instancias de Inimigo sem travar por completo o meu programa. Ou seja, o problema tem que ser algo relacionado a uma dessas linhas comentadas.