Bueno tengo estos controles por defecto en el jugador.
(https://i.gyazo.com/46c6ce7bc4394b1d2146b30c9ba56f70.gif)
Flechas = movimiento
Z = hablar/continuar dialogo
X = saltar/hablar
C = correr
Quiero crear un Menu que le permita al jugador cambiar los controles de su personaje, algo que funcione así.
(https://i.gyazo.com/fd6d8db072a51889ade0c1fec3fadd4a.gif)
Solo debe ser una pantalla que me permita hacerle este cambio, para que el jugador sea consciente de los cambios.
En código es algo como
objJugador
STEP////////////////////////////////////////////////////////////////////////////
///Desplazamiento
var keyLeft, keyRight, keyDown, keyJump, keyJumpRelease;
keyLeft = -keyboard_check(vk_left);
keyRight = keyboard_check(vk_right);
keyDown = keyboard_check(vk_down);
//keyUp = -keyboard_check(vk_up);
keyJump = keyboard_check_pressed(ord('X'));
keyJumpRelease = keyboard_check_released(ord('X'));
//Inputs de carrera
keyRun = keyboard_check_pressed(ord('C'));
keyRunRelease = keyboard_check_released(ord('C'));
obj_Cartel (Este es el objeto padre de los NPC)
STEP/////////////////////////////////////////////////////
/// Detectar si jugador abre el cartel
if (keyboard_check_pressed(ord('Z')) and distance_to_object(objJugador)<3) {
mostrar = true;
}
// Si se aleja cerramos el cartel y reiniciamos pagina
if (distance_to_object(objJugador)>3) { mostrar = false; pagina = -1; }
/// Detectar si jugador pasa página
if (keyboard_check_pressed(ord('Z')) and mostrar) {
// Pasar página
if (pagina+1 < array_length_1d(paginas)) pagina++;
else {
// Si nos pasamos del máximo reiniciamos el cartel
mostrar = false;
pagina = -1;
}
}
Hay muchas maneras, pero en general se resume en que necesitas guardar las teclas escogidas con archivos externos, y éstas deben ser escogidas por el jugador a través de alguna interfaz.
Por ejemplo, en el evento create de algún controlador que esté presente sólo en las habitaciones de juego, podrías hacer esto:
[gml]
///Create de algún controlador
globalvar teclas;
teclas = ds_map_create();
ini_open("teclas.ini");
teclas[? "player_iz"] = ini_read_real("teclas", "player_iz", ord("A")); //Tecla de movimiento izquierda
teclas[? "player_dr"] = ini_read_real("teclas", "player_dr", ord("D")); //Tecla de movimiento derecha
teclas[? "player_up"] = ini_read_real("teclas", "player_dr", ord("W")); //Tecla de movimiento arriba
ini_close();
[/gml]
Y en el código de movimiento, reemplazarías los códigos de teclas que usas por los cargados del ini.
[gml]
///Evento step del player
keyLeft = -keyboard_check(teclas[? "player_iz"]);
keyRight = keyboard_check(teclas[? "player_dr"]);
keyDown = keyboard_check(teclas[? "player_up"]);
[/gml]
Por lo demás, sería cuestión tuya crear la interfaz y escribir en los valores del ini las teclas que el usuario seleccione.