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