gpt4 book ai didi

Java Swing 计时器的速度不同

转载 作者:行者123 更新时间:2023-12-02 11:01:27 24 4
gpt4 key购买 nike

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

代码:

public Board() {
addKeyListener(new KeyListener());
setFocusable(true);
setBackground(new Color(204,250,255));

//draws the object off the screen in memory, then brings it in
setDoubleBuffered(true);

...(other code not relevant)...

timer = new Timer(5, this);
timer.start();
}

public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;

//draw platform
for(int i = 0; i < platform.length; i++) {
//g2d.setColor(new Color(0,0,0));
//g2d.drawRect(platform[i].getX(), platform[i].getY(), platform[i].getWidth(), platform[i].getHeight());
g2d.drawImage(platform[i].getImage(), platform[i].getX(), platform[i].getY(), this);
}

//draw guy
g2d.drawImage(guy.getImage(), guy.getX(), guy.getY(), this);

//destroy unneeded process
Toolkit.getDefaultToolkit().sync();
g.dispose();
}

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

最佳答案

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

//your current code
newX = X + 5px

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

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

关于Java Swing 计时器的速度不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364653/

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