Podejście, które może działać, polega na umożliwieniu umieszczenia ramek sprite'a w dowolnym miejscu mapy bitowej (w ten sposób można uczynić je bardziej zwartymi) i dołączenia każdej mapy bitowej do pliku (n xml) opisującego lokalizację, rozmiar i pochodzenie każdej klatki I ma listę wszystkich animacji. Coś takiego:
<SpriteSheet>
<Frames>
<Frame id="0" location="20,40" size="64,64" origin="32,32" />
<Frame id="1" location="100,40" size="64,64" origin="32,32" />
<Frame id="2" location="164,40" size="64,64" origin="0,0" />
<Frame id="3" location="20,120" size="64,64" origin="32,32" />
</Frames>
<Animations>
<Animation name="walk left" >
<Keyframes>
<Keyframe frameId="0" duration="0:0:0.5" offset="-5,0" />
<Keyframe frameId="1" duration="0:0:0.5" offset="-5,0" />
<Keyframe frameId="2" duration="0:0:0.4" offset="-2,0" />
<Keyframe frameId="1" duration="0:0:0.5" offset="-5,0" />
</Keyframes>
</Animation>
<Animation name="walk right" >
<Keyframes>
<Keyframe frameId="5" duration="0:0:0.5" offset="5,0" />
<Keyframe frameId="6" duration="0:0:0.5" offset="5,0" />
<Keyframe frameId="2" duration="0:0:0.4" offset="2,0" />
<Keyframe frameId="6" duration="0:0:0.5" offset="5,0" />
</Keyframes>
</Animation>
</Animations>
</SpriteSheet>
ten sposób można ponownie użyć całej klatki animacji (a więc optymalizacja wielkości bitmapy nawet więcej) i dostosować animacje po prostu edytując plik XML.
Wszystko, co musisz zrobić, to przeczytać plik XML, przeczytać mapę bitową i podczas uruchamiania animacji: uruchom zegar, który tyka w regularnych odstępach czasu. Po zaznaczeniu obliczysz poprawną klatkę kluczową w animacji, dodając czas trwania klatek kluczowych po kolei i kończąc, gdy suma jest większa niż czas tykania; należy użyć bieżącej klatki kluczowej.
w pliku XML powyżej dodałem rzeczy, takich jak offset, który pozwala modyfikować pozycję ikonki podczas animacji (można nawet interpolacji go tak płynnie)
Wszystko, co pozostało jest pobieranie poprawna ramka poza bitmapą. Jako optymalizację można wstępnie przetworzyć mapę bitową podczas ładowania pliku xml, chwytając ramki, zachowując je jako małe bitmapy i odrzucając dużą bitmapę. Może to zoptymalizować pamięć, gdy bitmapa jest duża i nie jest w pełni pokryta ramkami.
W innych przypadkach proces wstępny nie jest wykonywany i po prostu blit ramki.
W przypadku większych aplikacji (więcej map bitowych/animacji/ramek), zalecamy utworzenie aplikacji do tworzenia i edycji pliku xml. Inną opcją może być stworzenie wtyczki do twojego ulubionego programu do malowania (jeśli to możliwe).
Brzmi dość prosto; zapętlić obraz, podczas gdy długość całego obrazu jest mniejsza niż 3000px. – KeithS
http://stylemeltdown.com/image-sprite-navigation-with-css/ –
To właśnie ja, ale jak widać, muszę zacząć od "nowej linii", gdy sprite ma w sumie 3000px szerokości . –