문제

그래서 타일 이미지 타일을 가지고 있으며 창 전체에 타일지도를 만들려고합니다. 나는 이것을 애플릿으로 만들고있다. 이것이 내 페인트 방법의 모습이지만 효과적이지 않습니다. 애플릿을 실행하면 약 2 초가 걸리고 전체 화면이 한 번에 렌더링 된 모든 것이 아니라 이미지와 함께 왼쪽에서 오른쪽으로 칠해집니다. 또한 40 개의 작은 타일 인스턴스가 아닌 하나의 큰 타일 .png처럼 보입니다.

public void paint(Graphics g)
{
    Image tile=getImg("tile.png");
    int width=this.getWidth();
    int height=this.getHeight();

    int x;
    int y;
    for (x=0; x<= width; x++)
    {
        for (y=0; y<= height; y++)
        {
            g.drawImage(tile, x, y, this);
        }
    }
}

btw tile.png 파일은 10 x 10 픽셀입니다. 이것이 실제 IMG입니다.

tile.png http://img12.imageshack.us/img12/1368/tile.png

편집 : 아래 코드를 사용하고 타일 이미지를 개선 하여이 문제를 해결했습니다. 누군가를 돕는 경우에 대한 새로운 타일 IMG는 다음과 같습니다.

tile-new.png

도움이 되었습니까?

해결책

    for (x=0; x<= width / tileWidth; x++)
    {
            for (y=0; y<= height / tileHeight ; y++)
            {
                    g.drawImage(tile, x * tileWidth, y * tileHeight, this);
            }
    }

타일의 너비/높이로 오프셋해야합니다.

다른 팁

부수적 인 것처럼, 당신은 아마도 어느 시점에서 당신의 "클립 영역"을 확인하고 해당 지역 밖에서 물건을 그리지 않기를 원할 것입니다. 당신의 코드는 그렇게하기 위해 꽤 잘 설정되었습니다.

속도를 높이기 위해 할 수있는 또 다른 일은 "이중 버퍼"입니다. 구성 요소의 크기를 작성하고 해당 구성 요소의 getGraphics ()을 호출 하고이 새로운 그래픽 객체로 모든 도면을 수행 한 다음 구성 요소를 페인트 방법으로 전달한 실제 그래픽 객체에 그려냅니다.

이것에 대한 좋은 점은 페인트 명령문을 누르기 전에 전체지도를 그릴 수 있다는 것입니다.

자세한 내용은 Java의 Google 더블 버퍼링.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top