Un approccio che può funzionare è consentire di posizionare i frame dello sprite in qualsiasi punto della bitmap (in questo modo è possibile renderli più compatti) e accompagnare ogni bitmap con un file (n xml) che descrive la posizione, le dimensioni e l'origine di ogni frame E ha un elenco di tutte le animazioni. Qualcosa di simile a questo:
<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>
questo modo è possibile riutilizzare telai attraverso animazioni (e quindi ottimizzando il bitmap dimensioni anche di più) e personalizzare le animazioni semplicemente modificando il file xml.
Tutto ciò che dovete fare è leggere il file XML, leggere la bitmap e quando si avvia un'animazione: avviare un timer che zecche a intervalli regolari. Quando fa il segno di spunta, calcola il fotogramma chiave corretto nell'animazione aggiungendo le durate dei fotogrammi chiave uno alla volta e fermandoti quando la somma è maggiore del tempo di spunta; il keyframe corrente dovrebbe essere usato
Nel file XML qui sopra ho aggiunto cose come ad esempio un offset che permette di modificare la posizione dello sprite durante l'animazione (si potrebbe anche interpolare così si muove senza intoppi)
Tutto ciò che rimane è afferrando la cornice corretta fuori dalla bitmap. Come ottimizzazione, è possibile pre-elaborare la bitmap quando si carica il file xml afferrando i fotogrammi, mantenendo quelli come piccoli bitmap e scartando la bitmap grande. Ciò potrebbe ottimizzare la memoria quando la bitmap è grande e non completamente coperta dai frame.
In altri casi non si pre-processa e si blocca semplicemente il frame.
Per applicazioni più grandi (più bitmap/animazioni/fotogrammi) Consiglio di creare un'app per creare e modificare il file xml. Un'altra opzione potrebbe essere quella di creare un plugin per il tuo programma di pittura preferito (se possibile)
Suoni abbastanza semplici; accosta l'immagine all'aggiunta mentre la lunghezza dell'immagine totale è inferiore a 3000 px. – KeithS
http://stylemeltdown.com/image-sprite-navigation-with-css/ –
questo è quello che ho pensato, ma come puoi vedere, devo iniziare su una "nuova linea" quando lo sprite è un totale di 3000px di larghezza . –