[英]Java Swing Timers going different speeds
我正在使用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更新游戲(如果我的數學運算正確),您可能需要嘗試以下方法。 為了讓游戲更順暢,我會嘗試找到當前事件被觸發和最后一個事件之間的時間,現在理論上可能是5ms但有時它將是7ms(超級慢),有時它將是3ms(超級快速) )。 你有兩個事件之間的時間,我會計算動畫應該在哪里,所以如果時間是3毫秒,那么動畫將在5毫秒時間之前。 讓我們舉一個簡單的例子,你試圖每5毫秒更新一個圖像的5個位置。
//your current code
newX = X + 5px
//new code
//this wont always be 5ms
timeDiff = currentEventTime – lastEventTime;
newX = X + 5px (timeDiff/5ms)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.