Java 如何以特定帧速率更新Swing画布?

Java 如何以特定帧速率更新Swing画布?,java,scala,swing,Java,Scala,Swing,所以对于一个学校项目,我必须用Swing在Scala中制作一个游戏 我先做了一个窗口,有一个按钮,还有一块画布,我可以在上面画我想要的任何东西 问题是,我发现更新画布的唯一方法是基于事件的,例如当我按下按钮时 我希望能够以特定的帧速率刷新画布,但swing似乎是基于事件的,我不知道在哪里可以放置while循环,或者类似的东西来保持恒定的更新速率,只需创建一个循环,重复调用repain()。 请注意,调用repaint()只会发出请求并立即返回(在绘制之前),因此您无法真正控制帧速率,您可以限制它

所以对于一个学校项目,我必须用Swing在Scala中制作一个游戏

我先做了一个窗口,有一个按钮,还有一块画布,我可以在上面画我想要的任何东西

问题是,我发现更新画布的唯一方法是基于事件的,例如当我按下按钮时


我希望能够以特定的帧速率刷新画布,但swing似乎是基于事件的,我不知道在哪里可以放置while循环,或者类似的东西来保持恒定的更新速率,只需创建一个循环,重复调用
repain()

请注意,调用
repaint()
只会发出请求并立即返回(在绘制之前),因此您无法真正控制帧速率,您可以限制它。
要测量帧率,您需要在画布的
paintComponent()
函数中计算现在与上一个绘制周期之间的时间差

我最近回答了一个类似的问题,您可以从那里复制代码,如果这适用于scala(我真的不懂这种语言):

只要创建一个循环,重复调用
repaint()

请注意,调用
repaint()
只会发出请求并立即返回(在绘制之前),因此您无法真正控制帧速率,您可以限制它。
要测量帧率,您需要在画布的
paintComponent()
函数中计算现在与上一个绘制周期之间的时间差

我最近回答了一个类似的问题,您可以从那里复制代码,如果这适用于scala(我真的不懂这种语言):

FWIW:Swing计时器也是事件生成器。无论如何,如果不使用库来处理细节,我可能会在后台线程上使用双缓冲,然后切换到活动。有很多例子:请参阅“swing canvas game fps”或类似搜索。由于这个问题不是专门针对Scala的(语法实现或友好库除外),我还添加了Java,它可能会引出更多相关问题。FWIW:swing计时器也是事件生成器。无论如何,如果不使用库来处理细节,我可能会在后台线程上使用双缓冲,然后切换到活动。有很多例子:请参阅“swing canvas game fps”或类似的搜索。由于这个问题不是专门针对Scala的(语法实现或友好库除外),我还添加了Java,它可能会引出更多相关问题。