Muy buenas a todos, veréis.. llevo prácticamente un día diseñando un teclado en Android, funcionar funciona a la perfección, el problema es que los sprites se mueven bien y eso solo que no detecta el image_speed, vamos.. en pocas palabras el sprite se mueve pero no hace el efecto de que camina o ataca, es como si image_speed estuviera en 0.
Aquí os dejo el código el cual hace que el personaje se mueva según si pulsas el botón de la derecha o el de la izquierda (botones que están en la pantalla del juego).
key_derecha_android = virtual_key_add(112,224,32,32, vk_right);
key_izquierda_android = -virtual_key_add(48,224,32,32, vk_left);
if keyboard_check(vk_left)
{
if !global.atacando
{
image_xscale = -1;
sprite_index = spr_jugador_movimiento;
x -= global.velocidad;
}
}
else
if keyboard_check(vk_right)
{
if !global.atacando
{
image_xscale = 1;
sprite_index = spr_jugador_movimiento;
x += global.velocidad;
}
}
El código que falla, o no funciona mejor dicho es el de "sprite_index = spr_jugador_movimiento;", este mismo código lo tengo para cuando pruebo el juego en el PC con las teclas A y D (es un juego de plataformas) y funciona a la perfección, el problema ha sido al pasar este código de PC a Android que en vez de utilizar el movimiento con:
key_derecha = keyboard_check(ord("D"));
key_izquierda = -keyboard_check(ord("A"));
Lo hace con virtual_keys como veréis a continuación:
key_derecha_android = virtual_key_add(112,224,32,32, vk_right);
key_izquierda_android = -virtual_key_add(48,224,32,32, vk_left);
Y yo creo que el fallo viene de ahí, pero como bien digo.. solo lo creo. Quizá sea otra cosa.
Por lo demás todo es igual y como he dicho, en PC el personaje camina y se ve como camina realmente y en Android camina, pero sin las subimagenes, vamos.. que se mueve pero no hace el efecto de caminar.
A ver si sabéis decirme que falla porque lo he probado Todo y no lo consigo..
Gracias de antemano! :)
Me gustaría ayudarte, pero antes de entrar a hacer un montón de suposiciones quisiera saber en qué eventos van cada uno de los códigos que pusiste.
Cita de: Guacusio en Diciembre 06, 2015, 02:54:26 PM
Me gustaría ayudarte, pero antes de entrar a hacer un montón de suposiciones quisiera saber en qué eventos van cada uno de los códigos que pusiste.
Es verdad.. que se me ha olvidado ponerlo..
Pues a ver, todos están dentro de "obj_jugador" en un evento step. No hay nada en create ni en otro evento.
Y también he de decir que el código del movimiento en PC era algo diferente, el de Android es un copia y pega cambiando algunas cosas pero por mi experiencia con lo que hay debería ir de sobras, el problema es que el personaje no hace las subimajenes (camina con las piernas rectas).
Gracias por responder, un saludo!
si como dices todo tu codigo esta en step asegurate de que en ninguna parte del codigo tengas algo como esto
[gml]
image_speed=0//detener el sprite
[/gml]
ya estableciendo eso deberias de colocar esto que te pongo aqui identificado con etiqueta
[gml]
key_derecha_android = virtual_key_add(112,224,32,32, vk_right);
key_izquierda_android = -virtual_key_add(48,224,32,32, vk_left);
if keyboard_check(vk_left)
{
if !global.atacando
{
image_xscale = -1;
sprite_index = spr_jugador_movimiento;
x -= global.velocidad;
image_speed=1;//esta es la velocidad con la que se cambiaran las imagenes, 1 significa que ira a un cuadro por step
}
}
else
if keyboard_check(vk_right)
{
if !global.atacando
{
image_xscale = 1;
sprite_index = spr_jugador_movimiento;
x += global.velocidad;
image_speed=1;//otra vez estableces la velocidad con la que se cambiaran las imagenes
}
}[/gml]
de esta manera todo deberia de quedar bien, sin embargo te digo si aun asi no funciona significa que tienes esto:
[gml]
image_speed=0
[/gml]
en alguna parte despues de esta parte del script.
pues si no las hace, añádeselas no? (image_speed) VIGILANDO no haga bucle, al estar en step!!
Cita de: jmbs19 en Diciembre 06, 2015, 07:33:47 PM
si como dices todo tu codigo esta en step asegurate de que en ninguna parte del codigo tengas algo como esto
[gml]
image_speed=0//detener el sprite
[/gml]
ya estableciendo eso deberias de colocar esto que te pongo aqui identificado con etiqueta
[gml]
key_derecha_android = virtual_key_add(112,224,32,32, vk_right);
key_izquierda_android = -virtual_key_add(48,224,32,32, vk_left);
if keyboard_check(vk_left)
{
if !global.atacando
{
image_xscale = -1;
sprite_index = spr_jugador_movimiento;
x -= global.velocidad;
image_speed=1;//esta es la velocidad con la que se cambiaran las imagenes, 1 significa que ira a un cuadro por step
}
}
else
if keyboard_check(vk_right)
{
if !global.atacando
{
image_xscale = 1;
sprite_index = spr_jugador_movimiento;
x += global.velocidad;
image_speed=1;//otra vez estableces la velocidad con la que se cambiaran las imagenes
}
}[/gml]
de esta manera todo deberia de quedar bien, sin embargo te digo si aun asi no funciona significa que tienes esto:
[gml]
image_speed=0
[/gml]
en alguna parte despues de esta parte del script.
Cita de: kostra en Diciembre 06, 2015, 07:48:08 PM
pues si no las hace, añádeselas no? (image_speed) VIGILANDO no haga bucle, al estar en step!!
Por supuesto que ya había probado esa opción, pero nada! jajajaja
Si en verdad parece super sencillo, pero es que no consigo hacer que haga las subimagenes..
En create tengo image_speed = 0.25;, cuando muevo el personaje con las teclas A y D funciona a la perfección, pero con los botones de Android no detecta el image_speed = 0.25 del create, así que yo opte por introducirlo en el código pero que va.. nada, el personaje sigue caminando con las piernas abiertas y ya os digo, que parece una tontería, pero he probado mil cosas y no consigo nada arreglar eso.
Es lo que os digo yo creo que el problema viene del virtual_key, ya que en PC utiliza keyboard_check pero en Android he probado varias combinaciones con el keyboard_check y ninguna me ha funcionado (que no quiero decir que sea imposible, igual soy yo que no se hacerlo), así que tuve que poner si o si virtual_key.
Un saludo!
repito, vigila el bucle del step
if image_speed != 0.25
image_speed = 0.25;
Cita de: zHeMaa en Diciembre 06, 2015, 06:34:24 PM
Pues a ver, todos están dentro de "obj_jugador" en un evento step. No hay nada en create ni en otro evento.
[gml]
key_derecha_android = virtual_key_add(112,224,32,32, vk_right);
key_izquierda_android = -virtual_key_add(48,224,32,32, vk_left);
[/gml]
¿Por qué alguien querría agregar 2 teclas virtuales en cada step? ¿Cuál es el sentido? 'Qué hace el signo - en la segunda función?
Cita de: kostra en Diciembre 06, 2015, 10:54:02 PM
repito, vigila el bucle del step
if image_speed != 0.25
image_speed = 0.25;
Ya ya, lo he tenido en cuenta y nada..
Cita de: penumbra en Diciembre 06, 2015, 11:02:15 PM
Cita de: zHeMaa en Diciembre 06, 2015, 06:34:24 PM
Pues a ver, todos están dentro de "obj_jugador" en un evento step. No hay nada en create ni en otro evento.
[gml]
key_derecha_android = virtual_key_add(112,224,32,32, vk_right);
key_izquierda_android = -virtual_key_add(48,224,32,32, vk_left);
[/gml]
¿Por qué alguien querría agregar 2 teclas virtuales en cada step? ¿Cuál es el sentido? 'Qué hace el signo - en la segunda función?
Pues.. la verdad que es porque el código como he dicho es un "copia y pega" del código que utilizo en PC, solo que en PC es mas complejo, y se ha quedado así.. ahora que lo dices y me lo miro bien tienes razón, no sirve de nada poner esas dos variables de key_derecha_android y key_izquierda_android.
Y sobre la negación en el segundo virtualkey exactamente lo mismo, en PC tenia utilidad, en el código de Android pasa desapercibido, estando la negación o no hace lo mismo (lo acabo de probar).
Después de un rato probando y probando me ha dado por comentar todo el código del movimiento en PC, y me he dado cuenta de que si el código de PC no esta el de Android funciona perfectamente, es decir.. que hay un conflicto el cual ya he detectado.
No había publicado este mensaje y lo había dejado a medias de escribir mientras intentaba solucionarlo y por fin, he visto donde estaba el error.
Al final el codigo ha quedado de esta manera (en Android)
virtual_key_add(112,224,32,32, vk_right);
virtual_key_add(48,224,32,32, vk_left);
if keyboard_check(vk_anykey)
{
if keyboard_check(vk_left)
{
if !global.atacando
{
image_xscale = -1;
sprite_index = spr_jugador_movimiento;
x -= global.velocidad;
image_speed = 0.25;
}
}
else
if keyboard_check(vk_right)
{
if !global.atacando
{
image_xscale = 1;
sprite_index = spr_jugador_movimiento;
x += global.velocidad;
image_speed = 0.25;
}
}
}
else
{
image_speed = 0;
image_index = 0;
}
Gracias igualmente a todos, al menos me habéis echo abrir los ojos y sobretodo corregir algunos errores!
penumbra se refería que las estás añadiendo en cada step, ponlo en create xD