Persistencia en el creation code

Publicado por PaulleXd, Octubre 14, 2018, 05:47:27 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

PaulleXd

 :GMS:Hola, tengo un problema con el creation conde de mis controles para android, al cambiar de room se pierde el creation code de los controles y quisiera saber como solucionarlo.

BssString

#1
Hola PaulleXd

No sé qué hace tu creation code, pero tengo entendido que los objetos persistentes arrastran las variables declaradas a la siguiente room.
Si no te funciona, intenta usar un script en el evento "room_start" o crear el objeto de nuevo.

Saludos

PaulleXd

Cita de: BssString en Octubre 14, 2018, 06:19:15 PM
Hola PaulleXd

No sé qué hace tu creation code, pero tengo entendido que los objetos persistentes arrastran las variables declaradas a la siguiente room.
Si no te funciona, intenta usar un script en el evento "room_start" o crear el objeto de nuevo.

Saludos
Lo que hace es hacer de controles virtuales:
// Crear un arreglo vk_keys[] con las keys en cada Creation Code
event_inherited();
vk_key_set = false;

Step Event:

execute code:

if (!vk_key_set) {
    for(var i=0;i<array_length_1d(vk_keys);i++){
        vk =  virtual_key_add(x,y,sprite_width,sprite_height,vk_keys);
    }
    vk_key_set = true;   
}

he intentado cambiar el valor a true del primer bloque de codigo pero no funciona
tomare tu consejo de crear varios objetos en cada room

BssString

Hola PaulleXd

Ahora entiendo tu problema, pero no entiendo tu código, lo veo algo extraño aunque si te funciona supongo que está bien.
Por defecto, Game Maker elimina las virtual Keys cuando cambias de room, entonces las debes declarar de nuevo.

Sugiero en el "Room End Event" de cada objeto tecla (o del objeto padre, porque así lo correrán los hijos también) colocar:
vk_key_set = false


Eso hará que al entrar en la siguiente room, se ejecute de nuevo el Step Event y se genere un nuevo mapeo de teclas.

Encuentro extraño tu código, porque según yo cada tecla (u objeto en tu caso) debe mapear una posición.
Eso significa que cada objeto debe tener Sólo una tecla asignada y no un array completo.

Lo que yo haría, es asignar la tecla a cada objeto individual (en el Creation Code), porque él arrastrará ese valor al resto de las rooms:
Creation code (o creation event si son objetos hijos diferentes)
key = vk_up

Y en el room_start event le mapeo la posición a la tecla asignada, cada vez que inicies una nueva room, se hará el mapeo de nuevo:
virtual_key_add(x,y,sprite_width,sprite_height,key);

Entonces cada vez que pulses la ubicación de ese objeto, GM lo detecta como si pulsaras la tecla "vk_up".

Aunque repito, si tu código está ok y funciona bien, no muevas nada.

Saludos

PaulleXd

Cita de: BssString en Octubre 14, 2018, 08:34:37 PM
Hola PaulleXd

Ahora entiendo tu problema, pero no entiendo tu código, lo veo algo extraño aunque si te funciona supongo que está bien.
Por defecto, Game Maker elimina las virtual Keys cuando cambias de room, entonces las debes declarar de nuevo.

Sugiero en el "Room End Event" de cada objeto tecla (o del objeto padre, porque así lo correrán los hijos también) colocar:
vk_key_set = false


Eso hará que al entrar en la siguiente room, se ejecute de nuevo el Step Event y se genere un nuevo mapeo de teclas.

Encuentro extraño tu código, porque según yo cada tecla (u objeto en tu caso) debe mapear una posición.
Eso significa que cada objeto debe tener Sólo una tecla asignada y no un array completo.

Lo que yo haría, es asignar la tecla a cada objeto individual (en el Creation Code), porque él arrastrará ese valor al resto de las rooms:
Creation code (o creation event si son objetos hijos diferentes)
key = vk_up

Y en el room_start event le mapeo la posición a la tecla asignada, cada vez que inicies una nueva room, se hará el mapeo de nuevo:
virtual_key_add(x,y,sprite_width,sprite_height,key);

Entonces cada vez que pulses la ubicación de ese objeto, GM lo detecta como si pulsaras la tecla "vk_up".

Aunque repito, si tu código está ok y funciona bien, no muevas nada.

Saludos
Muchisimas gracias, llevaba muchos dias con estre problema y me has ahorrado tener que ponder en cada room los controles, de ecgi cini dices tu en el creation code tengo asignado dependiendo de cual objeto pulses realize la simulacion de presionar una tecla:
vk_keys[0]= vk_left;
vk_keys[1]= vk_up;
este es para mover a la esquina izquierda superior, repito muchisimas gracias

BssString

Hola PaulleXd

Perfecto, ahora entiendo la utilidad del array, que era para mapear 2 o más teclas al mismo botón.
Que bueno que hayas solucionado el problema

Saludos

Powered by EzPortal
SMF spam blocked by CleanTalk