我在JPanel中有一个动画,它通过javax.swing.Timer更新自己。如果我让JPanel每秒更新60次,我会将延迟设置为1000/60 = ~16.6666。然而,这个延迟必须是一个整数,所以我可以选择向上或向下取整。对于16毫秒的延迟,动画将以每秒62.5帧的速度更新。向上舍入到17毫秒延迟将给出58.824的帧速率。
我怎样才能达到每秒60帧的帧速率呢?
提前谢谢。
事情远没有那么复杂!你可以很容易地完成repaint()或其他任何你需要的方法,用现有的最大的循环每秒钟调用60次
while(true) {
repaint ();
try {
Thread.sleep(1000/60);
} catch (InterruptedException e) {
}
}
我在脚本的主方法中调用它,但基本上它是一个无限循环,因为true将始终等于true,然后它调用repaint,告诉循环Hibernate一帧,然后再次调用repaint。1000/60 睡眠将导致此循环每秒正好被调用 60 次
我有两个选择可以帮助你。它们最终以相同的方式实现相同的事情,但代码或多或少是通用的。我还没有找到任何工具可以为您完成这项工作,因此需要做一些工作。
第一种选择是这样做:
/**
* Called by the timer when the next iteration is due. Assume that
* this happens at the right moment.
*/
public void onTimerUpdate() {
updateAnimation();
// Compute the next point in time that corresponds to the
// frame rate you want.
long nextScheduledTimestamp = getNextTimestampInNanos();
long nanos = System.timeNanos();
timer.schedule(task, convertToMillis(nextScheduledTimestamp - nanos));
}
第二个选项是获取java.util.Timer的副本:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Timer.java
并重写特定于毫秒的位。OpenJDK中的实现中没有任何内容表明其分辨率特定于毫秒,因此您应该能够将Object.wait(millis)
调用替换为Object.wait(millis, nanos)
:https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long, int)
有趣的文章,只是为了好玩:https://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks
我觉得摇摆计时器有问题。我写了一些运行良好的代码,然后将其全部移动到我的新计算机上,但它很快就无法工作。我用这个方法编写了一个GUI类(基于JFrame): 该方法是从另一个类调用的。真是太夸张了。splash guy是一个只运行splash动画的JPanel类。它通过摆动计时器来实现。在splash类中,侦听器通过以下代码调整我的帧的内容: 现在,如果第一个块中的print语句被注释掉,我的程序
我一直在做一个项目。在项目的一部分中,我需要使用JPanel。Graphics2D对象被传递给框架的模型部分,模型将在该实例中绘制它需要的任何内容。问题是JFrame未正确呈现。它看起来是半白色的阴影和不正确的绘画。它在我的笔记本电脑(索尼Vaio和Windows7)上运行良好,但在我测试的所有其他系统(2台戴尔笔记本电脑、windows8;1台Thoshiba和Windows7;1台三星和win
此代码在启动时执行一次。然后JButton位于中间。加载下一个图像时再次执行,此时JButton已处于正确位置。 我已经尝试了很多方法,比如将JButton添加到JFrame中,将JPanels布局设置为null(使button不可见),重新绘制、打包、无效,但我尝试的一切似乎都不奏效。有人能指示Swing把那个JButton放在我的JFrame的右上角吗?非常感谢!
问题内容: 我在游戏中使用了摇摆计时器,但是当游戏运行时,它似乎有平稳运行的时刻和减速的时刻。 为什么时间在波动? 我该如何解决? 这是我的代码示例。在我的实际程序中,我正在绘制图像,而不仅仅是矩形。还有很多碰撞检测和其他小的计算正在发生。 另外,这是游戏的Jar文件的链接,因此您可以运行它,(满是)明白我的意思。http://dl.dropbox.com/u/8724803/Get%20To%2
我在Swing和设置角色动画方面有一些问题,我有一个带有关键侦听器的JFrame,当用户点击时,它在这里调用我的JPanel方法 这个动画我的角色,但这么快,我们可以看到一个东西,我怎么才能看到动画?
我正在用摇摆计时器打卡NetBeans: 我只是用System.out.print来测试程序,它不是真正程序的一部分。我调用停止()方法,但计时器继续计数。此外,我通过但它的计数速度是原来的两倍。有人能帮忙吗? 编辑: 这是我的计时器(有点像SSCCE): 它不能正常工作,因为秒没有出现,但它确实显示了20次,这就是我想要的。这只是在它自己的应用程序中,在我的实际程序中更容易看到问题。 我注意到游