Поворот Area2D на 90 градусов после нажатия (Годо) - PullRequest
0 голосов
/ 02 марта 2020

Форум Godot для вопросов и ответов не хочет позволять мне задавать мой вопрос, поэтому здесь мы go ^^.

Привет, поэтому я хочу, чтобы при нажатии кнопки со стрелкой вправо мой игрок (Area2D) поворачивается на 90 градусов. Однако это должно происходить не напрямую, а с определенным временем. Оно должно оставаться точно в 0 90 180 270 360 450 ... градусов. При нажатии на левую кнопку он должен двигаться на -90 градусов. В настоящее время у меня есть код:

func _process(delta):
 print($Player.rotation)
 if rotate_to > $Player.get_rotation_degrees():
   $Player.rotate((1 * delta)) ####### $Player.rotate((1 * delta) * speed)
   abc = true
 elif abc == true:
   abc = false
   $Player.set_rotation_degrees(int($Player.get_rotation_degrees())) 
 elif $Player.get_rotation_degrees() >= 360.0:
   $Player.set_rotation_degrees(0)
   rotate_to = 0
 print($Player.get_rotation_degrees())

func _input(event):
  if Input.is_key_pressed(KEY_RIGHT) and not event.is_echo():
    rotate_to += 90

Вот как это работает с идеальным поворотом на 90 градусов. Но как только я хочу увеличить скорость, чтобы она вращалась быстрее, потому что она очень медленная, и прямоугольник ломается. И это уже не прямо с линий.

Может кто-нибудь помочь мне это исправить?

1 Ответ

0 голосов
/ 05 марта 2020

Если вы хотите плавного перехода между двумя значениями, лучше всего использовать узел Tween. Когда вы добавляете узел Tween в качестве дочернего к узлу игрока, который вы хотите повернуть, и в узле игрока вы используете этот код.

#get child node with name Tween
onready var tween = get_node("Tween")
func _process(delta):
    #test if action is presed and tween node is not running
    if Input.is_action_just_pressed("ui_right") and not tween.is_active():
        tween.interpolate_property(self,"rotation_degrees",rotation_degrees, rotation_degrees + 90,1,Tween.TRANS_LINEAR,Tween.EASE_IN)
        tween.start()
    if Input.is_action_just_pressed("ui_left") and not tween.is_active():
        tween.interpolate_property(self,"rotation_degrees",rotation_degrees, rotation_degrees - 90,1,Tween.TRANS_LINEAR,Tween.EASE_IN)
        tween.start()

Дополнительную информацию вы можете найти в документации Godot https://docs.godotengine.org/en/3.2/classes/class_tween.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...