Un enfoque que puede funcionar es permitir colocar los marcos del sprite en cualquier lugar del mapa de bits (de esa manera puedes hacerlos más compactos) y acompañar cada mapa de bits con un archivo (n xml) que describa la ubicación, tamaño y origen de cada cuadro Y tiene una lista de todas las animaciones. Algo como esto:
<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>
esta manera se puede reutilizar los marcos a través de animaciones (y así optimizar el tamaño de mapa de bits incluso más) y personalizar las animaciones simplemente editando el archivo XML.
Todo lo que tiene que hacer es leer el archivo XML, leer el mapa de bits y al iniciar una animación: inicie un temporizador que funcione a intervalos regulares. Cuando funciona, calcule el fotograma clave correcto en la animación agregando las duraciones de los fotogramas clave uno por uno y deteniéndolo cuando la suma sea mayor que la hora de marcación; el Keyframe actual debe ser utilizado.
en el archivo XML anterior he añadido cosas tales como un desplazamiento que le permite modificar la posición del sprite durante la animación (incluso se podría interpolar que lo que se mueve sin problemas)
Todo lo que queda es agarrar el marco correcto fuera del mapa de bits. Como optimización, puede preprocesar el mapa de bits al cargar el archivo xml al tomar los marcos, mantenerlos como pequeños mapas de bits y descartar el mapa de bits grande. Esto podría optimizar la memoria cuando el mapa de bits es grande y no está completamente cubierto en marcos.
En otros casos, no preprocesa y solo ajusta el marco.
Para aplicaciones más grandes (más mapas de bits/animaciones/marcos) Recomiendo crear una aplicación para crear y editar el archivo xml. Otra opción podría ser crear un complemento para su programa de pintura favorito (si es posible)
Suena bastante simple; coloca la imagen anexa mientras la longitud de la imagen total es inferior a 3000 px. – KeithS
http://stylemeltdown.com/image-sprite-navigation-with-css/ –
eso es lo que pensé, pero como puedes ver, tengo que comenzar con una "nueva línea" cuando el sprite tiene un total de 3000px de ancho . –