gpt4 book ai didi

java - Swing 定时器的浮点值?

转载 作者:行者123 更新时间:2023-12-01 18:56:58 26 4
gpt4 key购买 nike

考虑以下 Swing 计时器:

timer = new Timer (ballSpeed, tc);

ballSpeed 初始值为 10。tc 是一个操作监听器类,用于递增屏幕上绘制的对象的 x 值。变量 ballSpeed 有点用词不当,因为值越低,物体移动得越快。

现在我希望对象的运动看起来尽可能平滑。因此我只会在 ActionListener 中将 x 值一一递增。也就是说,对象只能逐像素移动。我使用 x++ 而不是 x+=10。因此我不会以这种方式修改球的速度。

现在,由于 Timer 的第一个参数仅接受整数,因此它无法让我对对象的速度有很大的控制。我只能使用10、9、8等。物体移动太快或太慢。

总而言之,毫秒精度是不够的。

有办法解决这个问题吗?或者是否有更好的方法来实现屏幕上的对象移动?

最佳答案

javax.swing.Timer 没有足够的准确度或精度来生成您想要实现的平滑图形。此外, Swing 计时器为 affected by anything else in the swing event queue :

Second, its automatic thread sharing means that you don't have to take special steps to avoid spawning too many threads. Instead, your timer uses the same thread used to make cursors blink, tool tips appear, and so on.

如果您不想使用某些媒体框架或使用描述对象运动(而不是实际移动对象)的 API,则应该使用 Swing 计时器作为安排下一次计算的方法,但确定通过查看 System.nanoTime() 之间的差异,自上次计算以来耗时now 和上次计算期间的 nanoTime。

使用这种方法,您将在动力不足的机器上获得更多锯齿但更正确的动画。

关于java - Swing 定时器的浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13649375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com