2016-11-10 4 views
0

La question que j'ai est de savoir comment surmonter un problème de clavier. Quand j'appuie sur certaines touches comme 'haut' et 'bas', la touche de méthode continue d'activer, mais quand j'appuie sur les touches 'w' ou 's', la méthode ne s'active qu'une fois jusqu'à ce que je la relâche. Je voudrais savoir comment simuler des pressions de touches répétées.Java: sur l'entrée du clavier mac ne tirant qu'une fois

ici est la classe pour l'entrée:

public class Input extends KeyAdapter{ 

    private GameObject p1; 
    private GameObject p2; 

    public Input(Handler handler){ 
     p1 = handler.object.get(0); 
     p2 = handler.object.get(1); 
    } 

    public void keyPressed(KeyEvent e){ 

     System.out.println("thismethodactivated"); 

     int key = e.getKeyCode(); 
     if(key == KeyEvent.VK_W) p1.setVelY(-5); 
     if(key == KeyEvent.VK_S) p1.setVelY(5); 
     if(key == KeyEvent.VK_D) p1.activate(1); 

     if(key == KeyEvent.VK_UP) p2.setVelY(-5); 
     if(key == KeyEvent.VK_DOWN) p2.setVelY(5); 
     if(key == KeyEvent.VK_LEFT) p2.activate(1); 
    } 

    public void keyReleased(KeyEvent e){ 
     int key = e.getKeyCode(); 
     if(key == KeyEvent.VK_W) p1.setVelY(0); 
     if(key == KeyEvent.VK_S) p1.setVelY(0); 

     if(key == KeyEvent.VK_UP) p2.setVelY(0); 
     if(key == KeyEvent.VK_DOWN) p2.setVelY(0); 
    } 
} 

Répondre

0

Supposons que vous regardiez pour les événements de presse clés, et les événements clés libération. L'événement de pression de touche démarre une minuterie qui déclenche toute action dont vous avez besoin sur un intervalle défini. L'événement de libération de clé pourrait alors arrêter le temporisateur.

Si certains boutons ont une répétition automatique des événements de presse/libération lorsque l'utilisateur détient le bouton, vous aurez besoin de quelque chose de légèrement plus compliqué. Mais cela semble au-delà de la portée de la question. Faites-moi savoir dans les commentaires si vous avez besoin de gérer cette situation.

+0

Merci pour l'aide, mais j'ai trouvé un moyen de faire la même chose dans une autre classe –