2013-05-30 1 views
3

저는 Java, swing 및 Java2D를 사용하여 미로 생성 프로젝트를 진행하고 있습니다. 나는 Java2D에 상당히 익숙하다. 그래서이 질문이 새롭다면 나를 용서해주십시오.전체 미로를 다시 그리지 않는 가장 좋은 방법은 무엇입니까?

기본적으로 나는 성공적으로 생성 된 미로를 가지고 있습니다. 이 PaintComponent를 올바르게 재정의하고 설정 한 사용자 정의 JPanel에이 미로를 그려 보겠습니다. 지금 가지고있는 문제는 현재 미로를 그릴 수있는 능력이 있지만, 내가 다시 칠 때마다 사라지는 것입니다. 나는 repaint()가 호출 될 때마다 미로를 다시 그려 냄으로써 이것을 해결했지만 이것은 비효율적으로 보입니다. 미로가 왜 바뀌지 않으므로 내가 다시 그려야합니까?

내 질문은 이것입니다. 미로 도면을 "캐시"하여 매번주기를 다시 그리는 낭비 할 필요가없는 방법이 있습니까? 예외적으로 큰 미로가 천천히 움직이는 주요 원인이 될 때마다 매번 다시 그릴 수 있습니다.

감사합니다.

+0

'super.PaintComponent' 이중 버퍼링을 먼저 호출하고'paintComponent'에서 그림을 그릴 때 페인트 효과를주지 않아야합니다. 드로잉하는 동안 생성이나 기타 값 비싼 연산은별로 없으며 paintComponent에는'repaint '도 없습니다. 덜 repaint,'repaint (50L)'더 좋네요. –

답변

3

미로를 BufferedImage에 그립니다. 그런 다음 paintComponent() 메서드에서 BufferedImage를 그립니다. 스윙은 전체 미로 또는 그 일부만 다시 칠할 필요가 있는지 결정합니다.

BufferedImage에 페인트하는 예는 Custom Painting ApproachesDrawOnImage 예를 참조하십시오.

0

미로가 변경되지 않으면 처음에는 BufferedImage에 그려 넣을 수 있습니다. paintComponent을 오버라이드하기 위해 작성한 동일한 코드를 BufferedImage를 만들고 image.createGraphics()을 호출하여 Graphics2D 객체를 가져와 사용할 수 있습니다. Graphics2D 개체에 수행하는 모든 그림은 createGraphics()에서 반환되며 BufferedImage에 추가됩니다. 미로만을위한 이전 도면 코드를 Graphics2D 객체를 취하여 그 자체 함수로 추출해야 할 수도 있습니다. 당신이 당신의 미로가 BufferedImage로 유입되면

, 당신은 Graphics 또는 Graphics2DdrawImage() 기능을 사용할 수 있습니다. 이렇게하면 미로를 다시 그리지 않아도됩니다. 이제 이미 렌더링 된 이미지를 그리는 것입니다.

관련 문제