我正试图建立一个跳棋游戏,而我现在正试图实现这些游戏的移动。
为此,我决定保留一份清单:
blackPieces
whitePieces
然后当我做出一个动作时,我会:
但是,我已经陷入第3步,使用以下Groovy代码我只得到 ConcurrentModificationException
def children = board.getChildren()
for (child in children) {
if (child instanceof Circle) {
board.getChildren().remove(child)
}
}
有没有办法在不重绘整个场景的情况下做到这一点?
感谢任何帮助!
答案 0 :(得分:2)
甚至还有一种更简单的方法,这要归功于groovy的removeAll方法,这种方法需要关闭。
board.getChildren().removeAll{ it instanceof Circle }
答案 1 :(得分:1)
You shouldn't use instanceof
。你应该做的是针对一个接口进行编程,而不是针对一个实现。我的意思是让所有的黑白部分实现一个接口,也许是str = "Hello" # variable str is linked to a string value
str = 5 # now it is linked to an integer value; perfectly OK
。然后让您的GridPane由实现Piece
的类填充。在Piece
界面中,您可以使用一种方法,也许Piece
可以进行明显的检查。现在您可以使用您的解决方案,但使用isCircle()
方法。
答案 2 :(得分:0)
哇如此随机浏览Groovy备忘单和收集方法我把这个解决方案放在一起。
def pieces = board.getChildren().findAll { it instanceof Circle } // gets all the pieces
board.getChildren().removeAll(pieces) // removes them
取胜。