JavaFX .setOnKeyPressed()在开始游戏后只能运行一次

时间:2017-11-08 04:03:14

标签: java javafx

我必须为我的课程编写一个简单的游戏,但我在移动我的'角色'时遇到了问题。它工作得很好,但只是我第一次按下其中一个箭头键。之后它不再响应了。请告诉我每次按键时如何使其工作。谢谢!

public void startGame()
{
    gRow = 1;
    gCol = 1;
    setUpLabels();

    gp.setOnKeyPressed(new EventHandler<KeyEvent>() 
    {
        @Override
        public void handle(KeyEvent keyEvent) {
            switch(keyEvent.getCode()){
            case DOWN:
            {
                labels[gRow + 1][gCol].getStyleClass().add("guard");
                labels[gRow + 1][gCol].setText("G");
                gRow++;
            }
            break;

            case UP:
            {
                labels[gRow - 1][gCol].getStyleClass().add("guard");
                labels[gRow - 1][gCol].setText("G");
                gRow--;
            }
            break;
            case RIGHT:
            {
                labels[gRow][gCol+1].getStyleClass().add("guard");
                labels[gRow][gCol+1].setText("G");
                gCol++;
            }
            break;
            case LEFT: 
            {
                labels[gRow][gCol-1].getStyleClass().add("guard");
                labels[gRow][gCol-1].setText("G");
                gCol--;
            }
            break;
            }
        }

    });
    gp.requestFocus();

这是我在GUI类中的startGame()方法,其中放置了setOnKeyPressed()方法。

1 个答案:

答案 0 :(得分:0)

什么是gp?你只为你的听众添加&#39; gp&#39;零件。也许这个组件在一些动作后失去了焦点。您可以将自己的KeyEventDispatcher添加到KeyboardFocusManager,如:https://stackoverflow.com/a/1379517/6405072