2011-04-07 2 views
0

나는 바탕 패널이 배경 (나무, 물 등)을 그리는 프로그램이 있으며, 플레이어와 다른 객체가 화면 주위를 돌아 다니고 있습니다. 나는 모든 것을 다시 칠하기 때문에 나를 늦추기 때문에 모든 것을 다시 칠하기를 원하지 않는다. 맨 위에 새로운 패널을 추가하려고하면 많은 것들이 다시 그려지고 움직이는 객체를 처리 할 것이고, 아무 것도 내 코드에서 발생하지 않습니다. 이것은 내가 처음다른 하나 위에 새 패널 페인팅

public GamePanel() 
{ //some code 
    top = TopPanel(); 
    top.setSize(this.getSize()); 
    add(top); 
//some more code 
} 

에 대한 다음 toppanel에 상관없이 내가 뭘

public TopPanel() 
    { 

    } 
    public void paintComponent(Graphics g) 
    { 
     i.drawItem(//); 
     player.draw(//fields); 
    } 

그리고의 클래스에 생성자에서 무엇을, 난 아무것도가에 표시 할 수 없습니다 패널을 실행할 때.

+0

null 레이아웃을 사용하는 레이아웃 관리자는 무엇입니까? 그렇다면 TopPanel의 위치와 크기를 설정해야합니다. – MeBigFatGuy

+0

빨리 도움을 받으려면 [SSCCE] (http://pscode.org/sscce.html)를 게시하십시오. –

+0

필자는 그것을 시도했지만, paintChildren을 무시하는 것이 유일한 방법 이었지만 느린 작업이었습니다. –

답변

2

복잡하지만 정적 인 '배경'을 위에 그려지는 다른 것들로 렌더링 할 때 일반적으로 사용하는 방법은 배경을 BufferedImage으로 그려서 동적 부분을 페인팅하기 전에 이미지를 다시 그리기 만하면됩니다.

+0

덕분에, 매력처럼 작동했는데, 왜 내가 전에 생각하지 않았는지 전혀 몰랐습니다. –

+2

@Sasha : 앤드류의 대답을 받아 들일 수 있습니다. –