Voy a ir, semana a semana, comentando los avances que vayan surgiendo en el desarrollo del juego. Nuevamente, se sigue retrasando el plazo inicial que nos habíamos marcado, a cambio de que cada vez el aspecto va quedando más y más pulido.
Durante esta semana, hemos ido integrando en el juego la segunda escena del mismo. En principio esto era una tarea principalmente para el grafista, y mi trabajo era simplemente ir añadiendo las acciones definidas en los objetos de la nueva escena que no estaban implementadas en la primera (que no son muchas, básicamente que la cámara se desplace por la escena enfocando a uno u otro personaje según éstos vayan ejecutando su script de incialización, que contiene secuencias como que caminen hacia cierta posición o hablen con el protagonista).
En cambio, y como suele pasar siempre (los que seáis programadores seguro que me entendéis perfectamente), las cosas no funcionaron a la primera. Al cargar la escena, el programa abortaba, y me pase prácticamente todo un día depurando a paso a paso la ejecución del cambio de escena a ver dónde se encontraba el problema. Se trataba del código que nos traslada de un nivel a otro, que en cuanto encontraba la instrucción de cargar la nueva escena en el script de acciones la cargaba sin esperar a que la anterior terminase de ejecutar su ciclo actual. Se solucionó guardando la instrucción de carga de escena y realizándola cuando la anterior terminase de ejecutarse, descargándose así limpiamente y sin corromper regiones de memoria.
Otro problema era la rutina de dibujado de personajes, que funcionaba correctamente para el primer nivel, pero no en el segundo. Tras una horas de trabajo, he conseguido llegar a una rutina que parece ordenar correctamente el dibujo de los objetos en función de su posición (teniendo en cuenta la perspectiva del juego, hay que tener en cuenta no sólo su profundidad en el escenario, si no también su altura y la distancia al centro del mapa).
También habíamos definido la escala de los personajes dependiendo de su profundidad en el mapa de una forma fija (60% en el fondo, 100% en el frente). Esta escala funcionaba bien en la habitación donde comienza el juego, pero no en la entrada a la excavación. Así que ahora en los datos de cada nivel hemos añadido información de la escala de los personajes según estés en el fondo o en el primer plano, para que funcione mejor con la perspectiva de cada escena.
Hubo otro fallo que me desesperó bastante, y es que la rueda de selección de acciones que aparece al tocar un personaje u objeto se dibujaba bien en el emulador, pero colgaba el programa al usarlo en el iPhone. Por más que revisaba el código, no parecía que hubiera ninguna razón para que no funcionase, y casi salto por la ventana cuando descubrí de qué se trataba: la optimización de código del compilador destrozaba el código. Parece ser que no se lleva bien con bucles for cuya secuencia de control dependa de más de una variable (en el mío usaba dos). Así que reescribí el bucle que me genera el vector con todos los puntos a dibujar de la rueda haciéndolo dependiente de usa única variable, y ya conseguí que el optimizador me generase el código correcto.
Hicimos algún cambio más a esta rueda de selección, como redibujar los iconos y hacerlos mucho más grandes.
Así que he pasado la semana corrigiendo cosas que se daban ya por funcionales (es lo que ocurre cuando sólo las has probado en un único nivel, y al cambiarlo te das cuenta de que no son portables a cada escena), y no haciendo las tareas que tenía definidas para la semana (implementar las acciones que faltan, y el control de selección de frases en conversaciones).
La semana que viene os comentaré los nuevos avances en el desarrollo. Aquí tenéis de momento una captura del fondo (aún sin terminar) de la segunda escena:
No hay comentarios:
Publicar un comentario