Sprint 4 - Proyecto Final

Descripción del Proyecto

Para el proyecto final se propuso hacer un fruit ninja en WebGL en 3D. Para soportar 3D quiero modificar la mecánica del juego.

En la versión que planeo crear el jugador se encuentra en un salón. El jugador se puede mover al rededor del salón como si estuviese en un first-person shooter. El objetivo del jugador es prevenir que los objetos (frutas) que estén cayendo del techo toquen el suelo. Para lograr esto el jugador debe desplazarse al rededor del salón e ir pegándole (click) a los objetos que están cayendo. Como en la versión original, el jugador solo puede dejar caer 3 veces un objeto al piso. Así mismo, existen objetos que al destruirse causan que el jugador pierda automáticamente (bombas).

Estado Actual

Luego de haber agregado la mecánica básica del juego en el Sprint 3, en el Sprint 4 me dedique a proveer un mecanismo de puntajes y de perdida al juego. Adicionalmente, me dedique a pulir la implementación con detalles como sombras, y a volver el juego más difícil al agregarle bombas. El código se encuentra aquí. Un demo funcional se puede encontrar acá. La misma página se utiliza para mostrar la versión más actual del código. Se crearon releases en el repositorio de Github para marcar los cambios hechos entre sprints. Este corresponde al release llamado sprint-4.

Código de Interés

Se me dificultó agregarle sombras a los objetos que caían. Cuando le agregué sombras a la tarea, no estaba utilizando proyecciones. Sin embargo, para este juego, fue necesario utilizar proyecciones para poderle dar una idea al usuario de que tan cerca o lejos estaba una fruta de él. Después de muchas pruebas / errores, me di cuenta que para poder cuadrar bien las sombras, era necesario definir una matriz ortogonal. El problema era que esa matriz correspondiera al lugar donde estaba dibujando con la proyección. Finalmente, para resolver el problema, llegue a la siguiente implementación:






El proceso para llegar a la transformación necesaria que tocaba hacerle a la matriz ortogonal para que quedará en un lugar donde generara sombras a TODAS las frutas desde el techo, fue interesante. En vez de hacer el render normal desde la perspectiva del usuario, comencé a hacer el render desde la perspectiva de la luz. Así, pude ir cuadrando los valores del translate y del scale, de tal forma que en algún momento pudiese ver todas las frutas de la habitación a través de ese punto de vista.

Bitácora de Tiempos

Teniendo en cuenta la descripción de las tareas presentadas anteriormente, el tiempo que se dispuso para cada una, y lo que realmente me tomé se muestran a continuación.
  1. Tarea: Agregar la interfaz donde se mostrará el número de vidas y el puntaje del jugador.
    Tiempo Estimado: 1 hora
    Tiempo consumido: 1 hora
  2. Tarea: Generar el puntaje del usuario a partir del número de frutas que ha destruido.
    Tiempo estimado: 30 minutos.
    Tiempo consumido: 20 minutos.
  3. Tarea:  Actualizar el número de vidas restantes del jugador si las frutas tocan el piso.
    Tiempo estimado: 20min
    Tiempo consumido: 20min
  4. Tarea: Generar automáticamente más frutas a medida que transcurre el tiempo.
    Tiempo estimado: 30min
    Tiempo consumido: 35min
  5. Tarea: Generar bombas y acabar el juego cuando el jugador le pegue a una
    Tiempo estimado: 1 hora y 30 minutos
    Tiempo consumido: 1 hora y 30 minutos.
  6. Tarea: Agregarle sombras a todos los objetos que están cayendo
    Tiempo estimado: 3 horas
    Tiempo consumido: 6 horas.

Comentarios

Entradas populares de este blog

Texturas

Ejemplo Processing P5.js