Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: davicin87 en Octubre 16, 2014, 02:35:41 AM

Título: Controles Tactiles [SOLUCIONADO]
Publicado por: davicin87 en Octubre 16, 2014, 02:35:41 AM
Hola chicos!!

Tengo un problemilla con los controles táctiles.  Resulta que cuando juego en el PC todo esta perfecto pero en el movil la cosa cambia.

Para que se dibujen los "botones" en la pantalla tengo lo siguiente:


- Evento Create:

gui_width=1920
gui_height=1080


- evento Draw GUI:

display_set_gui_size(gui_width,gui_height)

global.vkspace = YoYo_AddVirtualKey( gui_width-204, gui_height-184, 150, 150, (ord("W")) );

global.vkright = YoYo_AddVirtualKey( gui_width-1616, gui_height-184, 150, 150, (ord("D")) );

global.vkleft = YoYo_AddVirtualKey( gui_width-1844, gui_height-184, 150, 150, (ord("A")) );

global.vkenter = YoYo_AddVirtualKey( gui_width-204, gui_height-1040, 75, 75, vk_enter );



draw_sprite(spr_boton_A,-1,gui_width-204, gui_height-184);
draw_sprite(spr_cruceta_derecha,-1,gui_width-1616, gui_height-184);

draw_sprite(spr_cruceta_izquierda,-1,gui_width-1844, gui_height-184);
draw_sprite(spr_pause,-1,gui_width-204, gui_height-1040);




Como veis las teclas de movimiento son "A", "D" y "W" para el salto.
En el móvil al pulsar los botones el personaje hace su movimiento con el cambio de sprite ( por ejemplo correr) pero se queda quieto en el sitio.
Me parece muy extraño porque en el PC anda perfecto....   He probado también a cambiar las teclas por las flechas de dirección Izq, Der y Espacio pero pasa lo mismo...


Alguna solución?

Como siempre, MUCHAS GRACIAS a todos.
Título: Re:Controles Tactiles
Publicado por: Clamud en Octubre 16, 2014, 04:16:58 AM
La función YoYo_AddVirtualKey es muy extraña, es un script? o estás usando alguna extensión?
Título: Re:Controles Tactiles
Publicado por: penumbra en Octubre 16, 2014, 06:27:01 AM
Creo que en las primeras versiones de Studio, había muchas funciones cuyo nombre comenzaban como YoYo_ y por ahí de mediados del 2012 decidieron renombrar funciones, pero aunque en la documentación no se les menciona, las funciones YoYo_ no las desecharon del todo y siguen latentes en GMS, para ofrecer compatibilidad hacia atrás. Yo optaría por usar la función actual que es virtual_key_add()

Otra cosa es que en el código que pusiste, no hay nada que haga que el personaje avance, sólo la declaración de teclas virtuales y el dibujo de sprites (creo que es como un control) en DRAW
Título: Re:Controles Tactiles
Publicado por: Rubenvecino en Octubre 16, 2014, 10:32:23 AM
Buenos días amigo,

Primero de nada, decirte que en tu código veo un par de cosas extrañas.

Tienes asociado el global.vkspace (que teóricamente es la tecla espacio) con la W.
Yo asocio para táctiles siempre las cosas parejas= global.vkspace con la vk_space, o global.vkup con vk_up.

Después separo las funciones.

En el personaje pongo los movimientos asociados a las teclas y con ellas las animaciones:
Movimiento de izquierda= global.vkleft (codigo de movimiento y también el cambio de sprite para ese movimiento)
personaje create:
Key_up = vk_up;
Key_down = vk_down;

Personaje Step:
key_down = keyboard_check(vk_down)
key_up = -keyboard_check(vk_up)
//
if (place_meeting(x+hsp,y,obj_pared))
{
    while(!place_meeting(x+sign(hsp),y,obj_pared))
    {
        x += sign(hsp);
    }
    hsp = 0;
}
x += hsp;


En otro objeto tengo los controles táctiles.
En ese objeto declaro el tamaño de la room, la asociacion de los global.key y donde se encuentran.
En el evento gui del control tactil:
display_set_gui_size(gui_width,gui_height)

