POO. INGENIERIA EN ANIMACION Y EFECTOS VISUALES. MTRO. MARIO A.GEA P.
PREPARANDO AL JUGADOR.
Elementos base del player.
1.- Seleccionamos el nivel1 y agregamos como hijo un KinematicBody2D, de modo que
nosotros podamos personalizarlo a las necesidades del juego.
2.- Lo nombramos player y lo agregamos al grupo Player.
3.- Dentro el player creamos un hijo que será un sprite que recibirá la imagen del personaje.
Cargamos el sprite con los frames del personaje.
4.- Veamos que ahora tendremos que dividir las imágenes en frames, pero en esta ocasión
nuestro personaje está en horizontal y no en vertical como los ladrillos que pusimos al
mapear. Por lo cual colocamos en Hframes un 7, ya que son los 7 sprites que tenemos.
POO. INGENIERIA EN ANIMACION Y EFECTOS VISUALES. MTRO. MARIO A.GEA P.
5.- Colocaremos el kinnematic un nuevo hijo, por lo cual será un collisionShape2D, lo
ponemos en un shape rectangular y cubrimos a nuestro personaje, esto para que pueda
cubrir a nuestro personaje y lo haga colisionar con los objetos físicos de nuestro escenario.
6.- Movemos un poco el personaje hacia -y, para que aparezca dentro de la escena al
ejecutar.
POO. INGENIERIA EN ANIMACION Y EFECTOS VISUALES. MTRO. MARIO A.GEA P.
Sistema de gravedad.
7.- Creamos nuestro primer script, seleccionamos kinematic y ahí se lo agregamos dando
click derecho, le agregamos el siguiente código.
extends KinematicBody2D
var vel_act = Vector2() // Utilizamos una variable que reciba el valor de Vector2 (X,Y)
var gravedad = 4000 // El valor inicial de la gravedad
func _ready():
pass # Replace with function body.
func _physics_process(delta): // creamos una función, recordemos que la función nos ayuda con operaciones específicas.
vel_act.y = gravedad * delta // la velocidad actual se mueve en y, para obtenerla se hace la operación gravedad por tiempo
move_and_collide(vel_act * delta) // la biblioteca move nos ayudará a generar una correcta colisión entregando la velocidad por el tiempo.
Nota: Varía el valor de gravedad, para que el objeto pueda caer lento o rápido el objeto.
Procesamiento del teclado.
8.- Vamos a configurar las teclas del juego, por lo cual iremos al menú proyecto,
configuración del proyecto, mapa de entrada.
POO. INGENIERIA EN ANIMACION Y EFECTOS VISUALES. MTRO. MARIO A.GEA P.
9.- Colocamos izquierda, derecha, boton_a, boton_b, arriba, abajo.
10.- Frente a cada acción colocaremos la tecla que queremos que tome efecto en el juego.
(Elección del equipo).
11.- Utilizamos este código:
if(Input.is_action_just_pressed("derecha")):
pass
elif(Input.is_action_just_released("derecha")):
pass
elif(Input.is_action_just_pressed("izquierda")):
pass
elif(Input.is_action_just_released("izquierda")):
pass
Estados de movimiento.
12.- Creamos una variable que tenga todos los estados y otra que coloque en su estado
neutro al personaje.
enum estados {ningungo, derecha, izquierda, arriba, abajo}
var estado_actual = estados.ninguno
13.- Nuestras teclas deberán de cambiar de acuerdo a la instrucción dada, izquierda o
derecha y al no presionar la tecla asignada, no deberán de realizar ninguna acción.
if(Input.is_action_just_pressed("derecha")):
estado_actual = estados.derecha
elif(Input.is_action_just_released("derecha")):
estado_actual = estados.ninguno
elif(Input.is_action_just_pressed("izquierda")):
estado_actual = estados.izquierda
elif(Input.is_action_just_released("izquierda")):
estado_actual = estados.ninguno
14.- Creamos una nueva función que tendrá que procesar todas las teclas.
Copiamos el código de procesamiento de teclas a esta nueva función.
func procesar_teclas():
if(Input.is_action_just_pressed("derecha")):
estado_actual = estados.derecha
elif(Input.is_action_just_released("derecha")):
POO. INGENIERIA EN ANIMACION Y EFECTOS VISUALES. MTRO. MARIO A.GEA P.
estado_actual = estados.ninguno
elif(Input.is_action_just_pressed("izquierda")):
estado_actual = estados.izquierda
elif(Input.is_action_just_released("izquierda")):
estado_actual = estados.ninguno
15.- Aún no llamamos a nuestra función “procesar_teclas”, por lo cual lo haremos en la
función _physics, de una vez creamos una nueva función que se llamará
“procesar_movimiento”.
procesar_teclas()
procesar_movimiento()
16.- Creamos una nueva variable que configure la velocidad de movimiento.
export (float) var vel_mov
17.- Creamos la función “procesar movimiento”.
func procesar_movimiento():
if(estado_actual == estados.derecha):
vel_act.x = vel_mov
elif(estado_actual == estados.izquierda):
vel_act.x = -vel_mov
18.- Vemos que al ejecutar nuestro personaje no para, para evitar esto colocaremos una
variable que al terminar de ir de izquierda a derecha, y al entrar al estado ninguno, pase a
ser un 0.
vel_act.x = 0
19.- Nuestro código hasta el momento quedará de la siguiente manera:
extends KinematicBody2D
var vel_act = Vector2()
var gravedad = 8000
export (float) var vel_mov
enum estados {ninguno,derecha, izquierda, arriba, abajo}
var estado_actual = estados.ninguno
func _ready():
pass # Replace with function body.
func _physics_process(delta):
vel_act.y = gravedad * delta
POO. INGENIERIA EN ANIMACION Y EFECTOS VISUALES. MTRO. MARIO A.GEA P.
vel_act.x = 0
procesar_teclas()
procesar_movimiento()
move_and_collide(vel_act * delta)
func procesar_teclas():
if(Input.is_action_just_pressed("derecha")):
estado_actual=estados.derecha
elif(Input.is_action_just_released("derecha")):
estado_actual=estados.ninguno
elif(Input.is_action_just_pressed("izquierda")):
estado_actual=estados.izquierda
elif(Input.is_action_just_released("izquierda")):
estado_actual=estados.ninguno
func procesar_movimiento():
if(estado_actual == estados.derecha):
vel_act.x = vel_mov
elif(estado_actual == estados.izquierda):
vel_act.x = -vel_mov