Tutorial 2 Andengine - Sprites, Sprites Animados
Hoy se animaran y moveran imagenes :D. Por fin no? Bueno el tema de hoy es como cargar imágenes, estáticas y animadas. Lo primero es entender que es un sprite. Un sprite es una imagen maniobrable. Como esta, en este caso animada:

Pero esas imágenes se suelen estructurar y animar en tiempo de ejecución, y se estructura de esta manera:

Primero lo básico y luego progresamos. Para poder poner una imagen en la pantalla de su celular, primero deben cargarla y para cargarla Andengine nos ofrece una muy buena práctica que son los Atlases.
Un Atlas es una hoja de imagenes, cargada en memoria en la cual ordenamos nuestras texturas para acceder a ellas de una manera más eficiente.
Para poder cargar imagenes debemos alojarla en la carpeta /assets en su proyecto de android, si no existe, la creamos:

Veamos el cargado de un sprite en código, crearemos un Atlas y una textura primero:

Luego, debemos crear el sprite a partir de nuestra textura:

Obtendremos algo así:

Desde aquí, podemos escalar a muchas cosas, conseguir un set de sprites y construir un mapa, etc. Pero mejor animarlo no? Bueno el proceso solo cambia un poco, para usar Sprites animados, primero necesitamos uno, yo les facilito este:

Los spritesheets, como se llaman estos dibujos, constan de filas y columnas, a las cuales podemos referenciar desde el motor para que se efectuen los cortes automaticos y las animaciones, según las frecuencias deseadas. Por ejemplo el spritesheet de arriba tiene 10 columnas y 10 filas, muchas vacias pero no importa, porque las podemos usar en el futuro para poner más animaciones.
Bueno primero crearemos una textura para nuestra animación:
Para luego cargarlo en nuestro atlas, el cual necesita ahora más tamaño, porque las medidas de la textura son 320 x 640 y debemos ubicarlo de manera que no tape la textura anterior osea 76 en x, 0 en y:

Luego creamos el objeto para nuestro Sprite animado:

Tengamos en cuenta esto :

Ejecutamos y obtenemos algo parecido a esto:

