2013-08-19 2 views
1

내 구현이 이중 버퍼링 된 이미지에 맞는지 알고 싶습니다. 화면에서 움직이는 이미지의 경계가 떨리는 것에주의하십시오. 정상입니까?Jampel에서 이중 버퍼링 된 이미지 예제

public void paintComponent(Graphics g) { 
    Image bufferimage= createImage(180,180); 
    Graphics dbg= bufferimage.getGraphics(); 

    //clean the screen 
    dbg.setColor(new Color(100,100,100)); 
    dbg.fillRect(0,0,getWidth(),getHeight()); 

    if (game_is_running) { 
     // draw various type of object with drawImage 
     for(int i=0; list[i]!=null; i++) { 
      list[i].draw(dbg); 
     } 
     target.draw(dbg); 
     I.draw(dbg); 
    } 

    //finally draw the image linked to graphics 
    g.drawImage(bufferimage,0,0,this); 
} 

답변

3
paintComponent() 방법 밖으로 bufferimage 생성 이동

. 메서드가 호출 될 때마다이 메서드를 만들 필요가 없습니다. 당신은 어쨌든 전체 표면을 그리는 중입니다.

bufferImage (예 : dbg 변수)에서 검색 한 Graphics으로 완료하면 dispose()을 호출해야합니다.

마지막으로 구성 요소 및 구성 요소가 포함되어있는 구성 요소가 doubleBufferred 인 것을 true으로 설정하면 두 번째 이미지없이 빠져 나갈 수 있습니다.

+0

마지막 단락이 아마도 가장 중요한 문단 일 것입니다. 대부분의 Swing 구성 요소는 기본적으로 이중 버퍼링됩니다. – haraldK

3

모든 paintComponent() 메소드는 이미지를 그립니다.

"게임이 실행중인 경우"코드는 paintComponent() 메서드에 속하지 않습니다. 아이디어는 타이머 또는 게임의 상태를 변경하고 사용자 이미지에 대한 사용자 지정 그리기를 수행하는 것입니다. 그런 다음 Swing이 paintComponent() 메서드를 호출하면 이미지를 현재 상태로 간단하게 페인트합니다.

Custom Painting ApproachesDrawOnImage 예를 살펴보십시오. 이 코드는 마우스를 사용하여 이미지에 사각형을 추가합니다. 그런 다음 구성 요소를 다시 칠 때마다 이미지가 그려집니다.

아이디어는 이미지를 한 번 만들고 수정 한 다음 이미지를 다시 칠하는 것입니다. 게임에서 이미지를 수정할 때마다 페인트 할 수도 있지만 코드는 paintComponent() 메서드의 일부가 아니어야합니다.