2015-08-02 1 views
0

J'essaie de créer un jeu en utilisant le framework libgdx. J'utilise un InputAdapter pour vérifier les événements de touche, tout fonctionne correctement jusqu'à ce que plus de 3 touches soient pressées en même temps. J'ai besoin de 3 ou plus de 3 événements clés si le lecteur bouge en diagonale et tire en même temps. Pour une raison quelconque, l'adaptateur d'entrée enregistre uniquement les 2 premiers événements de touche et aucun nouvel événement de presse n'est enregistré tant que l'une des touches n'est pas enfoncée.Gestion de plusieurs événements clés libgdx

public class MyInputProcessor extends InputAdapter{ 

public boolean keyDown(int k) 
{ 
    switch (k) 
    { 


     case Keys.LEFT: 
     MyInput.setKey(MyInput.LEFT, true); 
     break; 

     case Keys.UP: 
      MyInput.setKey(MyInput.UP, true); 

      break; 
     case Keys.DOWN: 
      MyInput.setKey(MyInput.DOWN, true); 

      break; 
     case Keys.RIGHT: 
      MyInput.setKey(MyInput.RIGHT, true); 

      break; 
     case Keys.Z: 
      MyInput.setKey(MyInput.SHOOT, true); 

      break; 
     case Keys.ESCAPE: 
      MyInput.setKey(MyInput.ESC, true); 

      break; 
    } 

    return true; 
} 
public boolean keyUp(int k) 
{ 
    switch (k) 
    { 


     case Keys.LEFT: 
     MyInput.setKey(MyInput.LEFT, false); 
     break; 

     case Keys.UP: 
      MyInput.setKey(MyInput.UP, false); 
      break; 
     case Keys.DOWN: 
      MyInput.setKey(MyInput.DOWN, false); 
      break; 
     case Keys.RIGHT: 
      MyInput.setKey(MyInput.RIGHT, false); 
      break; 
     case Keys.Z: 
      MyInput.setKey(MyInput.SHOOT, false); 
      break; 
     case Keys.ESCAPE: 
      MyInput.setKey(MyInput.ESC, false); 
      break; 
    } 

    return true; 
} 

}

+1

Ce n'est probablement pas un problème de libgdx, mais un problème avec votre clavier. La plupart des claviers ne reconnaissent pas les combinaisons de touches comportant plus de trois touches ou uniquement certaines touches. – noone

+0

qui semble être la raison! Merci! :) – user2718964

+0

quiconque rencontre le même problème, essayez un ensemble de clés différent. J'ai eu un problème en utilisant 'Z' avec les touches fléchées, mais 'X' fonctionne bien! J'espère que cela t'aides. – user2718964

Répondre

0

Quand je traite avec l'entrée dans libGDX, je crée habituellement ma propre classe avec des références statiques à un tableau de booléens pour chaque touche, puis vérifier dans mon GameCODE si un bouton est pressé.

est un exemple:

public class InputHandler { 

    public static final int NUM_KEYBOARD_KEYS = 155; // Input.Keys in libGDX has 155 keys. 

    public static boolean[] keys; 
    public static boolean[] pkeys; 
    static { 
     keys = new boolean[NUM_KEYBOARD_KEYS]; 
     pkeys = new boolean[NUM_KEYBOARD_KEYS]; 
    } 

    public static void setKey(int i, boolean b) { keys[i] = b; } 
    public static boolean isDown(int i) { return keys[i]; } 
    public static boolean isPressed(int i) { return keys[i] && !pkeys[i]; } 

    public static void update() { 
     for(int i = 0; i < NUM_KEYBOARD_KEYS; i++) 
      pkeys[i] = keys[i]; 
    } 

} 

De cette façon, je peux simplement appeler InputHandler.isPressed(Keys.Key) ou InputHandler.isDown(Keys.key) partout dans mon code.

Pour définir les valeurs dans InputHandler, j'utilise une autre classe qui étend InputAdapter.

public class Keyboard extends InputAdapter { 

    public boolean keyDown(int k) { 
     InputHandler.setKey(k, true); 
     return true; 
    } 

    public boolean keyUp(int k) { 
     InputHandler.setKey(k, false); 
     return true; 
    } 

} 

Pour enregistrer la classe de clavier comme inputhandler vous pouvez simplement faire Gdx.input.setInputProcessor(new Keyboard()); ou si vous avez besoin de plusieurs InputProcessors (par exemple pour une étape), vous pouvez utiliser un InputMultiplexer.

InputMultiplexer input; 

public void func() { 
    input.add(new Keyboard()); 
    input.add(someOtherInputProcessor()); 
} 

Je suis sûr qu'il ya d'autres façons de mettre en œuvre inputhandling dans votre projet libGDX, mais c'est la façon dont je le fais.

+0

C'est exactement comme ça que je le fais, mais le problème semble être mon clavier! Merci ! :) – user2718964