Febrero 16, 2019, 05:12:54 AM Ultima modificación: Febrero 16, 2019, 06:02:22 PM por FRostri
Buenos Días, tardes y noches, Tengo un problema, yo quería hacer que mi personaje corriera así que escribí el código "if keyboard_check(vk_shift)
{y = y+4; image_speed = 0.3;}" y poz para hacer que pare puse este código "if keyboard_check(vk_nokey) {image_speed = 0; image_index = 0; speed = 0;}" y poz yo supuse que el sprite iba a para de moverse, pero el caso es que mientras no deje de presionar el shift no se deja de mover el sprite, pero yo quisiera que se deje de mover cuando debas de presionar la tecla de moverse. Y eso es todo, espero que hayan entendido y que alguien me pueda ayudar

Está algo confuso el planteo que haces con tu título y lo que describes.

Primero el evento nokey significa que se activará cuando no haya ninguna tecla pulsada, entonces lógicamente el personaje y su sprite no se detendrá hasta soltar shift (y cualquier otra), así que para estas cosas no es buena idea usar nokey.
¿Exactamente cómo deseas que funcione el correr del personaje? porque en general siempre queremos que siga moviéndose mientras tenemos presionada la tecla para andar. No me queda claro cual es la circunstancia que buscas para que deje de moverse ¿choca contra una pared? ¿tienes que presionar hacia una dirección para que corra hacia allí? ¿quieres que se mueva 4 pixeles hacia abajo sólo una vez, hasta volver a presionar shift?

#2 Febrero 16, 2019, 05:30:19 PM Ultima modificación: Febrero 16, 2019, 05:38:19 PM por FRostri
Primero, perdón por hacer tan confuso este post y respecto a lo q quiero, pues quiero hacer que el personaje corra con las teclas de moverse obvio pero que sea mientras presiono la tecla shift, y que después de presionar la tecla de moverse que se deje de mover el sprite.

Hola,
Has puesto un icono de sprite al post pero lo que preguntas no es sobre sprites si no sobre el codigo, asi que mejor pon el icono de la versión de GM que estas utilizando.
Cita de: Fenris78Si un tema os resulta de interes y veis que hay poca información, la mejor solucion no es quejarse o pedir sin pensar, sino sugerir algo bien planteado o aportarlo vosotros mismos.
Cita de: CalioSomos desarrolladores independientes y, por lo tanto, no tenemos por qué guiarnos por las tendencias del mercado.


Ahora sí creo que entiendo mejor el problema.

Necesitas una forma de detectar que el personaje está en estado de movimiento para que se active la animación de correr, hay varios métodos pero yo el que te recomiendo es que crees una variable que indique cuando nos estamos moviendo:

En el evento create del personaje crea una variable llamada moviendo
[gml]
moviendo = 0;
[/gml]

y en el evento step pones lo siguiente (hice un pequeño ejemplo):
[gml]
moviendo = 0; //por defecto no se está moviendo si no hay ninguna tecla presionada

//Direcciones de movimiento-------------------------
if keyboard_check(vk_left)
{
    x -=5;
    if keyboard_check(vk_shift)
    {
        x -=8;
    }
    moviendo = 1; //ahora sí se está moviendo
}
if keyboard_check(vk_right)
{
    x +=5;
    if keyboard_check(vk_shift)
    {
        x +=8;
    }
    moviendo = 1; //igual
}
if keyboard_check(vk_up)
{
    y -=5;
    if keyboard_check(vk_shift)
    {
        y -=8;
    }
    moviendo = 1; //igual
}
if keyboard_check(vk_down)
{
    y +=5;
    if keyboard_check(vk_shift)
    {
        y +=8;
    }
    moviendo = 1; //igual
}


//Animación al correr-------------------------------
if keyboard_check(vk_shift) and moviendo == 1 //si se presiona shift y está en estado moverse
{
    image_speed = 0.3;
}
else //sino
{
    image_speed = 0; //sprite quieto
    image_index = 0; //opcionalmente volverá al sprite 0 cuando pare la animación
}
[/gml]

Y por las dudas te adjunto el ejemplo que yo mismo hice aquí en el post para que veas como funciona.

En verdad muchas gracias, y perdón por las molestias