# Control de movimiento del personaje.ifInput.is_action_pressed("ui_right"): position.x += speed * deltaifInput.is_action_pressed("ui_left"): position.x -= speed * deltaifInput.is_action_pressed("ui_down"): position.y += speed * deltaifInput.is_action_pressed("ui_up"): position.y -= speed * delta
# Control de movimiento del personaje.var direction_pressed :Vector2ifInput.is_action_pressed("ui_right"): direction_pressed.x +=1;ifInput.is_action_pressed("ui_left"): direction_pressed.x -=1;ifInput.is_action_pressed("ui_down"): direction_pressed.y +=1;ifInput.is_action_pressed("ui_up"): direction_pressed.y -=1;position += direction_pressed * speed * delta
Normalizar la velocidad de movimiento en diagonal
La distancia recorrida en diagonal no es la misma que en horizontal o vertical.
Por tanto, el elemento se mueve más rápido en diagonal que en horizontal o vertical...
Cuando un elemento se mueve en horizontal o vertical avanza una distancia a una velocidad determinada.
Por ejemplo, con el siguiente código podemos observar la distancia y a qué velocidad se desplaza un elemento en horizontal o en vertical
# Función que aplica el teorema de pitágoras:# (Cateto al cuadrado + Cateto al cuadrado = Hipotenusa).var distancia =sqrt(direction_pressed.x **2+ direction_pressed.y **2)print ("Recorrida distancia de: ", distancia, " a una velocidad de: ", speed * delta)
Como resultado, si el elemento no se está desplazando obtendríamos:
Recorrida distancia de: 0 a una velocidad de: 3.33
Si el elemento se está desplazando en horizontal o en vertical obtendríamos:
Recorrida distancia de: 1 a una velocidad de: 3.33
Y si el elemento se está desplazando en diagonal obtendríamos:
Recorrida distancia de: 1.41 a una velocidad de: 3.33
Por tanto, significa que el elemento se moverá mucho más rápido en diagonal que en horizontal o en vertical.
Para corregir esto, tenemos que normalizar la distancia con la función normalized();
El personaje se ha movido una distancia de: 0.99 a una velocidad de: 3.33
De este modo, si volvemos a probar el movimiento en diagonal observaremos que se desplaza una distancia mucho más ajustada al valor real, haciendo que la velocidad a la que se desplaza sea igual tanto en horizontal, como en vertical, como en diagonal.
Mover un elemento hacia el click del ratón
var speed =200var is_moving =falsevar target_position =Vector2()
# Obtenemos la posición de la pantalla donde se ha hecho click.ifInput.is_action_just_pressed("ui_left_click"): target_position =get_global_mouse_position() is_moving =true;# Función para desplazarse.if is_moving:# Calculamos la dirección a la que se debe desplazar el elemento# para llegar hasta la posición donde se ha realizado el click.var direction = (target_position - position).normalized()# Calculamos la distancia que hay desde el elemento al click.var distance = position.distance_to(target_position)# Si la distancia es mayor que el siguiente movimiento, desplazamos# el elemento en la dirección previamente calculada.if distance > speed * delta: position += direction * speed * delta# Si la distancia es menor, se sobrepasaría la posición donde se ha realizado el# click inicial, por tanto, movemos el elemento a la posición final y terminamos.else: position = target_position is_moving =false