2011-08-28 6 views
4

나는 Graphics2D를 사용하여 VolatileImage를 그리는 데 사용되는 JFrame을 this 자습서로 사용하고 있습니다. 주로 코드를 복사하여 작동 방식을 확인했지만 게임을 위해 코드를 약간 편집했습니다. 컴퓨터 두 대를 사용하고 있습니다.VolatileImage JFrame 여러 화면에

게임의 창을 창에 원래 표시되지 않은 다른 화면으로 끌 때 문제가 발생합니다. 윈도우가 회색으로 바뀌고 Graphics2D로 그려진 간단한 직사각형도 화면에 표시되지 않습니다. 이것은 자습서에 표시된 것처럼 휘발성 이미지의 draw 메서드를 호출 할 때만 발생합니다. 내가이 함께 할 수있는 뭔가가있을 수 있습니다 생각

...

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); 

...하지만 확실하지 않다.

어떤 도움을 주시면 감사하겠습니다 :) 또한 VolatileImage가 내가 BufferedImage의 내 게임 또는 경우에가는되어야하는 방법 또는 뭔가 다른 성능과 프레임 레이트 보장을위한 더 나은 방법 :

있는지 알고 흥미로운 일이 될 것이다

답변

4

예, 정확합니다. VolatileImage은 장치마다 다릅니다. "The VolatileImage API User Guide"에서 읽을 수 있습니다

을 가지는 VolatileImage는 장치 별입니다 : 한 GraphicsDevice를 가지는 VolatileImage를 만든 경우, 다른 의 GraphicsDevice에 VolatileImage가 있음을 복사 할 수 없습니다. 이러한 이유로 VolatileImage를 복사하기 전에 validate를 호출해야합니다.

코드가 IMAGE_INCOMPATIBLE 경우

다음 VolatileImage는 현재 GraphicsConfiguration와 호환되지 입니다. 이 이미지가 하나의 GraphicsConfiguration으로 만들어지고 다른 이미지로 그려지는 경우 비 호환성이 발생할 수 있습니다. 예를 들어 다중 모니터 상황에서 인 경우 은 특정 GraphicsConfiguration과 연결된 입니다. 이미지를 다른 GraphicsConfiguration에 복사하면 예기치 않은 결과가 발생할 수 있습니다.이 문제를 해결하려면, 당신은 현재 GraphicsConfiguration

당신이 당신의 VolatileImage.validate(gc) 방법에서 결과를 확인하고 다시 만들어야 다른 스크린 디바이스에 프레임을 끌어와 호환되는 새로운 VolatileImage을 작성해야 이미지를 새 장치에 보냅니다. VolatileImage을 만들 수없는 경우가 있는데, BufferedImage과 같은 다른 Image 구현으로 폴백해야하는 경우가 있습니다.

+0

VolatileImage는 BufferedImage를 통해 소란스러운 가치가 있습니까? :) – Humphrey

+0

@ 흠 프리 : 그들은 훨씬 빠릅니다. 그러나 귀하의 경우에는 조숙 한 최적화가 될 수도 있습니다. 먼저 BufferedImage를 사용해 보시기 바랍니다. :) – dacwe