3 Stimmen

Java Spielentwicklung: Sprite-Blatt Rahmen nach Reihe und Spalte?

Ich versuche herauszufinden, wie ich die X- und Y-Koordinaten der Rahmen eines animierten Spritesheets bekomme, indem ich ihm die Rahmenbreite, -höhe, -zeilen, -spalten und -frameCount gebe. Dann möchte ich zurückbekommen, in welcher Reihe und Spalte der Rahmen ist, wenn mir eine Rahmennummer gegeben wird. (von oben nach unten von rechts nach links zählen)

Ich habe festgestellt, dass ich die Spaltennummer (wenn ich die Zeilen und Spalten als int[][] betrachte) einfach bekommen kann, indem ich einfach frameNumber % rows mache, aber ich stehe vor der Frage, wie ich die Zeilennummer bekommen kann. Irgendwelche Ideen?

4voto

Niko Punkte 5873

Wenn Sie cols Spalten haben, können Sie einfach verwenden:

Verwenden:

row = Math.floor(frameNumber / cols);
col = frameNumber % cols;

also, wenn Sie 1000 Spalten haben und Rahmennummer 3989 möchten, erhalten Sie:

row = 3; col = 989;

1voto

Zistack Punkte 508

Wenn Sie die Breite und Höhe der Frames kennen, wie viele Frames pro Zeile es gibt und welchen Frame Sie möchten, ist es relativ einfach, die x- und y-Koordinaten zu erhalten:

    frameX = ((frameNumber - 1) % columns) * frameWidth;

    frameY = ((frameNumber - 1) / columns) * frameHeight;

Beachten Sie, dass die '/'-Operation ein int, short oder byte sein muss, da der Rest abgerundet werden muss, um die X- und Y-Koordinaten am Anfang des Frames zu erhalten, im Gegensatz zu irgendwo in der Mitte.

Diese Formeln gelten für ein Sprite-Blatt, bei dem die Frames von links nach rechts und dann von oben nach unten gehen. Wenn Sie es andersherum möchten, tauschen Sie einfach die '%' und '/'-Operatoren aus und ändern 'columns' in 'rows':

    frameX = ((frameNumber - 1) / rows) * frameWidth;

    frameY = ((frameNumber - 1) % rows) * frameHeight;

Dabei wird auch davon ausgegangen, dass Sie auf Ihre Frames ab 1 verweisen werden. Wenn Sie sie stattdessen ab 0 indizieren, kann der Teil '- 1' entfernt werden:

    frameX = (frameNumber % columns) * frameWidth;

    frameY = (frameNumber / columns) * frameHeight;
    //vorausgesetzt, dass frameNumber ab 0 indiziert ist;

Außerdem, wenn Sie nur wissen möchten, in welcher Spalte oder Zeile sich der Frame befindet, entfernen Sie einfach die '* frameWidth' und '* frameHeight'-Teile, die Zeilen- und Spaltenindizes ab 0 zurückgeben:

    frameX = (frameNumber - 1) % columns;

    frameY = (frameNumber - 1) / columns;

Hoffentlich hilft das.
Zistack

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X