Lade ein Sprites-Bild in java

Ich möchte fragen, warum beim Laden von Sprite-Bildern in das Objekt ein Fehler auftritt.

hier bekomme ich das Bild rein.

import java.awt.image.BufferedImage;
import java.io.IOException;

public class SpriteSheet {
    public BufferedImage sprite;
    public BufferedImage[] sprites;
    int width;
    int height;
    int rows;
    int columns;
    public SpriteSheet(int width, int height, int rows, int columns, BufferedImage ss) throws IOException {
        this.width = width;
        this.height = height;
        this.rows = rows;
        this.columns = columns;
        this.sprite = ss;
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < columns; j++) {
                sprites[(i * columns) + j] = ss.getSubimage(i * width, j * height, width, height);
            }
        }
    }

}

hier ist, wie ich es implementiere

    public BufferedImage[] init(){
        BufferedImageLoader loader = new BufferedImageLoader();
        BufferedImage spriteSheet = null;
        SpriteSheet ss = null;
        try {
            spriteSheet = loader.loadImage("planet.png");
            ss = new SpriteSheet(72,72,4,5,spriteSheet);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ss.sprites;
    }

Ich möchte auch nach meiner Art der Verwendung des Sprites-Arrays fragen. Ich möchte den Timer verwenden, indem ich das durch das Aktionsereignis gezeichnete Bild ändere, indem ich das aktuelle Sprite-Bild ändere.

        tmr = new Timer(20, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                for(Rock r:rocks){
                    r.move();
                    r.changeSprite();
                }
                repaint();
            }
        });

mit der Methode

    public void changeSprite(){
        if(ds==12)
            ds=0;
        ds++;
        currentSprite = sprite[ds];
    }

Jedes Rock-Objekt hat ein Sprite-Array mit gepufferten Bildern, die vom geladenen Sprite-Bild empfangen wurden, und ein aktuelles Bild, das gezeichnet wird. Der Timer ändert das aktuelle Bild und zeichnet es auf dem Objekt neu, sodass das gesamte Sprite gezeichnet wird, aber es scheint nicht zu funktionieren. Ist es also mein loadingSpriteImage, das das Problem verursacht oder meine Art, es zu zeichnen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage