Olá Pessoal bom dia , eu sou novato em java mas gosto muito de programação , eu estudando bastante como criar jogos em java (aproveitando que a matéria principal da minha etec é java) , e estou tentando fazer um pequeno game , não sei se de nave ou de plataforma mesmo ,mas será em 2d apenas para aprendizado ,depois passarei para 3d e irei tentando progredir , progressivamente. Enfim o meu jogo é assim eu estou criando um JFrame na classe main aonde irá receber os eventos do teclado com KeyListener, esse JFrame vai receber o JPanel, aonde irá pintar e adicionar todos os personagens e imagens da fase em que o jogador irá se enconrar…
Mas estou com o que eu acho que seja um problema, a entrada de teclado na tela está muito lenta, não está funcionando do jeito que eu queria , quando se pressiona por exemplo a tecla “D” o jogo demora um certo delay para o personagem começar a se mover para a direita , porquê acontece isso? como eu posso resolver isso ? Eu tinha antes tentado colocar o Keylistener na classe que extende o JPanel mas não tava detectando , alguém pode me explicar também isso ? eu tava fazendo o addKeyListener(); do mesmo jeito que eu fiz ali no JFrame… mas na outra classe JPanel não funcionava…
import com.fases.Fase01;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Principal extends JFrame{
ImageIcon iconetray=new ImageIcon(getClass().getResource("/com/rafael/resources/jogo.png"));
Fase01 fase= new Fase01();
KeyListener teclas= new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_D){
fase.setSx(fase.getSx()-2);
}
if(e.getKeyCode()==KeyEvent.VK_A){
fase.setSx(fase.getSx()-2);
}
}
@Override
public void keyReleased(KeyEvent e) {
}
};
public Principal(){
this.addKeyListener(teclas);
add(fase);
fase.requestFocus();
setSize(1024, 800);
setTitle("Estudos 2-D: Rafael");
setVisible(true);
setEnabled(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setIconImage(iconetray.getImage());
}
public static void main(String[] args){
Principal janela = new Principal();
janela.setVisible(true);
}
}