如何有选择地重置阵列的尺寸?

时间:2016-01-21 01:23:07

标签: java arrays bufferedimage

我有一个抽象类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,并根据需要使用维度。这是可能吗?谢谢。

1 个答案:

答案 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()