2016-10-20 17 views
-1

したがって、基本的にはトレイルを残しません。 super.paintを削除しようとしましたが、複数作成しようとしましたが、エラーが発生するか、エラーが発生します。私は少なくとも10回それを行ったので、ここに行ったのです。前もって感謝します!私はオブジェクトを移動しようとしていますが、それはトレイルを残してほしい

import javax.swing.*; 
import java.awt.*; 

public class Grafik extends JPanel { 
private int x = 0; 

private void moveBall() 
{ 
    x += 1; 
} 

public void paint(Graphics g) 
{ 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    g2d.fillRect(x, 50, 20, 80); 
} 

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 
    Grafik grafik = new Grafik(); 

    frame.setSize(700, 800); 
    frame.setLocation(300, 200); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(grafik); 
    frame.setTitle("Mitt spel"); 
    frame.setResizable(false); 
    frame.setVisible(true); 

    while(true) 
    { 
     grafik.repaint(); 
     grafik.moveBall(); 
     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
} 
+0

ボールの軌跡を移動しようとしていますか? –

+0

...............こんにちは? –

答えて

3

問題/ソリューション:

  • SwingのペイントはpaintComponentメソッドのオーバーライドではなく、塗装方法で行われます。 JPanelのはスイングタイマー、ではないとしてしばらく(真)ループである必要があり
  • あなたのアニメーションループを描くハウスキーピングを行うことができますので、
  • することは、あなた自身のオーバーライドメソッドに `スーパーのpaintComponentメソッド最初のものを呼び出すようにしてくださいSwingのスレッドルールの抵触実行している後者のリスク
  • アニメーションを作成するが、その後
    • どちらかが歩道を表すオブジェクト、おそらくポイントのArrayListのを作成して、図面内の画像を永続ままにしたい場合は、あなたのpaintComponentでメソッドは、ArrayListを反復処理するforループ、または
    • を使用してトレールを描画します。 0
    • は、BufferedImageを背景画像として使用します。その1つは、super.paintComponent(g)を呼び出した直後で、移動するスプリントを描画する前にpaintComponentメソッド内に描画されます。 BufferedImage上でgetGraphics()を呼び出して、Graphicsオブジェクトを取得して、このBufferedImageに軌跡を描きます。
関連する問題