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