簡體   English   中英

如何使用線程通過Graphics2D修復運動?

[英]How to fix movement with Graphics2D using thread?

public class Billiard extends JPanel
 {
    // Constructor
    public static Ball ball[] = new Ball[16];
    private static int x = 0;
    private static int y = 0;

    public Billiard () {
        super ();

        // White Ball.
        ball[15] = new Ball(x+50,y+165,15);

    }

public void paintComponent (Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint (RenderingHints.KEY_ANTIALIASING, 
 RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint (RenderingHints.KEY_RENDERING, 
RenderingHints.VALUE_RENDER_SPEED);
        g2d.setRenderingHint (RenderingHints.KEY_COLOR_RENDERING, 
RenderingHints.VALUE_COLOR_RENDER_SPEED);
        super.paintComponent (g);

        for (int i = 0; i < 16; i++) {
            ball[i].paint (g2d);
        }

        for(int n = 0; n<100; n++){
            ball[15].move(4,0);
            repaint();
            try
            {
                Thread.sleep(7);
            }
                catch(Exception e)
            {
                 System.out.println("Error");
            }
         }
    }

}

當我自己使用.move()時,它會移動球,但是我似乎無法使用重繪線程使球平滑移動,任何建議,我都使用不同類的構造函數聲明了球,這些球是被繪制到另一個類的窗口中,並使用setContentPane將它們添加到窗口中。

您無需使用多線程處理就可以使此渲染更加平滑。 您將需要調整球的移動速度和幀速率。

現在,您正在每幀中移動球,這很可能會使它跳得太多。 此外,您在幀之間僅睡眠7毫秒,這非常快。

我的建議:1)在框架渲染循環之外處理球的運動。 我認為您不想在每個幀上都移動它。 2)增加幀之間的睡眠時間,直到運動看起來更自然。 對於初學者,請嘗試使用50/100;如果動畫速度過快,請提高該比例。 如果它們太慢,請降低它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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