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