Переключить открытый инвентарь, тот же ключ, ключевой список Java
Я изо всех сил пытаюсь обернуть голову вокруг этой проблемы. У меня есть класс клавиатуры для моего keylistener, и я использую keyPressed, чтобы проверить, нажата ли клавиша (которая постоянно обновляется в моем методе обновления, таким образом возвращая true много раз (60fps)). Я хочу создать переключатель инвентаря, в котором я могу нажать e, открыть инвентарь (переключатель), а затем отпустить e и снова нажать e, чтобы закрыть его.
Класс клавиатуры (расширяет keylsitener):
private boolean[] keys = new boolean[104];
public boolean up, down, left, right, esc;
public boolean e;
public void update() {
up = keys[KeyEvent.VK_UP] || keys[KeyEvent.VK_W];
down = keys[KeyEvent.VK_DOWN] || keys[KeyEvent.VK_S];
left = keys[KeyEvent.VK_LEFT] || keys[KeyEvent.VK_A];
right = keys[KeyEvent.VK_RIGHT] || keys[KeyEvent.VK_D];
e = keys[KeyEvent.VK_E];
esc = keys[KeyEvent.VK_ESCAPE];
}
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
}
public void keyTyped(KeyEvent e) {
}
public boolean isKeyPressed(int key) {
return keys[key];
}
класс инвентаризации: в основном только с использованием логического значения isOpen, для которого на данный момент установлено значение false
класс игрока:
private Keyboard input;
private Sprite sprite;
private int animate = 0;
public Inventory inventory;
public Player(Keyboard input) {
this.input = input;
sprite = Sprite.player_Down;
invSprite = Sprite.playerInventory;
}
public Player(int x, int y, Keyboard input, Inventory inventory) {
this.x = x;
this.y = y;
this.input = input;
this.inventory = inventory;
sprite = Sprite.player_Down;
invSprite = Sprite.playerInventory;
inventory.isOpen = false;
}
public void update() {
int xa = 0; int ya = 0;
if (animate < 10000) animate++;
else animate = 0;
if(input.up) ya--;
if(input.down) ya++;
if(input.left) xa--;
if(input.right) xa++;
if(input.e) inventory.isOpen = true;
//render.inventory() when true, but render off screen when hit
//again?
if (xa != 0 || ya != 0) {
move(xa, ya);
moving = true;
}
else moving = false;