я пытаюсь использовать метод isKeyPressed, и он просто не работает, есть ли конкретное место, где я должен нажать клавишу? - PullRequest
0 голосов
/ 30 января 2019

Я хочу сделать игру, когда круг перепрыгивает через препятствия, но я не могу заставить ее прыгать

Я перепробовал все клавиши на клавиатуре

import java.awt.event.KeyEvent;

public class Game {

    public static void main(String[] args) {
        StdDraw.setCanvasSize();
        circle player = new circle(0, 0.05 , 0.05) ;
        StdDraw.line(0, 0, 1, 0);       

        if(StdDraw.isKeyPressed(KeyEvent.VK_UP)){
            System.out.println("hello");
            double height = player.height;
            while(height <= 0.2)
            height = height + 0.05;

            StdDraw.setCanvasSize();
            StdDraw.line(0, 0, 1, 0);       
            StdDraw.filledCircle(0, height, 0.05);
            StdDraw.show(100);
        }
    }
}

Я вставилФункция печати для проверки, если он входит в «если» и не

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Я пытаюсь использовать метод isKeyPressed, и он просто не работает, есть ли конкретное место, где я должен нажать клавишу?

Скорее всего, вам нужно нажать клавишу, пока программаОкно GUI имеет фокус, но не обязательно, когда указатель мыши находится в каком-либо конкретном месте.Но самая большая проблема - время .Ваша программа проверяет, нажата ли в данный момент клавиша, когда элемент управления достигает оператора if.Это должно произойти очень быстро после того, как он впервые отобразит что-то, очень вероятно, что вы слишком быстро наберете текст, поэтому ваша программа пролетит мимо этого, прежде чем вы сможете что-либо сделать.Кроме того, поскольку он (очень вероятно) реагирует только на нажатие клавиш, когда окно программы находится в фокусе, вы даже не должны ожидать, что вы сможете превентивно нажать клавишу и программа распознает ее.

Я неуверен, какой будет идиома StdDraw для такого рода вещей, если даже есть один.Я полагаю, вы хотите создать цикл, который многократно проверяет ввод и обновляет отображение.Обычно такая вещь естественным образом запускается в потоке отправки событий в графическом интерфейсе, но StdDraw, кажется, разработан, чтобы оградить вас от этого.

0 голосов
/ 30 января 2019

Вы не слушаете KeyEvents правильно.Старый способ заключался в использовании KeyListener, а новый - в использовании привязок клавиш, но для меня, когда я кодировал Java, я обнаружил, что при написании элементов управления клавиатурой для игр ответом было использование подкласса KeyEventDispatcher, как я это сделал здесь

...