1

トリプル バッファリングと Canvas は、パッシブ レンダリングの最適なソリューションであるべきではありませんか? 円を表示するこの Java コードを書きました。bufferstrategy を 3 のままにすると、ちらつきが大きくなります。2~1に絞ればOKです。多分私は何か間違ったことをしていますか?

public void run(){

    while (running){   
        update();
        draw();
    }
 }


 public void update(){

 }


 public void draw(){
       BufferStrategy bs = getBufferStrategy();
       if (bs==null){
       createBufferStrategy(3);
       return;
       }

       Graphics g = bs.getDrawGraphics();
       g.setColor(Color.BLACK);
       g.fillOval(30, 30, 20, 20);
       g.dispose();
       bs.show();
 }

これは Canvas を置く JFrame クラスです

public class Game {

public static void main (String [] args){

    Pan game = new Pan();
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setResizable(true);
    frame.add(game);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    game.start();

}

}
4

2 に答える 2

1

これを試して:

次のようにクラスでaを作成BufferedImageします。myPanel

private BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);

次のように、描画メソッドで他のすべての上にその画像を描画します。

public void draw(){
   BufferStrategy bs = getBufferStrategy();
   if (bs== null){
       createBufferStrategy(3);
       return;
   }

   Graphics g = bs.getDrawGraphics();
   g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
   // Draw your other stuff after this...
   g.fillOval(20, 20, 20, 20);
   g.dispose();
   bs.show();
}

これにより、画面に黒い背景が描画され、ちらつきがなくなります。これで、その画像の上に何でも描くことができます。

于 2013-07-22T09:11:39.553 に答える