JavaFX重置图形上下文

时间:2017-12-08 01:36:47

标签: javafx kotlin tornadofx

我正在开发一款使用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) }

有没有办法简单地擦干净而不是在彼此之上分层?我试过在互联网上搜索它,但我找不到任何东西。

2 个答案:

答案 0 :(得分:0)

原来并没有办法做到这一点。然而,消隐画布并再次绘制它并没有引起任何问题。这些问题正在成为该计划的另一部分。

答案 1 :(得分:0)

如果您的游戏背景一直是白色,那么我会考虑在画布后面插入一个白色背景颜色的窗格。您仍然可以像当前一样绘制前景图像,然后使用clearRect清除帧之间的画布。

gc.clearRect(0.0, 0.0, 700.0, 700.0);