Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Naitsabes0 en Octubre 30, 2017, 06:37:32 PM

Título: ¿Como creo unas opciones de controles de menú?
Publicado por: Naitsabes0 en Octubre 30, 2017, 06:37:32 PM
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;
    }
}
Título: Re:¿Como creo unas opciones de controles de menú?
Publicado por: bygdle en Octubre 31, 2017, 12:27:27 AM
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.