Unos de los problemas que se presentan al programar juegos en 2 dimensiones es que el menú no tiende a ser muy sutil a los cambios y el tiempo que se dedica a este es muy alto siendo solo una presentación con poca complejidad de funcionamiento de las opciones del juego.
Entender un menú es parte fundamental para poder simplificarlo y hacerlo fácil de modificar y es por eso que dividiremos el menú en las siguiente partes: botones, eventos, animación y estética.
Comencemos con la elaboración del menú!
Nota: Este ejemplo y concepto se basa en la utilización de SDL, pero el concepto es manejable en otros métodos de gráficos 2D y lenguajes tanto Top-Down como POO.
1: hacemos un bosquejo de como se verá el menú:
Es un bosquejo, por lo que no lleva detalles de estética y tampoco planeamiento de efectos visuales, por lo que es solo una plantilla base para tenerlo definido, donde luego los detalles se agregan a los códigos correspondientes.
2: identificamos las partes que componen nuestro menú:
- Titulo
- Botón
- Marcador
3: Determinamos si nuestros componentes tienen más componentes dentro:
En el Botón: texto, evento o función y un marcador según la posición del ratón o uso de las teclas.
En el Marcador: Posición de apunte y textura.
4: Determinamos si manejaremos diferentes tamaños de resolución de pantalla y ajustamos la ubicación mediante un algoritmo de posicionamiento intrínseco en el comportamiento del menú.
5: Empezamos la codificación!
Para codificar tendremos lo siguiente:
Si es en un lenguaje POO (C#, C++,python,etc) podremos usar objetos, por lo que es más sencillo crear los componentes, en caso de que sea un lenguaje Top-Down (C, PASCAL,etc), entonces el mecanismo es diferente
En base a un POO como python, se hace de la siguiente manera:
Codificación de Botón
class Boton:
Texto = ""
FuncionLlama = None
#Separacion del boton con los demas objetos.
Posx = 0
Posy = 0
PosxResolucion = 0
PosyResolucion = 0
def __init__(self,texto,funcion,posx,posy):
self.Posx = posx
self.Posy = posy
self.FuncionLlama = funcion
self.Texto = texto
def EjecucionEvento(self):
#Aqui usando el nombre que envio puede llamar la funcion deseada.
#El nombre de la funcion se pasa sin comillas.
#Ejemplo (boton = new Boton('hi',Render,15,15))
#Render sin comillas es el nombre de la función a ejecutar
self.FuncionLlama()
#Al agregar () a la variable la ejecutamos
def NuevaUbicacion(self,x,y):
self.Posx = x
self.Posy = y
def AjusteUbicacionResolucion(self):
#Ajusto la ubicacion del menu con el tamaño de resolucion.
#Las coordenadas de Posx y Posy solo son la separación entre Botones.
print "Aqui se busca ajustar las coordenadas"
def Render(self):
#Aqui va el algoritmo de renderizado
print "Mi algoritmo renderiza"
Se añaden las características deseadas y se ajusta el algoritmo.
Codificación de Marcador
class Marcador:
Textura = None
Posx = 0
Posy = 0
PosxResolucion = 0
PosyResolucion = 0
def __init__(self,x,y):
self.Posx = x
self.Posy = y
def NuevaUbicacion(self,x,y):
self.Posx = x
self.Posy = y
def AjusteUbicacionResolucion(self):
#Ajusto la ubicacion del menu con el tamaño de resolucion.
#Las coordenadas de Posx y Posy solo son la separación entre Botones.
print "Aqui se busca ajustar las coordenadas"
def CambioPosPuntero():
#El puntero se mueve a la opcion de click
print "Aqui se ubica el puntero."
def Render(self):
#Aqui va el algoritmo de renderizado
print "Mi algoritmo renderiza"
Se añaden las características deseadas y se ajusta el algoritmo.
Codificación de Titulo?
La clase titulo no es necesaria, por lo que se puede trabajar con una imagen o tipos de letras y lo manejamos directamente sin necesidad de crear un objeto, a menos de que exista dicha necesidad.
Podemos construir el menú!
Con esto tenemos todos los elementos de nuestro menú y lo que nos falta es adicionarlo en una clase que llamaremos menú o simplemente usaremos esto es un esquema Top-Down. Esto es decisión del programador.
En base quedan algunos algoritmos no mostrados como: detección de resolución, ubicación de elementos en base a la resolución, etc, pero como es un esquema de trabajo para simplificar el menú eso concierne a el programador.
Para lenguajes Top-Down, el esquema no varía, sino que en vez de clases trabajamos con funciones y la forma de instanciar el menú es algo más tediosa y necesita más lineas, pero al fin y al cabo es un menú rápido, sencillo y fácil de modificar.