Вы можете просто сохранить изображение и использовать перегрузку метода DrawImage объекта Graphics, чтобы указать, где рисовать, какая часть изображения:
g.drawImage(image, x1, y1, x2, y2, srcX1, srcY1, srcX2, srcY2);
См [Javadoc] (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 (я храню ширину и высоту, а не значения x2 и y2 в xml, так как я считаю, что это более читаемо и удобнее для ручного редактирования.После десериализации я вычисляю значения 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>