JavaFX,使用箭头键移动GridPane中的节点

时间:2016-03-30 19:14:40

标签: java javafx nodes eventhandler gridpane

我正在与迷宫般的游戏挣扎。我试图使用箭头键在GridPane中移动“播放器” - 节点。

这是我的事件处理程序:     公共类KeyListener实现了EventHandler {

public KeyListener(Player player, int prevX, int prevY, GridPane mapGrid) {
    this.player = player;
    this.prevX = prevX;
    this.prevY = prevY;
    this.mapGrid = mapGrid;
}

// Method for finding rectangle in gridpane:
private Node getNode(GridPane gridPane, int col, int row) {
    for (Node node : gridPane.getChildren()) {
        if (GridPane.getColumnIndex(node) == col && GridPane.getRowIndex(node) == row) {
            return node;
        }
    }
    return null;
}

@Override
public void handle(KeyEvent event) {
    try {
        System.out.println("Player goes " + event.getCode());
        if (event.getCode() == KeyCode.DOWN) {
            this.player.setPosX(prevX);
            this.player.setPosY(prevY + 1);
            Node targetNode = getNode(mapGrid, prevX, prevY+1);
            System.out.println(targetNode.toString());
            System.out.println(this.player.getPosX() + " " + this.player.getPosY());
            mapGrid.add(this.player.playerLook(), player.getPosX(), player.getPosY()); }

仅覆盖按下箭头键时发生的情况。 我的问题是节点在第一次按键后向下移动一行,但之后它不再起作用,但是打印了System.out.println(“Player goes”+ event.getCode())句子。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

虽然我没有提供足够的信息,但我会做出一些假设。

你应该改变prevXprevY。如果您有prevY的setter方法,

this.player.setPrevY(this.player.getPrevY() + 1);

如评论中所述,在第一次迭代时,prevY == posY

然后,它将posY变为prevY + 1。因此posY = prevY + 1。角色移动。

在第二次迭代中,posY = prevY + 1。因此,即使您设置this.player.setPosY(prevY + 1),它也会保留在同一位置。