이중 버퍼링 페인팅을 호출하는 데 루프를 사용하고 있습니다. 이 메소드는 내 유일한 Panel의 repaint 메소드를 재정의 (override)하는 것과 함께 다시 그리기를 완벽하게 제어하여 내 루프에 전달하고 필요한 경우에만 렌더링합니다 (예 : GUI에서 일부 변경).Java - Graphics.drawImage() 및 2 화면 버퍼 전략으로 많은 이미지 그리기
이 내 렌더링 루틴 :
당신이 볼 수 있듯이Log.write("renderer painting");
setNeedsRendering(false);
Graphics g = frame.getBufferStrategy().getDrawGraphics();
g.setFont(font);
g.setColor(Color.BLACK);
g.fillRect(0, 0, window.getWidth(),window.getHeight());
if(frame != null)
window.paint(g);
g.dispose();
frame.getBufferStrategy().show();
, 꽤 표준입니다. grpahics 객체를 버퍼 전략 (2로 초기화 됨)에서 가져 와서 모든 검정색으로 만들어 내 "window"객체의 페인트 메서드에 전달합니다.
그래픽 개체를 사용하여 창을 완료 한 후에는 해당 가상 개체의 내용을 처리하고 가상 버퍼의 내용을 표시하는 버퍼 전략에 대해 show를 호출합니다.
윈도우는 그래픽 객체를 다른 많은 하위 구성 요소로 전달하므로 윈도우를 채우고 각 인스턴스는 그래픽 객체의 동일한 인스턴스를 사용하여 텍스트, 모양, 또는 이미지.
시스템이 실행 중이고 큰 이미지가 렌더링 될 때 제 문제가 나타나기 시작합니다. 이미지는 조각으로 절단 된 것처럼 보이고 이미지가 렌더링 될 것으로 예상되는 내부의 다른 오프셋을 사용하여 몇 번 (3-4 회) 그려집니다. 내 첨부 된 이미지를 참조하십시오
을이 원본 이미지 것은 : alt text http://img109.imageshack.us/img109/8308/controller.png
이것은 내가 무엇을 얻을 : 두 번째 사진에서 나는 사진을 통해 모양을 렌더링 오전 alt text http://img258.imageshack.us/img258/3248/probv.png
주 -이 있습니다 항상 올바른 위치에 있어야합니다.
왜 이런 일이 발생하는지 알고 싶습니다. g.drawImage (...) 호출 직전에 메모리에있는 것처럼 이미지를 파일에 저장하면 원본과 동일합니다.
감사합니다. 휘발성 이미지의 상태를 확인하는 부분을 이해하지 못합니다. 괜찮 으면 g2로 그립니다. 그렇지 않으면 g로 그립니다. 왜? frontImg와 backImg는이 코드를 디버깅하는 데 사용하는 두 개의 서로 다른 이미지라고 생각하십니까? 또한 휘발성 이미지의 내용이 손실되는 동안 왜 그림을 반복하고 있습니까? – Warlax
귀하의 제안을 구현했지만 문제는 계속 발생합니다. – Warlax