[Tutorial] La función refinitiva para botones en pantalla

Started by Futu-block, February 16, 2018, 05:10:54 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Futu-block

Seguro que muchas veces, al hacer el menú de tus juegos o incluso al añadir alguna opción que habría que hacer el jugador es clickar ahí o un tap si se juega en una en una pantalla táctil en el movil te vuelves loco y/o te desanimas porque no tienes la mas mínima idea de como hacerlo o añades cada vez mas un proceso y no te hace mucho tilín porque es de los que piensa que un proceso mas que lo que hace es cargar mas el juego, a pesar de que hoy en dia tenemos procesadores de millones de petabytes de memoria ram y discos duros de millones de veces la ram

¿La solución? No se si es lo perfecto pero yo uso una función, que a base de modificar una vez y otra la he ido mejorando casi sin darme cuen, incluso casi hasta podria salir de lo de función y ponerse este algoritmo dentro de un proceso, pero en mi caso prefiero usarlo como función que cada vez que clicke te diga donde has pulsado

Empecemos:
La clave es dividir la pantalla en los recuadros que necesitemos, a saber que debemos a la hora de diseñar los menus o botones deseados es ceñirnos a esa cuadricula, para que funcione el juego



Un ejemplo claro es la imagen anterior, en una pantalla de 320x240 que es la resolución que suelo usar para mis miniapps y/o juego, dividimos en 20 casillas o botones, cuando se clicka en uno de ellos mostrará el numero correspondiente y solo ni necesitaremos una variable mas, sino nos la dá el ratón al clickar con un codigo tal que asi:

En el proceso donde asignamos la puntuación llamamos a la función y la guardamos en una variable
if (mouse.left) var_provisional = fun_ref(); end
Así al pulsar el boton derecho en algun punto de la pantalla la función nos dirá a que boton corresponde porque consulta la x/y del mismo
En este caso la cuadricula es de 64 de ancho por 60 de alto para que no nos salga medios cuadros con el reparto
Al hacer la llamada a la función pregunta por la x/y del mismo y devuelve el numero de botón pulsado (ya aqui depende que el programador decida animar cada botón)

function fun_ref()     // funcion que convierte las coordenadas del raton en botones
private
    int fila, columna, boton;
begin
    fila = mouse.y/60;
    columna = mouse.x/64;
    boton = (5 * fila) + columna;
    return  (boton);
end


Repasemos la función:
En el momento que se clicka mide las coordenadas del raton, (p. ej: 139x143)
Dividimos entre 60 la altura y dá 2, porque no se tiene en cuenta los decimales (2'38333) y lo guardamos en su variable
Dividimos entre 64 la anchura y dá 2 porque decimales bla bla bla(2'171875) y lo guardamos en su variable
Multiplicamos el valor de la fila por cinco (10) y  sumamos 2 y nos devuelve que hemos pinchado en el botón numero 12

¿y para que sirve todo esto?
Pues por ejemplo para una calculadora:


Disfrutarlo