Si sois fans de juegos de RPG clásicos u otros juegos 'arcade', sabréis que el modo en el que el se mueven los personajes: se mueven de forma alineada a una especie de 'red', un espacio no visible en el que hay casillas, en las que sólo se puede estar en una a la vez.
Para hacer este efecto en Game Maker, necesitaremos muy pocas líneas de código.
·Primero, en el evento create del objeto del jugador, declararemos una variable:
key_nokey=true;
Indicaremos que indica key_nokey más tarde.
·Luego, el evento step, donde pondremos el resto del código, comprobaremos si la tecla de abajo ha sido presionada:
if (keyboard_check(vk_down)) {
}
·Ahora añadiremos el siguiente código:
-La razón por la que cambiamos key_nokey a false la explicaremos más adelante.
-Hemos añadido un if más, que comprobará si el objeto está alineado con una red de casillas de, en este caso, 32 píxeles de alto por 32 de ancho.
Nota: Podéis cambiar las dimensiones de las casillas por las que queráis.
Dentro de dicho if, haremos que el jugador se mueva hacia abajo con una velocidad de 2 píxeles cada fotograma.
Nota: En Game Maker, 0 indica derecha, por lo tanto, 180 indica izquierda, 90 arriba, y 270 abajo.
·Ahora, añadiremos los códigos de movimiento restantes. El código debería ser así:
·Bien, ahora hace falta añadir muy poco. Lo primero es añadir un código para decirle al programa cuándo queramos que el jugador pare de moverse, por que lo que le hemos dicho hasta ahora es que empiece a moverse. Y aquí es donde key_nokey actúa. La función de esta variable es decirle al programa si el jugador está presionando las teclas que activan su valor false, las cuales ya las hemos decidido.
Bien, empecemos añadiendo un código que le diga al programa cuando resetear el valor de key_nokey a true. Podríamos hacerlo con un if statement para el evento de _released de cada tecla, pero todo eso lo resumiremos a un if statement.
-Lo que hemos hecho es decirle al programa que si soltamos la tecla de abajo o la de arriba o la de la derecha o la de la izquierda, key_nokey tenga un valor de true otra vez.
Ahora le diremos al programa cuándo parar a nuestro personaje:
Básicamente, estamos diciendo que si no estamos presionando ninguna de las teclas de dirección (a través de key_nokey), y si el objeto del jugador está alineado a una casilla, se pare.
Y bien, así funciona un movimiento basado en casillas.
Links:
Archivo editable: movimiento_casillas.gmk
if (keyboard_check(vk_down)) { key_nokey=false; if (place_snapped(32,32)) { motion_set(270,2); } }
-La razón por la que cambiamos key_nokey a false la explicaremos más adelante.
-Hemos añadido un if más, que comprobará si el objeto está alineado con una red de casillas de, en este caso, 32 píxeles de alto por 32 de ancho.
Nota: Podéis cambiar las dimensiones de las casillas por las que queráis.
Dentro de dicho if, haremos que el jugador se mueva hacia abajo con una velocidad de 2 píxeles cada fotograma.
Nota: En Game Maker, 0 indica derecha, por lo tanto, 180 indica izquierda, 90 arriba, y 270 abajo.
·Ahora, añadiremos los códigos de movimiento restantes. El código debería ser así:
if (keyboard_check(vk_down)) { key_nokey=false; if (place_snapped(32,32)) { motion_set(270,2); } } if (keyboard_check(vk_up)) {//Arriba key_nokey=false; if (place_snapped(32,32)) { motion_set(90,2); } } if (keyboard_check(vk_left)) {//Izquierda key_nokey=false; if (place_snapped(32,32)) { motion_set(180,2); } } if (keyboard_check(vk_right)) {//Derecha key_nokey=false; if (place_snapped(32,32)) { motion_set(0,2); } }
·Bien, ahora hace falta añadir muy poco. Lo primero es añadir un código para decirle al programa cuándo queramos que el jugador pare de moverse, por que lo que le hemos dicho hasta ahora es que empiece a moverse. Y aquí es donde key_nokey actúa. La función de esta variable es decirle al programa si el jugador está presionando las teclas que activan su valor false, las cuales ya las hemos decidido.
Bien, empecemos añadiendo un código que le diga al programa cuando resetear el valor de key_nokey a true. Podríamos hacerlo con un if statement para el evento de _released de cada tecla, pero todo eso lo resumiremos a un if statement.
if (keyboard_check_released(vk_right) or keyboard_check_released(vk_left) or keyboard_check_released(vk_up) or keyboard_check_released(vk_down)) { key_nokey=true; }
-Lo que hemos hecho es decirle al programa que si soltamos la tecla de abajo o la de arriba o la de la derecha o la de la izquierda, key_nokey tenga un valor de true otra vez.
Ahora le diremos al programa cuándo parar a nuestro personaje:
if (key_nokey=true) { if (place_snapped(32,32)) { motion_set(0,0) } }
Básicamente, estamos diciendo que si no estamos presionando ninguna de las teclas de dirección (a través de key_nokey), y si el objeto del jugador está alineado a una casilla, se pare.
Y bien, así funciona un movimiento basado en casillas.
Links:
Archivo editable: movimiento_casillas.gmk
No hay comentarios:
Publicar un comentario