JavaFX,使用箭头键在 GridPane 中移动节点
JavaFX, moving nodes in a GridPane with arrow keys
我在迷宫般的游戏中苦苦挣扎。我正在尝试使用箭头键在 GridPane 中移动 "player" 节点。
这是我的事件处理程序:
public class 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()) 句子.
有什么建议吗?
虽然我没有提供足够的信息,但我会做一些假设。
你应该改变 prevX
和 prevY
。如果您有 setter 方法用于 prevY
,
this.player.setPrevY(this.player.getPrevY() + 1);
如评论中所述,在第一次迭代中,prevY == posY
。
然后,它将 posY
变异为 prevY + 1
。因此posY = prevY + 1
。角色移动。
在第二次迭代中,posY = prevY + 1
。因此,即使您设置 this.player.setPosY(prevY + 1)
,它仍保持在同一位置。
我在迷宫般的游戏中苦苦挣扎。我正在尝试使用箭头键在 GridPane 中移动 "player" 节点。
这是我的事件处理程序: public class 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()) 句子.
有什么建议吗?
虽然我没有提供足够的信息,但我会做一些假设。
你应该改变 prevX
和 prevY
。如果您有 setter 方法用于 prevY
,
this.player.setPrevY(this.player.getPrevY() + 1);
如评论中所述,在第一次迭代中,prevY == posY
。
然后,它将 posY
变异为 prevY + 1
。因此posY = prevY + 1
。角色移动。
在第二次迭代中,posY = prevY + 1
。因此,即使您设置 this.player.setPosY(prevY + 1)
,它仍保持在同一位置。