@FXML AnchorPane gamePane;
public void gameStart() {
if (!Started) {
board = new Board();
stones = new Circle[8][8];
newTurn();
applyBoard();
Started = true;
}
else {
DestroyBoard(); // <--- Erase all the stones
board = new Board();
stones = new Circle[8][8];
newTurn();
applyBoard();
}
}
public void applyBoard() {
for(int i = 0; i < board.boardsize; i++) {
for(int j = 0; j < board.boardsize; j++) {
if (board.board[i][j] != board.EMPTY) {
if (board.board[i][j] == board.BLACK) {
stones[i][j] = new Circle(155 + 90 * j, 85 + 90 * i, 40);
stones[i][j].setFill(Color.BLACK);
gamePane.getChildren().add(stones[i][j]);
}
else if (board.board[i][j] == board.WHITE) {
stones[i][j] = new Circle(155 + 90 * j, 85 + 90 * i, 40);
stones[i][j].setFill(Color.WHITE);
gamePane.getChildren().add(stones[i][j]);
}
}
}
}
}
public void DestroyBoard() { // <---Test Function and not worked!!
gamePane.getChildren().remove(stones[3][3]);
}
Пытался сделать так, чтобы при повторном нажатии кнопки старт все камни на доске стирались и начиналась новая игра. В качестве первого шага я попытался стереть один базовый камень, но я не могу удалить ни одного камня на доске. Что мне делать, чтобы решить эту проблему?
Я почти уверен, что это работает, но поскольку вы создаете новый Board и добавляете круги на основе исходных данных в этом новом экземпляре, вы получаете доску с вдвое большим количеством кругов за вычетом того, который вы удалили. Я предполагаю, что код детерминирован, поэтому положение и внешний вид кругов остаются такими же, как и в предыдущей отображаемой версии, результат выглядит точно так же, как и раньше ...
если я сделаю gamepane.getChildren (). clear в функции applyboard (), она работает, но где угодно, кроме этого, не работает




Камни хранятся в ObservableList в контейнере gamePane, доступ к которому вы получаете с помощью метода getChildren(). В списке есть очень полезный метод clear(), который удаляет все элементы в списке.
Поэтому, если вы просто хотите удалить все камни с gamePane, просто вызовите этот метод:
gamePane.getChildren().clear();
спасибо за комментарий. если я вызываю getChildren.clear () в функции appyboard (), это сработает, но если я вызываю это в функции destryboard (), камни все еще живы! какую ошибку я сделал?
Вы снова вызываете applyBoard () сразу после DestroyBoard ()?
Что ж, если вы удаляете все камни, но сразу добавляете их снова, вы не заметите, как они удаляются.
Это верно, поэтому в качестве тестового примера я попытался удалить только камень, расположенный (3,3), и это тоже не удалось. Я могу удалять камни только в функции applyboard (), которая добавляет камни в gamepane.getChildren (). без этой функции нет доступа к камням
Возможный дубликат JavaFX - Как удалить конкретный узел из AnchorPane