|
PRGs
|
| >> PRGs >> Cómo redefinir el teclado by Wakroo. |
Una de las características que más a menudo se suele olvidar pero que más necesaria considero es la opción de redefinir el teclado. Muchos juegos traen una serie de teclas por defecto que son las que todos tienen que usar para jugar. A menudo están elegidas de una manera adecuada, pero puede ser que a alguien no le guste o le resulte incómodo. La solución es dar al jugador la opción de escoger sus propias teclas para jugar. Además, resulta muy fácil de hacer.
Lo primero que hay que tener saber para redefinir el teclado es cómo funciona. Cada tecla tiene asignado un valor número. El programa lo único que hace es detectar el código que le viene y reacciona en consecuencia. Por ejemplo, el código de la tecla "a" es el 30, por lo que sería lo mismo poner key(_a) o key(30). Aquí está la clave de todo el misterio.
Una vez que conocemos la naturaleza numérica de las teclas la solución al problema es usar variables a la hora de detectar si el jugador ha pulsado las teclas adecuadas. Si creamos una variable llamada arriba y le damos a esa variable el valor numérico que corresponda a la tecla que queremos. Luego comprobamos si ha sido pulsada con key(arriba). Si en cualquier momento variamos el valor de arriba se cambiará la tecla que responde a esa acción.
Ahora el problema se presenta en qué valores guardar en la variable. Se pueden poner los valores desde programación, pero eso implicaría tener que recompilar el juego cada vez que se cambie la configuración del teclado, además de que tendríamos que pasar el código a la gente. La gente que no se dedique a programar muchas veces ni se molestará en investigar cómo hacer para cambiar las cosas, por muy bueno que sea el juego. Por lo tanto, no es una buena opción. Por lo tanto, habrá que darle la opción al usuario desde el propio programa para que haga los cambios que desee. Bueno, pues montamos el típico menú desde donde hacerlo. Pero, ¿cómo nos las arreglamos para detectar qué tecla ha elegido?
La solución más directa sería poner un IF (key(...)) variable=...; END para cada tecla que podamos elegir. En principio eso significaría muuuuchas líneas de código y sería bastante engorroso. Hay otra solución más elegante: scan_code. Es una variable global predefinida que guarda el código de la última tecla que ha sido pulsada. Por lo tanto, comprobando su valor podríamos saber qué tecla ha elegido el jugador y asignarla a la variable. De esta manera, con poco código tendremos la posibilidad de elegir cualquier tecla.
Naturalmente, se pueden usar truquillos como usar arrays o structs en vez de variables sueltas para guardar los códigos de las teclas, pero eso ya es una cuestión a parte. El método de todas formas tiene una pega: el uso de scan_code es más lento que usar la función key(). Por lo tanto, no es adecuado para usarlo en tiempo real. En el menú no importa mucho si hay que darle un par de veces para que se entere de la tecla, pero si intentas dar ese salto que te va a llevar a la salvación y el ordenador se niega a responder a nuestra órdenes con presteza... Creo que me entendéis.
Hasta aquí ha llegado este artículo. A grandes rasgos es lo mismo que pusieron Coptroner, Xavi y Titonus en el post del foro de Fenix, pero simplificado al máximo. Como siempre, para cualquier duda, sugerencia, petición o consulta escribidme un mail a lordwakroo@yahoo.es. Un saludo y que la Fuerza os acompañe.