簡體   English   中英

Java Swing Timers的速度不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM