Sie müssen Ihre UV-Koordinaten anpassen. Sie möchten, dass das UV-Bild oben links der Position auf dem Sprite-Blatt entspricht. Angenommen, Ihr Sprite-Blatt ist 256 x 256 Pixel groß und der gewünschte Frame beginnt bei (32, 32).
Sie können sich die UVs als Prozentsatz des Bildes vorstellen. Der horizontale Prozentsatz beträgt 32/256. (12,5% des Blattes), daher sollte das u für die linken Eckpunkte 0,125 betragen.
Das u für die rechten Eckpunkte hängt davon ab, wie groß jeder Frame ist. Sagen wir 16x16. Dann wären die beiden rechten Eckpunkte (32 + 16) / 256 oder 0,1875 des Blattes.
jetzt zu den v's. 0 ist unten und die Rahmenposition wird von oben definiert. 32/256 würde uns einen Prozentsatz vom unteren Rand des Bildes geben. Was wir brauchen, ist (256-32) / 256, um den Prozentsatz von der Unterseite des Blattes bis zur Oberseite des Bildes zu erhalten - 0,875 (yay!)
Die unteren Scheitelpunkte sind ein zusätzlicher Abstand von der Oberseite der Rahmengröße. Also (256-32-16) / 256 oder 0,8125.
Um es noch einmal zusammenzufassen: Die UV-Koordinaten für jeden Scheitelpunkt sind:
top left : (frame.x / sheet.w , (sheet.h - frame.y) / sheet.h)
bottom left:(frame.x / sheet.w , (sheet.h - frame.y - frame.h) / sheet.h)
top right: ((frame.x + frame.w) / sheet.w , (sheet.h - frame.y) / sheet.h)
bottom right: ((frame.x + frame.w) / sheet.w , (sheet.h - frame.y - frame.h) / sheet.h)
Dabei ist x = x-Position, y = y-Position, w = Breite, h = Höhe, alle in Pixel
Wenn Sie irgendwo einen Fehler sehen, weisen Sie bitte darauf hin. Ich bin gerade dabei, dies für meinen Motor zu implementieren, und die Erklärung hat mir geholfen, es herauszufinden.
Mit diesen Informationen sollten Sie in der Lage sein, eine Renderfunktion zu erstellen, die einige dieser Parameter verwendet und einen Unterabschnitt des Bildes zeichnet. Anschließend können Sie die Bildpositionen bei jedem Animationsschritt ändern, um das Bild zu animieren.