Что делать, если персонаж прекратил движение?

Как можно изменить код, чтобы персонаж сохранял позицию после отпускания клавиши передвижения вместо возвращения в нулевую точку? Проблема заключается в том, что персонаж сдвигается на одну координату при нажатии клавиши и возвращается в нулевую точку после ее отпускания. Вот часть кода на основе официальной документации Godot Engine: [ссылка на код].
  • 26 августа 2024 г. 12:54
Ответы на вопрос 2
Для того чтобы персонаж сохранял позицию после отпускания клавиши, можно изменить код таким образом, чтобы персонаж оставался на последней позиции, на которую был перемещен при нажатии клавиши. 

Вам нужно добавить переменные для хранения текущей позиции персонажа перед изменением его позиции при нажатии клавиши. Затем, после отпускания клавиши, вы можете установить позицию персонажа равной последней сохраненной позиции. 

Вот пример кода:

```
extends KinematicBody2D

var velocity = Vector2()
var last_position = Vector2()

func _process(delta):
    last_position = position
    
    if Input.is_action_pressed("ui_right"):
        velocity.x = 1
    elif Input.is_action_pressed("ui_left"):
        velocity.x = -1
    else:
        velocity.x = 0
        
    if Input.is_action_pressed("ui_down"):
        velocity.y = 1
    elif Input.is_action_pressed("ui_up"):
        velocity.y = -1
    else:
        velocity.y = 0
        
    velocity = velocity.normalized() * 100
    move_and_slide(velocity)
    
func _input(event):
    if event.type == InputEvent.KEY:
        if not event.pressed:
            position = last_position
```

В этом примере кода переменная `last_position` хранит последнюю позицию персонажа перед его перемещением. После отпускания клавиши, позиция персонажа устанавливается равной `last_position`, тем самым возвращая персонажа на последнюю сохраненную позицию.
Вот тут у вас позиция просто обнуляется: 
position = velocity * delta
Правильно:
position += velocity * delta
Похожие вопросы