Estou com um problema no meu código, tenho uma classe que implementa o Keylistener e outra classe que extend Jframe e onde está a main. Dentro das funções do KeyListener eu altero algumas variáveis do tipo float de valor, porém fora das funções elas não se alteram, se eu chamar um System.out.println(x) dentro de public void KeyPressed e em outra função, a mesma variável mesmo sendo global apresenta valores diferentes. Alguém pode me ajudar, me indicar algo pra ler ?
Vc poderia mostrar como está fazendo?
public class Homem implements KeyListener{
public float x = 300;
public float y = 0;
public float fatorY = 0;
public float fatorX = 0;
public int i=0;public static final float GRAVIDADE = 0.2f;
public static final float CHAO = 450;private BufferedImage person;
public Homem () {
try { person = ImageIO.read(new File("data/icone_homem.png")); } catch (IOException e) { e.printStackTrace(); }
}
public int getXHomem() {
return (int) x;
}public int getYHomem() {
return (int) y;}
public BufferedImage getImage() {
return person;
}public void mexer() {
x += fatorX; y += fatorY;
}
public void movimentoHomem() {
if(y>=CHAO-person.getHeight()) { fatorY=0; y = CHAO-person.getHeight(); } else { fatorY+=GRAVIDADE; y+=fatorY; }
}
@Override
public void keyPressed(KeyEvent e) {System.out.println(KeyEvent.getKeyText( e.getKeyCode())); if(e.getKeyCode() == KeyEvent.VK_SPACE || e.getKeyCode() == KeyEvent.VK_UP){ if(y>=CHAO-person.getHeight()||i==1) { fatorY = -3; i++; if(i==2) { fatorY = -4; i=0; } } } if(e.getKeyCode() == KeyEvent.VK_LEFT){ fatorX = -10; } if(e.getKeyCode() == KeyEvent.VK_RIGHT){ fatorX = +10; } if(e.getKeyCode() == KeyEvent.VK_DOWN){ }
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
}
Parece ok pra mim. Se vc quiser, me mostra a classe que tem o main que eu testo pra ver o que está acontecendo.
Eu estava já desesperado depois de uns dias sem saber resolver, porém foi só criar o tópico que consegui, desculpe o incômodo, mas se esta informação puder ajudar alguém, o que eu precisei fazer foi colocar a class como extends JComponent e adicionar no construtor os métodos setFocusable(true); e addKeyListener(this); e depois chamar o componente na outra class com add(comp);. Obrigado pela atenção.