당신은 단지 이미지를 유지하고 그릴 위치를 지정 그래픽 객체의의 drawImage 메소드의 오버로드를 사용할 수
있는 이미지의 일부 :
g.drawImage(image, x1, y1, x2, y2, srcX1, srcY1, srcX2, srcY2);
참조 [자바 독 (HTTP : // 매끄러운 .cokeandcode.com/javadoc/org/newdawn/slick/Graphics.html # drawImage (org.newdawn.slick.Image, float, float, float, float, float, float, float, float)
첫 번째 매개 변수는 이미지의 인스턴스입니다. 다음 두 매개 변수는 렌더링이 시작되는 화면상의 지점을 정의합니다. X2와 y2는 렌더링의 끝점을 정의합니다. 일반적으로 x2는 x1 + spriteWidth이고 y2는 y1 + spriteHeight이지만 스프라이트를 다른 크기로 그리려면이 값을 변경할 수 있습니다. 마지막 네 개의 매개 변수는 동일하게 작동하지만 화면에 그려지는 스프라이트 시트의 영역을 정의합니다.
우리는 당신의 예를 들자면 우리는 호출이 같을 것이다 세 번째 행에서 두 번째 타일 그리려는 경우 매우 드문 일부에서
int tileWidth = 8;
int tileHeight = 8;
int sourceX = 40;
int sourceY = 8; //as its the sec
int drawX = 34;
int drawY = 65;
g.drawImage(image, drawX, drawY, drawX + tileWidth, drawY + tileHeight
, sourceX, sourceY, sourceX + tileWidth, sourceY + tileHeight);
내가 spritesheet 작업 할 때, 나는 하드 코딩 한 값 (사례, 대부분 테스트)와 소스 x1, x2, y1 및 y2 값이 저장되는 스프라이트 클래스가 있습니다. 리스트 나 맵에 여러 개의 팩을 넣을 수 있으며 스프라이트 인덱스를 가질 수 있습니다. 일반적으로 어떻게 든 정의를 생성 한 다음 목록을 직렬화하므로 필요한 경우 목록을 다시로드 할 수 있습니다.
다음은 내 XML 정의의 간단한 예입니다. xml에 x2 및 y2 값 대신 폭과 높이를 저장합니다. 사람이 읽을 수 있고 수동으로 편집하기 편리합니다.deserialization 후 x2 및 y1 값을 계산합니다.
<spriteSheet imageName="buildings" name="buildings">
<sprite name="1x2 industry 01" spriteX="0" spriteY="0" width="50" height="112"/>
<sprite name="1x2 quarters 01" spriteX="50" spriteY="0" width="50" height="112"/>
<sprite name="1x1 spaceport 01" spriteX="243" spriteY="112" width="51" height="56"/>
...
</spriteSheet>