Programación Gráfica Manejo de Estados
Modelación con estados. ¿Por qué nos interesa modelar el videojuego basándonos en estados? Porque es más intuitivo trabajar así. Porque las acciones que realiza un personaje se pueden modelar con estados. Porque las diversas pantallas en el videojuego pueden modelarse con estados. Porque es más sencillo al momento de programar.
Switch Usado cuando se tiene un número finito de valores para una variable. Típicamente usado para el diseño de menús. Típicamente usado para el manejo de estados. (usando enum) switch(tecla) { case W: protagonista->MoverUp(); break; case A: protagonista->MoverLeft(); break; case D: protagonista->MoverRight(); break; case S: protagonista->MoverDown(); break; case ESPACE: protagonista->Disparar() break; case ESC: continuar = false; break; default: break; }
Enum Es un tipo de estructura en la que los literales de los valores que pueden tomar sus objetos se indican explícitamente al definirlas. enum TipoCarta { Pica, Diamante, Trébol, Corazones };
Uso de enumeraciones Una variable de tipo enumerado se define igual que cualquier otra variable: ; TipoCarta tipo; NumeroCarta numero;
Uso de enumeraciones Para la asignación, se debe asignar a la variable cualquiera de los valores de la enumeración: = ; tipo = TipoCarta.Corazones; Numero = NumeroCarta.kaiser;
Máquinas de Estados. Fuente:
Principios Cómo un enemigo decide realizar una acción? Qué lo hace decidir? Podemos definirles estados: –Buscar –Patrullar –Seguir
Máquinas de estados finitos
En un momento determinado estamos en un estado. Si se cumple una condición se salta a otro estado.
Máquinas de estados finitos Estados básicos del loop de un videojuego.
Máquinas de estados finitos Estados de acciones de un enemigo.
Movimiento del Protagonista.
Movimientos Según la asignación del INPUT (teclado, mouse, etc.) se deben asignar movimientos a los diversas acciones que puede hacer el protagonista.
Movimiento de una nave ¿ Qué movimientos puede hacer una nave ?
Movimiento de una nave enum MovType { MOV_NONE, MOV_UP, MOV_RIGHT, MOV_LEFT, MOV_DOWN };
Movimiento de una nave ¿ Y las diagonales ?
Movimiento de una nave enum MovType { MOV_NONE, MOV_UP, MOV_RIGHT, MOV_LEFT, MOV_DOWN, MOV_UP_RIGHT, MOV_UP_LEFT, MOV_DOWN_RIGHT, MOV_DOWN_LEFT };
Cambio de Estado Por lo general, para los movimientos se puede pasar de un estado a otro. Las excepciones surgen cuando se construyen movimientos con la unión de otros movimientos: –Movimientos Diagonales. –Poderes Especiales.
Cambio de Estado
Mover la nave Vemos en qué estado estamos con un switch y realizamos dicha acción.