global.Key_up = YoYo_AddVirtualKey( gui_width-74, gui_height-74, 64, 64, vk_up );
global.Key_down = YoYo_AddVirtualKey( gui_width-790, gui_height-74, 64, 64, vk_down );


Solo una cosilla, veo que le has puesto una resolución enorme, no se que dispositivo usas, pero un dispositivo que soporte 1920 x 1080 es una animalada.
Yo uso algo más "estandard" 800 x 600

No sé si te valdrá un poco para orientación, pero yo uso algo así y me funciona todo perfecto en varios teléfonos.

Un saludo.
Título: Re:Controles Tactiles
Publicado por: davicin87 en Octubre 16, 2014, 02:34:51 PM
Hola de nuevo!!

Vereis, hace un tiempo estuve trasteando con el game maker, a ver si me salia algo decente por lo que todos los codigos que tenia les iba copiando de varios tutoriales.  Durante un tiempo lo he tenido que dejar por temas personales pero hace unos dias vi un tutorial de movimiento en ingles que me animo a ponerme de nuevo.

La declaracion de movimientos y dibujado del sprite como bien dice penumbra, es lo que tenia de los tutoriales anteriores.
Aunque si es cierto que el movimiento del protagonista nunca me gusto demasiado.

Ahora que tengo otro codigo, (del que tengo que admitir que no tengo ni idea de como funciona)el movimiento es perfecto para mi gusto pero como ya sabeis las teclas de movimiento son "A", "D", "W".  He probao a cambiarlo por las parejas como dice Rubenvecino, es decir a vk_space, vk_left y vk_right, pero sigue dando problemas.

Luego en unas horas ( ahora no estoy en casa) os pongo el codigo que uso para el movimiento, haber si vosotros os aclarais de algo por que yo, como os digo, estoy muy perdido...


Muchas gracias a todos
Título: Re:Controles Tactiles
Publicado por: davicin87 en Octubre 16, 2014, 04:38:53 PM
En el objeto player tengo esto:


Evento Create:

///Setting Player ConVars
hsp = 0;
vsp = 0;
grav = 0.5;
grounded = 0;

//velocidad muñeco

image_speed = 0.3




y en el Evento Step esto:


///Player Movement

//ConVars
key_left = keyboard_check_direct(ord("A"));
key_right = keyboard_check_direct(ord("D"));
key_up = keyboard_check_direct(ord("W"));

//Horizontal Movement
if (key_left) {
    if (hsp > -10) { hsp -=1; }
}
if (key_right) {
    if (hsp < 10) { hsp +=1;}
}

//horizontal Stop
if (!key_left && !key_right) or (key_left && key_right) {
    hsp += (0 - hsp ) * 0.1;
}

//horizontal Collisions -- thanks to shaun Spalding - Youtuber
if place_meeting(x+hsp, y, par_wall) {
    while(!place_meeting(x+sign(hsp), y, par_wall)) x += sign(hsp);
    hsp = 0;
}

//Finalize horizontal
x += hsp;

//Vertical Movement
if (key_up) && (grounded) {
    vsp = -18;
}
//Gravity
vsp += grav;

//Vertical Collisions -- Thanks to Shaun again...
if place_meeting(x, y+vsp, par_wall) {
    while(!place_meeting(x, y+sign(vsp), par_wall)) y += sign(vsp);
    if (sign(vsp) == 1) { grounded = 1; }
    vsp = 0;
}
else { grounded = 0; }

//Finalize Vertical
y += vsp;






en el objeto que hace las veces de suelo tengo la casilla parent marcada con el objeto par_wall.


En cuanto a la resolución de 1920 x 1080 simplemente es por que los sprite son bastante grandes.
Título: Re:Controles Tactiles
Publicado por: davicin87 en Octubre 17, 2014, 12:51:23 AM
Hola de nuevo!!!!!


Acabo de solucionar este problemilla. 

Simplemente he cambiado el  keyboard_check_direct  por  keyboard_check ( a secas)
Ahora funciona perfecto en android.

Muchas gracias por dedicarme vuestro tiempo ;)