我有一个抽象类Sprite
,它在构造函数中为各个sprite创建一个数组。构造函数采用spritesheet的路径,spritesheet类型作为枚举,以及各个sprite'宽度和高度。构造函数获取spritesheet的路径,将其加载到BufferedImage中,并从图像中抓取各个sprite以将它们加载到数组中。这是班级:
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语句,因为我希望它能够工作:
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
的数组,其中包含各个sprite,并根据需要使用维度。这是可能吗?谢谢。
答案 0 :(得分:1)
你做的是这个:
BufferedImage[][] sprites=null;
case 0-dimension: sprites=new BufferedImage[1][1];
case 1-dimension: sprites=new BufferedImage[n][1]
case 2-dimension: sprites=new BufferedImage[n][m]
然后
case 0-dimension: sprites[0][0]=new BufferedImage(....);
case 1-dimension: for(i) sprites[i][0]=new BufferedImage()
case 2-dimension: for(i) for(j) sprites[i][j]=new BufferedImage()