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将它们添加到它。
答案 0 :(得分:0)
您不应该使用多线程来使此渲染更流畅。您需要调整球的移动速度和帧速率。
现在,你正在每一帧移动球,这很可能是让它跳得那么多。此外,您只能在帧之间休眠7毫秒,这非常快。
我的建议: 1)处理框架渲染环外的球运动。我不认为你想在每一帧上移动它。 2)增加帧之间的睡眠时间,直到运动看起来更自然。尝试使用50/100作为初学者,如果您的动画太快则增加它。如果它们太慢,请减少它。