jueves, 25 de abril de 2013

Programando para Android - 2. En marcha

Ya tengo un primer prototipo muy esquemático con el funcionamiento básico.
Está organizado en dos pantallas usando las Screens del libgdx, una de bienvenida y después la del juego en sí. En punto de entrada carga la MainScreen que a su vez carga la GameScreen cuando se toca la pantalla.

En la GameScreen se carga un escenario de una manera que he visto por ahí y me ha parecido muy curiosa y muy útil. Se prepara previamente una imagen de mapa de puntos así:

Y luego el programa lee la imagen y según el color de cada píxel crea cada elemento en el lugar adecuado. Pero no crea el gráfico, solo el objeto. Todo queda flotando en el mundo de las ideas de Platón. Es lo que sería el Modelo en una arquitectura tipo MVC (Modelo-Vista-Controlador). Todas las operaciones, movimientos, interacción, lógica... se calcula en el modelo. Una vez esté preparado hay que renderizarlo, que es la función de la Vista, coger los elementos y representarlos en la pantalla. La idea sería esta:

El controlador en cambio lo he mezclado con el modelo así que es probable que tenga que reorganizar cosas. Aunque tampoco hay tanto que "controlar", no es tan grave.

La Vista (archivo WorldRenderer.java) se encarga de preparar la ventana de la aplicación, apuntar la cámara a la zona que nos interese, poner una imagen de fondo (está desactivado de momento) y representar cada elemento del juego con su imagen correspondiente en la posición adecuada. Aquí pongo un ejemplo en que se recorre toda la lista de bloques (paredes y suelo) y se dibuja una imagen en cada posición:

for(Block bl: world.blocks){
              batch.draw(blockImage, bl.position.x-240, bl.position.y);

}

De momento solo sale el personaje y los bloques. La única interacción es conseguir que el personaje no pueda entrar en las paredes. Esto ha sido un poco lío pero al final parece que va bien. La estrategia es seguir estos pasos:
  1. Mover la componente x del personaje a las bravas.
  2. Comprobar si colisiona con algún bloque.
  3. Si colisiona retrocedemos un poco y volvemos al punto 2.
  4. Lo mismo con la componente y.
Aunque suene lógico y sencillo hay muchas variables en juego y el equilibrio es frágil.

Queda muchísimo camino para que esto pueda ser llamado juego. Al menos el primer paso ya está hecho. Ahora hay que tomar decisiones sobre la jugabilidad, sobre el concepto, el arte, diseño de niveles, secciones, ayuda, música, animaciones, puntuación, vidas, marcador, optimización... y mil cosas más.

Quien quiera probarlo y modificarlo puede seguir los pasos del post anterior. Si solo queréis probarlo podéis ir a esta dirección desde un móvil android: Descargar juego NoWhereGame. Por supuesto lo hacéis bajo vuestra responsabilidad. Esta app puede derretir tu dispositivo y atropellar a tu gato.

El control del personaje de momento consiste en tocar la pantalla por abajo a la derecha o a la izquierda para ir en esa dirección y tocar por arriba para saltar. No se puede parar.

He estado a punto de poner aquí un pantallazo pero si no lo pongo es ligeramente más probable que lo instaléis.

1 comentario:

kpacha dijo...

q curioso lo de la imagen!

lo q tendrás q confirmarme es q la info así ocupa menos (en disco) q descrita en texto... pq me da q no se le podrá pasar ningún compresor (por ejemplo el socorrido jpeg) si quieres mantener la precisión de 1 pixel.

en cambio, sabes q un carácter es un byte (a no ser q te pongas a escribir con kanjis) y un archivo de texto siempre es zipeable...