그래서 내가하고있는 게임에서 마우스를 따라 대리석을 가지고 있습니다.하지만 이렇게하면 화면이 깜박입니다.게임에서 자바에서 어떻게 이중 버퍼링합니까?
배경에는 2 개의 jpeg와 9 개의 직사각형이 있습니다. 어떻게하면 이중 버퍼링을 할 수 있습니까? 다음은 메인 윈도우의 코드입니다.
/**
* Write a description of class Window here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Window extends JApplet implements MouseMotionListener
{
private BufferedImage image;
private BufferedImage side;
private int mouseX;
private int mouseY;
public Window(){
try {
image = ImageIO.read(new File("Backgrounds/violet.jpg"));
side = ImageIO.read(new File("Backgrounds/side margin.jpg"));
} catch (IOException ex) { }
}
private void delay(int delay)
{
try {
Thread.sleep(delay);
} catch (InterruptedException e) {}
}
public void init()
{
this.addMouseMotionListener(this);
}
public void paint (Graphics page)
{
page.drawImage(image, 0, 0, null);
page.setColor(Color.blue);
page.fillRect(0, 0, 160, 160);
page.setColor(Color.black);
page.fillRect(15, 15, 130, 130);
page.setColor(Color.green);
page.fillRect(340, 0, 160, 160);
page.setColor(Color.black);
page.fillRect(355, 15, 130, 130);
page.setColor(Color.yellow);
page.fillRect(0, 340, 160, 160);
page.setColor(Color.black);
page.fillRect(15, 355, 130, 130);
page.setColor(Color.red);
page.fillRect(340, 340, 160, 160);
page.setColor(Color.black);
page.fillRect(355, 355, 130, 130);
page.drawImage(side, 500, 0, null);
page.drawString(Score.getScore(), 560, 110);
//conveyors
page.setColor(Color.gray);
page.fillRect(235, 0, 30, 160);
//marble
delay(100);
page.fillOval(mouseX, mouseY , 40, 40);
}
public void mouseMoved(MouseEvent e)
{
mouseX = e.getX();
mouseY = e.getY();
repaint();
}
public void mouseDragged(MouseEvent e)
{
}
}
고마워요 :) –
좋은 답변이지만, 스윙은 이미 더블 버퍼링을 제공하므로 이것을 할 필요가 없습니다. 자세한 내용은 내 대답을 참조하십시오 .... – mikera
@ dfb '페인트 (offgc); 이미지 오프 스크린은 어떻게 업데이트 되나요? 변수가 화면 밖으로 변경되는 것을 볼 수 없습니다. –