2014-05-17 4 views
1

2 차원 타일 게임을 만들고 있습니다. 이 게임에서는 프로그램에 다른 유형의 타일 경계가 그려집니다 (코너 타일, 사이드 타일 등). 이와 같은 가능한 타일 수가 제한되어 있습니다. 그러나 이것을 구현하자마자 프레임 속도가 꽤 심하게 추락했습니다. 모든 프레임에 80-90 개의 보이는 타일을 다시 그리는 작업이 문제라는 것을 알아 냈습니다. 고유 한 타일을 캐시하기 위해 캐시 시스템을 구현하려고했습니다. 이 시스템은 생성 된 이미지를 이미지 캐시와 비교할 수 없다는 점을 제외하면 작동합니다.Java Slick2d 이미지/텍스처. equals()

//tile object is an Image 
if (cache.contains(tile)){ 
    return cache; 
} else { 
    cache.add(tile); 
    return tile; 
} 

문제는 두 Slick2D 이미지 객체의 비교에있다 : 여기

내가 할 수있을하고자하는 것입니다. image.equals() 메서드는 두 이미지 포인터가 같은 개체를 나타내는 경우에만 true가됩니다. 픽셀 별 비교가 아닌, 두 개의 다른 이미지 객체가 정확히 동일한 데이터를 가지고 있는지 빠르게 볼 수있는 방법이 있습니까?

답변

0

이전에 타일 시스템을 사용한 방법은 TiledMap 클래스를 사용한 다음 바둑판 식 편집기 (http://www.mapeditor.org)에서 월드 타일을 다시 그려 보는 것입니다. 이렇게하면 충돌 및 렌더링에 사용할 수있는 .tmx 파일이 만들어집니다.

그러나 절차 생성을 원한다면 '타일'클래스를 만드는 것이 가장 좋습니다. 예를 들면 다음과 같습니다.

public class Tile { 
    public static int CORNER_TILE = 0; 
    public static int SIDE_TILE = 1; 
    public static int CENTRE_TILE = 2; 

    public int x, y, type; 

    public Tile(int type, int x, int y) { 
     this.type = type; 
     this.x = x; 
     this.y = y; 
    } 
    public void render(Graphics g) { 
     //Insert rendering code for each different tile type 
     //For example: 

     if (this.type == Tile.CENTRE_TILE) { 
      g.drawImage(Main.someTileImage, x * 32, y * 32); 
      //Multiply x and y by dimensions of tile 
     } 
    } 
} 

다음은 각 프레임을 업데이트하기 위해 반복되는 타일의 2 차원 배열입니다. 나는 이것이 당신이 요구 한 것이 아니라는 것을 압니다. 그러나 이것은 타일을 사용하는 제 방식입니다. 이것이 도움이 되었으면 좋겠다.

+1

그래, 나는 손 전에 타일 순열을 만들고 이미지에 저장했다. – Harrison