不同速度的Java Swing计时器

不同速度的Java Swing计时器,java,swing,timer,Java,Swing,Timer,我正在用Java制作一个2D平台,我正在使用一个Swing定时器,它设置为5毫秒的间隔。然而,有时它以很好的速度平稳移动,但随后它会随机变得超快,有时超慢。这可能是什么原因 代码: publicboard(){ addKeyListener(新的KeyListener()); 设置聚焦(真); 立根(新颜色(204250255)); //在内存中从屏幕上提取对象,然后将其带入 setDoubleBuffered(真); …(其他代码不相关)。。。 定时器=新定时器(5,此); timer.sta

我正在用Java制作一个2D平台,我正在使用一个Swing定时器,它设置为5毫秒的间隔。然而,有时它以很好的速度平稳移动,但随后它会随机变得超快,有时超慢。这可能是什么原因

代码:

publicboard(){
addKeyListener(新的KeyListener());
设置聚焦(真);
立根(新颜色(204250255));
//在内存中从屏幕上提取对象,然后将其带入
setDoubleBuffered(真);
…(其他代码不相关)。。。
定时器=新定时器(5,此);
timer.start();
}
公共空间涂料(图g){
超级油漆(g);
Graphics2D g2d=(Graphics2D)g;
//绘图平台
对于(int i=0;i

基本上,cycle函数决定角色是否需要移动,如果需要,则移动角色。

很难让Java作为实时系统工作…。因为未知的因素,比如操作系统何时安排进程运行和GC。由于您试图以每秒200帧的速度更新游戏(如果我的数学正确的话),您可能需要尝试以下方法。为了使游戏更流畅,我会尝试找出当前事件激发和最后一个事件激发之间的时间,现在理论上可能是5毫秒,但有时是7毫秒(超慢),有时是3毫秒(超快)。如果你有两个事件之间的时间,我会计算动画应该在哪里,所以如果时间是3毫秒,那么动画将比5毫秒的时间早一点。让我们举一个简单的例子,您尝试每5ms更新一个图像的X位置5px

//your current code
newX = X + 5px

//new code
//this wont always be 5ms
timeDiff = currentEventTime – lastEventTime;

newX = X + 5px (timeDiff/5ms)

“这可能是什么原因?”您选择不包含的代码?为了更快地获得更好的帮助,请发布一个。很抱歉,我的代码只是一个简单的摆动计时器,我更新了我的第一个帖子。我并没有建议您发布“代码”,而是一个“SSCCE”。请阅读此链接以停止浪费您的时间,更重要的是,我的.5ms足够快,可能会受到系统负载和响应时间的影响。很抱歉,Andrew,但您发布的链接我无法理解。
//your current code
newX = X + 5px

//new code
//this wont always be 5ms
timeDiff = currentEventTime – lastEventTime;

newX = X + 5px (timeDiff/5ms)