JavaFX 重置图形上下文

JavaFX Reset Graphics Context

我正在开发一款使用 Kotlin 和 TornadoFX/JavaFX 每 1/60 秒重绘一次的视频游戏。目前,我的程序通过将背景设置为白色并在其上绘制来重绘。但是,我更喜欢更干净的东西。这是我目前的绘制方式:

private fun drawShapes(gc: GraphicsContext) {
    gc.fill = c(255, 255, 255)
    gc.fillRect(0.0, 0.0, 700.0, 700.0) //Game is 700x700
    gc.fill = c(94, 132, 233)
    walls.forEach { gc.fillRect(it.x.toDouble(), it.y.toDouble(), it.w.toDouble(), it.h.toDouble()) }
    gc.fill = c(255, 239, 20)
    coins.filter { !it.collected }.forEach { gc.fillRect(it.x.toDouble(), it.y.toDouble(), it.w.toDouble(), it.h.toDouble()) }
    //Cut off here because following is more of same
}
fixedRateTimer(period = 16, initialDelay = 500) { drawShapes(graphicsContext2D) }

有没有什么办法可以简单地把它擦干净而不是一层一层地叠在一起?我试过在互联网上搜索它,但找不到任何东西。

事实证明,确实没有办法做到这一点。然而,消隐 canvas 并再次绘制它不会导致任何问题。这些问题是由程序的另一部分引起的。

如果您的游戏背景始终是白色,那么我会考虑在具有白色背景颜色的 canvas 后面插入一个窗格。您仍然可以像现在一样绘制前景图像,然后使用 clearRect.

清除帧之间的 canvas
gc.clearRect(0.0, 0.0, 700.0, 700.0);