Переключить открытый инвентарь, тот же ключ, ключевой список Java - PullRequest
0 голосов
/ 25 февраля 2019

Я изо всех сил пытаюсь обернуть голову вокруг этой проблемы.У меня есть класс клавиатуры для моего 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;
...