El código de la sesión lo pueden encontrar aquí y las imagenes en este mismo post, solo clickeenlas.
No duden en dejar sus preguntas, hasta la proxima.
Pero esas imágenes se suelen estructurar y animar en tiempo de ejecución, y se estructura de esta manera:
Primero lo básico y luego progresamos. Para poder poner una imagen en la pantalla de su celular, primero deben cargarla y para cargarla Andengine nos ofrece una muy buena práctica que son los Atlases.
Un Atlas es una hoja de imagenes, cargada en memoria en la cual ordenamos nuestras texturas para acceder a ellas de una manera más eficiente.
Para poder cargar imagenes debemos alojarla en la carpeta /assets en su proyecto de android, si no existe, la creamos:
Veamos el cargado de un sprite en código, crearemos un Atlas y una textura primero:
private BitmapTextureAtlas miAtlas;
private ITextureRegion texturaChar;Luego, debemos crear el sprite a partir de nuestra textura:
private Sprite charSprite;Obtendremos algo así:
Desde aquí, podemos escalar a muchas cosas, conseguir un set de sprites y construir un mapa, etc. Pero mejor animarlo no? Bueno el proceso solo cambia un poco, para usar Sprites animados, primero necesitamos uno, yo les facilito este:
Los spritesheets, como se llaman estos dibujos, constan de filas y columnas, a las cuales podemos referenciar desde el motor para que se efectuen los cortes automaticos y las animaciones, según las frecuencias deseadas. Por ejemplo el spritesheet de arriba tiene 10 columnas y 10 filas, muchas vacias pero no importa, porque las podemos usar en el futuro para poner más animaciones.
Bueno primero crearemos una textura para nuestra animación:
private ITiledTextureRegion texturaAnimada;Para luego cargarlo en nuestro atlas, el cual necesita ahora más tamaño, porque las medidas de la textura son 320 x 640 y debemos ubicarlo de manera que no tape la textura anterior osea 76 en x, 0 en y:
Luego creamos el objeto para nuestro Sprite animado:
private AnimatedSprite spriteAnimado;Tengamos en cuenta esto :
Ejecutamos y obtenemos algo parecido a esto:
El código de la sesión lo pueden encontrar aquí y las imagenes en este mismo post, solo clickeenlas.
No duden en dejar sus preguntas, hasta la proxima.
Por ahora solo he leido tu tutorial y confio que me valla bien en la práctica, ¡felicidades!. Me interesa saber de que otros temas de andengine haras tutoriales. Saludos.
ResponderEliminarPrimero voy a explicar el framework, como se usa básicamente y luego haré un ejemplo completo de un juego con varias técnicas un poco más avanzadas. También hablare de la parte gráfica. Y lo que a ustedes les interese :)
ResponderEliminarHasta ahora, no ve van saliendo las cosas como deberían, esperemos mejoremos en los próximos tutoriales, mientras voy aprendiendo lento.
ResponderEliminarDime en que te puedo ayudar :D
ResponderEliminarasi cortitos son los tutoriales o hay q descarse un tipo de texto o como ??
ResponderEliminarHay código e imagenes en el post
ResponderEliminarMuy buenos tutoriales espero que sigas asi. Me surge una duda ¿Tiene que haber la misma distancia entre cada imagen dentro del spritesheet?
ResponderEliminarNo necesariamente. Es a libertad tuya :)
ResponderEliminarBuen tutorial! pero tengo un problema, porque me sale la imagen completa del sprite junto a la animación como lo oculto o que hice mal.
ResponderEliminarPon un screen de como sale. Pero adelantando una respuesta revisa bien cuantas columnas tiene ese sprite animado
ResponderEliminarRevisa bien cuantas columnas y filas tiene tu animated sprite . puedes poner una captura?
ResponderEliminarEs de su mismo ejemplo y su codigo, separé en la parte derecha la animación para ver mi problema, lo que quiero es que no me salga de fondo la imagen completa.
ResponderEliminarAqui esta la imagen: https://www.dropbox.com/s/pbz94vvxnnk6qgn/sprite.jpg
Si la causa es la cantidad de columnas y filas, revisala.
ResponderEliminarSi lo pude solucionar gracias si en la primera imagen no tenia el numero de columnas y filas:
ResponderEliminartexturaChar = BitmapTextureAtlasTextureRegionFactory.createFromAsset(miAtlas, this, "char.png", 0, 0);
ahora lo puse y si funcionó pero cambiando a:
texturaChar = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(miAtlas, this, "char.png", 0, 0,4,5);
Gracias
:) gracias a ti
ResponderEliminarHola, gracias por este tutorial, me está resultando muy últil.
ResponderEliminarTengo un par de problemas, cuando pruebo la aplicación me sale un aviso "la aplicación se detuvo" antes de arrancar. Otro problema, no sé si estará relacionado, es que no puedo incluir "throws IOException", me da el siguiente error:
- implements org.andengine.ui.activity.SimpleBaseGameActivity.onCreateResources
- Exception IOException is not compatible with throws clause in
SimpleBaseGameActivity.onCreateResources()
Saludos!
Me encantaría ayudarte. Si pudieras enviarme el error completo y si pones el código donde lo marca seria excelente. Gracias
ResponderEliminarHe conseguido lanzar la app, eliminando "throws IOException" de:
ResponderEliminar@Override
protected void onCreateResources() throws IOException {
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
miAtlas = new BitmapTextureAtlas(getTextureManager(), 256, 256, TextureOptions.DEFAULT);
texturaChar = BitmapTextureAtlasTextureRegionFactory.createFromAsset(miAtlas, this, "walk_sheet.png", 0, 0);
miAtlas.load();
}
Pero ni rastro del sprite en pantalla. El error q me da es el que he escrito antes, no encuentro una explicación más detallada. ¿Para qué sirve IOException exactamente?
Muchas gracias por la atención :)
Ponle el ioexception sino no te tirara error. Y sobre el error, de que tamaño es la textura?
ResponderEliminarEl tamaño de la textura es 256,256. El problema cuando añado IOException es que Eclipse me repite que es un error, que no es compatible con SimpleBaseGameActivity y me sugiere eliminarlo.
ResponderEliminarAcabo de empezar con esto de programar en java y con andengine, disculpa que te de la chapa. xD
No tranqui. En algún momento lo descubriremos
ResponderEliminarBuenas amigo , tengo un problema al ejecutar el codigo, me vota esto en consola setWindowSurfaceColorBuffer: bad color buffer handle 0
ResponderEliminarsi me podrias ayudar te lo agradesco
Muy buenas, quiero realizar el mismo sprite. Nose lo que hago mal pero el codigo talcual, cambio columnas y filas dado que mi imagen tiene 6 columnas y 3 filas, quiero que se me haga el sprite animado de 0 a 6 y nose porque cuando ejecuto se me queda en negro la pantalla.
ResponderEliminarEspero tu respuesta, Gracias!