To tentando fazer uma animação. Ai queria fazer com que um sprit se movimentasse na tela. Mas ele não se movimenta! Tudo que esta no metodo paintComponent é printado na JPanel inclusive a primeira imagem da sprit, mas quando eu clico no telcado com a seta para esquerda assim como para a direita a sprite não se meche! Já fiz teste p ver se estes metodos estão sendo acessados e sim eles estão! Mas não sei o que se passa. Vou passar as partes do codigo que julgo o necessario:
Eis a classe que trata o evento pelo teclado, quando clicadas as setas esquerda e direita, é chamado o metodo que modifica o atributo x
[code]package Eventos;
import gui.Cenario;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import sprites.Dragao;
import sprites.Mario;
public class TrataTeclado implements KeyListener{
Mario mario;
Cenario cen;
public TrataTeclado(){
mario = new Mario();
cen = new Cenario();
}
public void keyPressed(KeyEvent e) {
descansar();
if (e.getKeyCode() == KeyEvent.VK_LEFT){
cen.movimentoEsquerda();
System.out.println("esquerda");
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT){
cen.movimentoDireita();
System.out.println("direita");
}
}
public void keyReleased(KeyEvent evt) {
}
private void addKeyListener(KeyAdapter keyAdapter) {
// TODO Auto-generated method stub
}
public void descansar() {
try {
Thread.currentThread();
Thread.sleep(40);
} catch (Exception e) {
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}[/code]
Aqui a classe q printa os objetos na tela… como tava dando pau eu deixei tudo q era p ser printado em comentario p o copilador ignorar e resolvi fazer um teste com um retangulo ao invez da sprite mas mesmo assim ele não se movimenta na tela:
[code]public class Cenario extends JComponent {
Image IMAGEMDAVEZ;
Image IMAGEMDAVEZD;
Image chao;
Image chao1;
Image chao2;
Image chao3;
Image chao4;
Image subSolo;
Image fundo1;
Image quadrinho;
Mario mario = new Mario();
Dragao dragao = new Dragao();
List < Image > dragaoEsquerda = new ArrayList<Image>();
int x2 = 800;
int x3 = 600;
public Cenario(){
esquerda1 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/sprites/blueDragon1.png");
esquerda2 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/sprites/blueKoopa2.png");
dragaoEsquerda.add(esquerda1);
dragaoEsquerda.add(esquerda2);
IMAGEMDAVEZ = mario.verificaImgDaVez();
IMAGEMDAVEZD = dragaoEsquerda.get(0);
chao = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/chao0.png");
subSolo = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/sub0.png");
chao1 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/chao1.png");
chao2 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/chao2.png");
chao3 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/chao3.png");
chao4 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/chao4.png");
fundo1 = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/fundo1.png");
quadrinho = Toolkit.getDefaultToolkit().getImage("C:/Users/Jhonatan/Desktop/JAVA_MARIO/O_Jogo/src/gui/quadrinho.png");
}
public void movimentoEsquerda(){
this.xM = xM - 5;
//repaint();
}
public void movimentoDireita(){
this.xM = xM + 5;
System.out.println("valor x "+xM);
//repaint();
}
int xM = 0 ;
public void paintComponent(Graphics g){
super.paintComponent(g);
/**Mario**/
//g.drawImage(IMAGEMDAVEZ, this.xM, 722, this);
g.drawRect(this.xM, 722, 20, 20);
super.repaint();
/**Dragao
g.drawImage(IMAGEMDAVEZD, dragao.ande(), 722, this);
/**Desenha o chão superficial**
int pos = 0;
for(int i = 0; i < 31; i++){
g.drawImage(chao,pos,786,this);
pos += 32;
}
g.drawImage(chao1,960,786,this);
pos = 754;
for(int i = 0; i < 4; i++){
g.drawImage(chao2,960,pos,this);
pos -= 32;
}
g.drawImage(chao3,960,626,this);
pos = 992;
for(int i = 0; i < 14; i++){
g.drawImage(chao,pos,626,this);
pos += 32;
}
/**Desenha o subsolo **
pos = 0;
for(int i = 0; i < 45; i++){
g.drawImage(subSolo,pos,818,this);
pos += 32;
}
pos = 658;
int posX = 992;
for(int i = 0; i < 5; i++){
for(int j = 0; j< 14 ; j++){
g.drawImage(subSolo,posX,pos,this);
posX += 32;
}
posX = 992;
pos +=32;
}
/**quadrinhos **
g.drawImage(quadrinho,1100,520,this);
g.drawImage(quadrinho,1300,470,this);
g.drawImage(quadrinho,1100,400,this);
g.drawImage(quadrinho,1300,350,this);
g.drawImage(quadrinho,1000,300,this);
super.repaint();*/
}[/code]
[b]Então, como toda vez q o evento é tratado a variavel xM é modificada. Logo o meto paintComponent teria de repinta o retangulo na região da nova coordenada x, já que ela é printada aonde vale o valor de xM.
Alguem sabe o que eu devo fazer? Grato![/b]