私は迷路のようなゲームに苦しんでいます。私は矢印キーを使用してGridPane内で "player"ノードを動かそうとしています。JavaFX、矢印キーでGridPane内のノードを移動
これは私のイベントハンドラです: パブリッククラスのKeyListenerはEventHandlerのarrowdownキーが押された場合に何が起こるかだけカバー{
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()); }
を実装しています。 私の問題は、ノードが最初のキー押下後に1行下に移動するが、それ以降はそれ以上は動作しないが、System.out.println( "Player goes" + event.getCode())文が印刷されるということです。
提案がありますか?
また、プレイヤーの位置は、最初のイベントの後にのみ更新されます。 –
私の推測では、あなたのハンドラは最初の位置/ノードに対してのみ登録されていると思います。古いノードのイベントハンドラを削除して新しいノードに追加する必要がありますが、確かめるためには十分なコードが存在しません。そのようなことが起こっています。 – hotzst
Mainクラスのメインシーンにハンドラを追加しました。私はGridPane自体にも追加しようとしました。 –