如何使用线程修复Graphics2D的移动?

时间:2018-03-11 12:36:51

标签: java graphics2d

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将它们添加到它。

1 个答案:

答案 0 :(得分:0)

您不应该使用多线程来使此渲染更流畅。您需要调整球的移动速度和帧速率。

现在,你正在每一帧移动球,这很可能是让它跳得那么多。此外,您只能在帧之间休眠7毫秒,这非常快。

我的建议: 1)处理框架渲染环外的球运动。我不认为你想在每一帧上移动它。 2)增加帧之间的睡眠时间,直到运动看起来更自然。尝试使用50/100作为初学者,如果您的动画太快则增加它。如果它们太慢,请减少它。