У меня есть абстрактный класс Sprite
, который в своем конструкторе создает массив для отдельных спрайтов. Конструктор берет путь к спрайту, типу спрайтов как перечислению, а также ширине и высоте отдельных спрайтов. Конструктор берет путь к спрайту, загружает его в BufferedImage и захватывает отдельные спрайты из изображения, чтобы загрузить их в массив. Вот класс:Как я могу выборочно сбросить размеры массива?
package exosoft.Zerfall;
public abstract class Sprite extends Main {
BufferedImage spriteSheet = null;
BufferedImage[] sprites;
int spriteWidth = 0;
int spriteHeight = 0;
public enum SheetType {
SINGLE,
HORIZONTAL,
VERTICAL,
RECTANGULAR
}
public Sprite(SheetType type, String sheetPath, int spriteWidth, int spriteHeight) {
try {
spriteSheet = ImageIO.read(new File(sheetPath));
} catch (IOException e) {
e.printStackTrace();
}
switch(type) {
case HORIZONTAL:
sprites = new BufferedImage[spriteSheet.getWidth()/spriteWidth];
for (int i = 0; i < spriteSheet.getWidth()/spriteWidth; i++) {
sprites[i] = spriteSheet.getSubimage(i * spriteWidth, 0, spriteWidth, spriteHeight);
}
break;
case RECTANGULAR:
break;
case VERTICAL:
sprites = new BufferedImage[spriteSheet.getHeight()/spriteHeight];
for (int i = 0; i < spriteSheet.getHeight()/spriteHeight; i++) {
sprites[i] = spriteSheet.getSubimage(0, i * spriteHeight, spriteWidth, spriteHeight);
}
break;
default:
break;
}
}
}
То, что я хочу сделать, это позволить BufferedImage[] sprites
массив, чтобы добавить или удалить измерение на основе данного SheetType. Например, здесь есть переключатель заявление, как я хотел бы, чтобы работать:
switch(type) {
case HORIZONTAL:
sprites = new BufferedImage[spriteSheet.getWidth()/spriteWidth];
//load sprites into one-dimensional array
break;
case RECTANGULAR:
sprites = new BufferedImage[spriteSheet.getWidth()/spriteWidth][spriteSheet.getHeight/spriteHeight];
//load sprites into two-dimensional array
break;
case VERTICAL:
sprites = new BufferedImage[spriteSheet.getHeight()/spriteHeight];
//load sprites into one-dimensional array
break;
case SINGLE:
sprites = new BufferedImage();
//load sprite into zero-dimensional BufferedImage
break;
default:
break;
}
Цель состоит в том, чтобы в конечном итоге с массивом с именем sprites
с отдельными спрайтов, содержащихся с размерами по мере необходимости. Это вообще возможно? Спасибо.
Нет, это не возможно, так же, как вы сделали выше. Ваша переменная-член 'sprites' должна быть либо нормальной переменной, либо массивом. Почему бы просто не использовать только двумерный массив и использовать 1 для измерения, которое вас не волнует? Он всегда будет работать. – haraldK