Jogo com java e lag nos eventos do teclado

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);
        
    }
}

up.

Pessoal dêem alguma dica aí porfavor. Existe alguma api para java que concerte isso ? Porquê eu vejo por exemplo , jogos como o Minecraft que são feitos em java ele não tem esses delay de entrada de mouse quando se seguda a tecla do teclado por mais de 1 segundo. Alguma dica porfavor ? Eu deveria estudar outra linguagem como C++(SDL ou Allegro?) ou C#(xna) ??

[quote=OldFriend] Olá Eu Estou tentando fazer um pequeno jogo para estudos será em 2d, apenas para aprendizado. 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 encontrar.
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 de um segundo ou mais para o personagem começar a se mover para a direita há um jeito de resolver isso ? ?

[code]

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");
    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);
    
}

}
[/code][/quote]

Será que ninguém vai responder mesmo ?
Então o administrador deste “fórum” poderia pelo menos excluri o tópico já que nem mesmo o usuário que criou tem permissão? …