【发布时间】:2019-12-14 05:37:47
【问题描述】:
我正在尝试编写代码以使用 AWT 和 scala 在窗口中显示黑色圆圈。我成功地在我想要的位置绘制了圆圈,但图像被冻结了。
我在扩展 Frame 的 Display 类的 run() 方法中使用了一个简单的游戏循环:
final class Display(
val canvas: Canvas,
val updater : Updater
) extends Frame with Runnable {
this.add(canvas)
override def run() ={
setSize(canvas.size())
setVisible(true)
var updateTime = System.currentTimeMillis()
while(true) {
val frameStart = System.currentTimeMillis()
val frameEnd = frameStart + MILLIS_PER_FRAME
repaint()
canvas.paint(getGraphics())
while(updateTime < System.currentTimeMillis()) {
updater.update(MILLIS_PER_UPDATE, keyboard)
updateTime += MILLIS_PER_UPDATE
}
while(System.currentTimeMillis() < frameEnd) Thread.sleep(1)
}
setVisible(false)
}
我打过电话
repaint()
canvas.paint(getGraphics())
认为它会根据canvas的paint()方法再次调用在Frame上绘制图像。但显然这不是它的工作原理......
我相信我的画布的 paint(g : Graphics) 方法工作正常,并且我通过 println() 调试验证了圆圈应该在移动。
请提供任何可以帮助您回答的代码,并感谢您的回答。
【问题讨论】: