프로젝트 II를 하다보면 다른 분들은 어땠는지 모르지만
저 같은 경우 깜박거림이 심해서 이를 없애려고 이상한
방법(?) 을 썼는데...
위에 '더블버퍼링' 이라는 기법을 쓴 분이 계시더군요.
이에 대한 내용이 있길레 옮겨 옵니다.
----------------------------------------------------------------------------
[강좌] Double Buffering의 이해
안녕하세요 BBS 운영자 강신동 입니다.
JDK 1.1.3 한글윈95
그래픽을 화면에 그냥 그리면 깜빡거림이 매우 심하다.
paint()를 호출하기 전에 update()를 호출하기 때문인데 update()내부에서는
화면의 Image를 전체로 배경색으로 칠한 후 다시 그리기 때문에 하나의
Graphics method를 사용할 때 마다 깜빡거림이 생기게된다.
이러한 깜빡임을 없애려면 그림그리기를 완전히 끝마치기 전에는 메모리상의
가상적인 Image에 그림을 그리고 다 그리고 난 후에는 그 메모리상의 가상
Image의 데이터를 실제 모니터에 사용하는 메모리영역으로 재빨리 복사하게
만든다.
이러한 기법을 Double Buffering 이라고 한다.
import java.awt.*;
import java.applet.Applet;
public class db extends Applet{
Image memoryimage;
// 메모리상의 Image를 만든다.
Graphics memorygraphics;
// 메모리 Image에 그림을 그리기위한 Graphics
public void init() {
memoryimage = createImage(100, 100);
// java.awt.Component
// public Image createImage(int width,int height)
memorygraphics = memoryimage.getGraphics();
// Image에 그림을 그리려면 반드시 그 이미지로 부터 Graphics를 얻어야 한다.
}
public void paint (Graphics g) {
memorygraphics.setColor(Color.red);
memorygraphics.fillRect(0, 0, 100, 100);
// 메모리 Image에 그림을 그리려면 메로리 Image로 부터 얻은 Graphics를 이용한다.
g.drawImage(memoryimage, 10, 10, this);
// 시스템이 사용하는 비디오램에 메모리 Image를 10,10 좌표에 한꺼번에
// 그대로 복사한다.
}
}
------------------------------------------------------------------------------