Я делаю Java-игру, и всякий раз, когда я ее запускаю, ни одна из клавиш не работает, пока я не нажму клавишу ввода. Вот ключевой код ввода:
if(KeyInput.currentKey(KeyInput.W)) player.setUp();
if(KeyInput.currentKey(KeyInput.A)) player.setLeft();
if(KeyInput.currentKey(KeyInput.S)) player.setDown();
if(KeyInput.currentKey(KeyInput.D)) player.setRight();
if(KeyInput.currentKey(KeyInput.UP)) player.setDirection(0);
if(KeyInput.currentKey(KeyInput.RIGHT)) player.setDirection(1);
if(KeyInput.currentKey(KeyInput.DOWN)) player.setDirection(2);
if(KeyInput.currentKey(KeyInput.LEFT)) player.setDirection(3);
if(KeyInput.currentKey(KeyInput.ENTER)) player.setPunching();
У меня есть класс с именем KeyInput
, и метод currentKey
просто проверяет, есть ли нажатая клавиша, и если есть, он проверяет, является ли клавиша в параметрах текущей. Вот этот код:
public class KeyInput {
public static final int NUM_KEYS = 11;
public static boolean keyState[] = new boolean[NUM_KEYS];
public static boolean prevKeyState[] = new boolean[NUM_KEYS];
public static int W = 0;
public static int A = 1;
public static int S = 2;
public static int D = 3;
public static int ENTER = 4;
public static int UP = 5;
public static int LEFT = 6;
public static int DOWN = 7;
public static int RIGHT = 8;
public static int ESCAPE = 9;
public static int SHIFT = 10;
public static void setKey(int i, boolean b) {
if(i == KeyEvent.VK_W) keyState[W] = b;
else if(i == KeyEvent.VK_A) keyState[A] = b;
else if(i == KeyEvent.VK_S) keyState[S] = b;
else if(i == KeyEvent.VK_D) keyState[D] = b;
else if(i == KeyEvent.VK_ENTER) keyState[ENTER] = b;
else if(i == KeyEvent.VK_UP) keyState[UP] = b;
else if(i == KeyEvent.VK_LEFT) keyState[LEFT] = b;
else if(i == KeyEvent.VK_DOWN) keyState[DOWN] = b;
else if(i == KeyEvent.VK_RIGHT) keyState[RIGHT] = b;
else if(i == KeyEvent.VK_ESCAPE) keyState[ESCAPE] = b;
else if(i == KeyEvent.VK_SHIFT) keyState[SHIFT] = b;
}
public static void update() {
for(int i = 0; i < NUM_KEYS; i++) {
prevKeyState[i] = keyState[i];
}
}
public static boolean currentKey(int i) {
return keyState[i];
}
}
Этот метод setKey
вызывается в классе Main:
public void keyTyped(KeyEvent key) {}
public void keyPressed(KeyEvent key) {
KeyInput.setKey(key.getKeyCode(), true);
}
public void keyReleased(KeyEvent key) {
KeyInput.setKey(key.getKeyCode(), false);
}
Я не знаю, почему это происходит, и я не знаю, сможете ли вы, ребята, помочь, не зная всего о том, как моя игра была запрограммирована. Заранее спасибо! :)