Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: quiero aprender en Junio 14, 2017, 11:14:20 PM

Título: Como activar y desactivar teclas virtuales [Solucionado]
Publicado por: quiero aprender en Junio 14, 2017, 11:14:20 PM
Hola de nuevo.

Tengo un botón que activa y desactiva las teclas virtuales esto para darle comodidad al jugador pero... A la hora de desactivar las teclas virtuales con virtua_key_delete() me funciona de maravilla pero a la hora de crearlas de nuevo no funciona.

Este es el código que tengo:

obj_Boton_activar_y_desactivar_virtualkeys

Create event:
global.activar_l = false;
image_speed = 0;
image_index = 0;

global.Left = virtual_key_add(view_xview[0] + 0, view_yview[0] + 200, 150, 300, vk_left);

global.Right = virtual_key_add(view_xview[0] + 152, view_yview[0] + 200, 150, 300, vk_right);   

global.Up = virtual_key_add(view_xview[0] + 684, view_yview[0] + 290, 180, 200, vk_up);   

global.A = virtual_key_add(view_xview[0] + 502, view_yview[0] + 290, 180, 200, vk_down);


Event left pressed:
if global.activar_l = false
{
    global.activar_l = true
    //global.activar_c = false;
    virtual_key_delete(global.Left)
    virtual_key_delete(global.Right)
    virtual_key_delete(global.Up)
    virtual_key_delete(global.A) 
    //with(obj_controles){instance_destroy();}
    image_index = 1;
    activar_c = false;
}
else
if global.activar_l = true
{
    global.activar_l = false
    activar_c = true;
   
    image_index = 0;
   
   
}


Event Draw GUI:
if activar_c = true
{
global.Left = virtual_key_add(view_xview[0] + 0, view_yview[0] + 200, 150, 300, vk_left);

global.Right = virtual_key_add(view_xview[0] + 152, view_yview[0] + 200, 150, 300, vk_right);   

global.Up = virtual_key_add(view_xview[0] + 684, view_yview[0] + 290, 180, 200, vk_up);   

global.A = virtual_key_add(view_xview[0] + 502, view_yview[0] + 290, 180, 200, vk_down);
}


Lo que hago en el evento create es crear los botones virtuales, establecer la imagen del boton (en cambiar el sprite) y crear una variable llamada activar_c que es para identificar si quiero o no desactivar las virtual keys.

En el evento left pressed del mouse lo que hago es verificar si se activa o no el boton para realizar una accion que es este caso cuando quero desactivar las teclas virtuales las elimino o si las activo cre de nuevo las teclas virtuales y aquí es donde esta el problema pero no se como solucionarlo.

En el evento draw gui lo que hago es volver a crear las teclas virtuales con una variable pero no resulta.

gracias por su respuesta.

Título: Re:Como activar y desactivar teclas virtuales [Solucionado]
Publicado por: quiero aprender en Junio 15, 2017, 06:35:22 PM
Ya lo solucione.
Lo que hice en vez de eliminar las teclas virtuales lo que hice mejor fue desactivar el movimiento en el jugador con una variable y resulto bien.
Título: Re:Como activar y desactivar teclas virtuales
Publicado por: Torrencypower en Junio 15, 2017, 06:39:58 PM
No probé el código, pero diría que el problema es que estás creando las teclas de forma incorrecta, te recomendaría que ésto lo hagas en el evento step en vez del evento de dibujo. El problema sin embargo no es el evento, pareciera ser que tu código se ejecuta infinitas veces, es decir, siempre que "activar_c" sea verdadero se crearan las teclas, pero ésto debería ocurrir una sola vez. Ésto debería ser suficiente para solucionarlo:


if activar_c = true
    {
    global.Left = virtual_key_add(view_xview[0] + 0, view_yview[0] + 200, 150, 300, vk_left);

    global.Right = virtual_key_add(view_xview[0] + 152, view_yview[0] + 200, 150, 300, vk_right);   

    global.Up = virtual_key_add(view_xview[0] + 684, view_yview[0] + 290, 180, 200, vk_up);   

    global.A = virtual_key_add(view_xview[0] + 502, view_yview[0] + 290, 180, 200, vk_down);

    activar_c=false;
    }


Ésto funcionará siempre y cuando setear las variable "activar_c" a falso no elimine nuevamente las teclas obviamente, pero la idea es básicamente esa, que las teclas no se vuelvan a crear si ya existen. Saludos

Veo que lo solucionaste mientras escribía el mensaje, mejor así.