Tema 18. Godot Engine. Exportar variables
En Godot existe una forma sencilla de exportar el valor de las variables que nos permite acceder de una forma más sencilla a través de la barra de propiedades de una clase.
Por ejemplo, el script de nuestro proyecto, hemos declarado una variable
var Velocidad = 200
que define la velocidad de nuestro personaje. Recordemos en temas anteriores cuando programamos el Movimiento Horizontal, la Caída y el salto del personaje donde declarábamos el siguiente código en la función process:
func _process(delta): velocidad.y += 200 * delta if Input.is_action_pressed(«Jump») and is_on_floor(): velocidad.y = -200 if Input.is_action_pressed(«Player_Left»): $AnimationPlayer.play(«Left») velocidad.x = -100 if Input.is_action_pressed(«Player_Right»): $AnimationPlayer.play(«Right») velocidad.x = 100 if !Input.is_action_pressed(«Player_Left») and !Input.is_action_pressed(«Player_Right»): $AnimationPlayer.play(«Idle») velocidad.x = 0 if !is_on_floor(): $AnimationPlayer.play(«Animacion_JUMP») #Personaje saltando move_and_slide(velocidad,Vector2(0,-1)) |
Si queremos mejorar el código y insertar el valor de la variable directamente desde las propiedades de la clase, declararemos las variables con la sentencia export delante:
export var Velocidad = 200
y modificamos los valores fijos de la velocidad en cada asignación:
func _process(delta): velo.y += Velocidad * delta if Input.is_action_pressed(«Jump») and is_on_floor(): velo.y = -Velocidad if Input.is_action_pressed(«Player_Left»): $AnimationPlayer.play(«Left») velo.x = -Velocidad if Input.is_action_pressed(«Player_Right»): $AnimationPlayer.play(«Right») velo.x = Velocidad if !Input.is_action_pressed(«Player_Left») and !Input.is_action_pressed(«Player_Right»): $AnimationPlayer.play(«Idle») velo.x = 0 if !is_on_floor(): $AnimationPlayer.play(«Animacion_JUMP») #Personaje saltando move_and_slide(velo,Vector2(0,-1)) |
Ahora observamos como en las propiedades de la clase Player se muestra la opción de modificar la variable velocidad.
Podemos realizar los mismos cambios para la gravedad, quedando el código así,
export var Velocidad = 200 export var Gravedad = 250 var velo = Vector2() # Called when the node enters the scene tree for the first time. func _ready(): global_position = DataManager.init_position # Called every frame. ‘delta’ is the elapsed time since the previous frame. func _process(delta): velo.y += Gravedad * delta if Input.is_action_pressed(«Jump») and is_on_floor(): velo.y = -Velocidad if Input.is_action_pressed(«Player_Left»): $AnimationPlayer.play(«Left») velo.x = -Velocidad if Input.is_action_pressed(«Player_Right»): $AnimationPlayer.play(«Right») velo.x = Velocidad if !Input.is_action_pressed(«Player_Left») and !Input.is_action_pressed(«Player_Right»): $AnimationPlayer.play(«Idle») velo.x = 0 if !is_on_floor(): $AnimationPlayer.play(«Animacion_JUMP») #Personaje saltando move_and_slide(velo,Vector2(0,-1)) func _on_Area2D_body_entered(body): if body == self: get_tree().reload_current_scene() func _on_CheckArea2D0_body_entered(body): if body == self: DataManager.init_position = body.global_position |
y mostrando las variables para que podamos ajustar su valor desde las propiedades de la clase: