Frage

Ich habe dieses sprite-Blatt:

Pacman sprites

Wie kann ich Lesen Sie in dieser image-Datei zu extrahieren, ein Teil davon zu werden verwendet als sprite ?

War es hilfreich?

Lösung

Wenn der Bereich Sprites lesen in eine BufferedImage , die getSubimage Methode kann verwendet werden, um ein Teilbild des Sprites Blattes zu erhalten.

Die getSubimage Verfahren nehmen den x, y und den width und height des gewünschten Unter-Bildes, so können die gewünschten Sprite erhalten werden. Da die meisten der Sprites die gleiche Größe zu sein scheint, würde ich die meisten von ihnen denken kann durch eine verschachtelte for Schleife abgerufen werden durch das große Bild zu durchlaufen.

Zum Beispiel, wenn das Sprit-Bild geladen wird mit dem ImageIO Klasse (wie die read -Methode), und jeder Sprit ist 10 Pixel mal 10 Pixel groß, wo es 5 Reihen mal 5 Spalten von Sprites kann das Sprites durch die folgenden erhalten werden:

BufferedImage bigImg = ImageIO.read(new File("sheet.png"));
// The above line throws an checked IOException which must be caught.

final int width = 10;
final int height = 10;
final int rows = 5;
final int cols = 5;
BufferedImage[] sprites = new BufferedImage[rows * cols];

for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        sprites[(i * cols) + j] = bigImg.getSubimage(
            j * width,
            i * height,
            width,
            height
        );
    }
}

Der Haken ist natürlich, wird der obige Code funktioniert nur, wenn alle Sprites die gleiche Größe haben, so dass es müssen durchgeführt, um eine gewisse Anpassung sein für das gegebene Sprite-Blatt zu arbeiten. (Wie die rechte obere Ecke scheint mich von den anderen in der Größe unterscheiden.)

Andere Tipps

Wenn Sie wollen einfach nur, um zu zeichnen, sprites, Java Graphics-Klasse hat eine drawImage Methode, die ziehen einen bestimmten Bereich des Bildes für Sie.Sie müssen nur geben Sie die Quelle ein Bild, wo Sie wollen zu ziehen Sie die sprite auf Ihrem Graphics-Objekt (x, y, Breite, Höhe), und in welchem Rahmen das Bild des Sprites befindet (x, y, Breite, Höhe).

Vorausgesetzt, die Breite und Höhe der Sprites sind die gleiche Breite und Höhe, die Sie zeichnen möchten, die im Bereich der Zeichnung, können Sie definieren Ihre eigene Methode zum zeichnen einer sprite-frame wie folgt

void drawSpriteFrame(Image source, Graphics2D g2d, int x, int y,
                     int columns, int frame, int width, int height)
{
    int frameX = (frame % columns) * width;
    int frameY = (frame / columns) * height;
    g2d.drawImage(source, x, y, x+width, y+height,
                  frameX, frameY, frameX+width, frameY+height, this);
}

columns ist, wie viele Spalten es in Ihren sprite Blatt.Die ersten beiden Zeilen der Methode berechnen Sie die x-beliebiges y-position des sprite-frame in Ihrem Blatt.

Die großen sprites in Ihrem Blatt wird spezielle Behandlung erfordern.Sie konnte zeichnen Sie mit Fliesen (so dass Sie würde die Zeichnung vier sprites für jedes der großen Bilder, die in diesem Fall), oder Sie können manuell herausfinden, was x, y, Breite und Höhe, für die sprites.

Wenn das sprite Blatt eine regelmäßige Blatt (alle sprites der gleichen Größe), und es wurde angeordnet, die in einem 5 x 15 Muster als deins, Sie zeichnen würde die 20-frame mit den folgenden Methodenaufruf

Toolkit tk = Toolkit.getDefaultToolkit();    
Image pacman = tk.getImage(getURL("pacman.png"));
...
drawFrame(pacman, g2d, x, y, 15, 19, 25, 25);

Hier sind x und y die position, die Sie wollen zu ziehen Sie das sprite auf Ihre Grafik-Objekt 15 ist die Anzahl der Spalten in Ihrer sprite-Blatt, 19, ist der Rahmen (die Nummerierung bei 0 beginnt), und 25 ist die Breite und die Höhe jedes sprite (I approximiert).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top