0

シンプルなプラットフォーマーであるJavaでゲームを作ろうとしていますが、コードを実行するときに問題があります。キーを押しても反応がないようです。私が考えることができる唯一のことは、適切に機能していないと思うのは、keyPressed および keyReleased 関数です。以下は関連するコードです。

public ReflexPanel() {

    initBoard();

    setFocusable(true);
    addKeyListener(this);

    Timer timer = new Timer(1000/120, this);
    timer.start();
}

private void initBoard() {

    loadMenu();

    int w = menu.getWidth(this);
    int h = menu.getHeight(this);
    setPreferredSize(new Dimension(w, h));
}



private void step() {
    if(mainMenu){
        if(ePressed) {
            System.exit(0);
        }

        if(hPressed) {
            loadScores();
            repaint();
        }
    }
}

public void keyTyped(KeyEvent e) {}

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == 'e') {
        ePressed = true;
    }
    if (e.getKeyCode() == 'h') {
        hPressed = true;
    }
}

@Override
public void keyReleased(KeyEvent e) {
    if (e.getKeyCode() == 'e') {
        ePressed = false;
    }
    if (e.getKeyCode() == 'h') {
        hPressed = false;
    }
}

@Override
public void actionPerformed(ActionEvent e) {
    step();
}

ePressed 変数と hPressed 変数は、デフォルトで false に設定された単なるブール値であり、loadScores は png ファイルを呼び出します。

4

2 に答える 2

3

あなたはこれを行うことはできません:

if(e.getKeyCode() == 'e'){
    // code logic
}

KeyEvent::getKeyCodeキーボードで押した文字を返しません。「このイベントのキーに関連付けられた整数の keyCode を返します」 . 使用する場合は、クラスで定義済みのKeyEvent キー定数KeyEvent::getKeyCodeを使用する必要があります。たとえば、次のようになります。

if(e.getKeyCode() == KeyEvent.VK_E){
    // code logic
}

または、「このイベントのキーに関連付けられた文字KeyEvent::getKeyCharを返す」を使用できます。

于 2018-01-15T13:44:13.057 に答える
2

などのクラスで指定された定数で値getKeyCode()を返す whichを使用しています。intKeyEventKeyEvent.VK_E

getKeyChar()直接返す whichを使用しようとしています'e'

if (e.getKeyChar() == 'e') {  // Now it has an actual chance of working
于 2018-01-15T13:40:20.377 に答える