OK, já que você é novo, comece certo a se organizar.
paint é um método de desenho, coloque nele apenas o que deve ser desenhado e não o carregamento de variáveis.
Teu código carrega as imagens durante o processo de desenho e isso já causa um problema sério pois você carrega as num loop que vai fazer isso acontecer toda vez que a tela for repintada:
public void paint(Graphics g) {
sp1 = getImage(getCodeBase(), "ss2.gif");
g.drawImage(sp1, x_pos, y_pos, this);
g.setColor(Color.yellow);
g.drawString(String.format("secs: %d ", secs), 30, 30);
sp2 = new Image[100];
for (int i = 0; i < 100; i++) {
if (secs == 5 * i) {
sp2[i] = getImage(getCodeBase(), "ss2.gif");
g.drawImage(sp2[i], (i * 10), e_pos * 10 * 1, this);
}
}
}
então vamos mudar um pouco. Primeiro separando num método o que é carregamento de imagens:
private Image sp1;
private Image sp2[] = new Image[100];
public void carregarImagens() {
sp1 = getImage(getCodeBase(), "ss2.gif");
for (int i = 0; i < 100; i++) {
sp2[i] = getImage(getCodeBase(), "ss2.gif");
}
}
Pronto, agora tua classe rodada terá uma Imagem simples e mais um array de 100 imagens.
Se bem que essa tua carga dentro do for é meio estranha, até por que ela carrega o mesmo gif
do sp1, e ainda por cima carrega ele em 100 posições de array. Bem, mas isso você tem que
resolver. Se o array terá cem imagens diferentes, terá de esquecer o loop e carregar cada
uma dela individualmente ou usando uma lista.
Agora sim podemos refazer o teu paint apenas com aquilo que será desenhado:
But…
Temos um porem, paint se repete toda vez que a tela for repintada. Então quer dizer que
se você troca a imagem ele será re-executado e isso faz com que teu redezenho aconteça
novamente e por isso que a imagem de sp1 vai aparecer de novo e de novo, por que o
código inteiro do método vai para a pilha e será re-executado todo. Não só o loop for.
Então é preciso escolher a imagem em outro lugar e não dentro do método pain.
Então sugiro, por exemplo um método rodarImagens(), assim:
private Image imagemEscolhida;
public void rodarImagens(){
imagemEscolhida = sp1;
repaint();
//Aqui tem que ir o código para esperar os 5 segundos.
for (int i = 0; i < 100; i++) {
imagemEscolhida = sp2[i];
repaint();
//Aqui tem que ir o código para esperar os 5 segundos.
}
}
e por último o novo paint que só terá de fato, o redesenho da imagem
public void paint(Graphics g) {
g.drawImage(imagemEscolhida, x_pos, y_pos, this);
//Se precisar desenhar um texto aqui, também terá de colocá-lo em variável, fora daqui e aqui só fazer o desenho.
}
Nada é muito simples em programação, em qualquer linguagem.
Tudo tem seu lugar, não dá para simplesmente misturar um código no outro e querer
que tudo aconteça diretamente.
abs, boa sorte .