Трение
Часть раздела Ввод и перемещение путешествия по Godot на Coddy. Урок 19 из 28.
Большинство игровых персонажей останавливаются быстрее, чем начинают двигаться. Замедление, когда ни одна клавиша не нажата, — это трение.
Чтобы использовать другое значение для остановки, в коде нужны два пути. else задаёт для if второй путь, и выполняется ровно один из двух:
if direction == 0:
velocity.x = move_toward(velocity.x, 0, friction * delta)
else:
velocity.x = move_toward(velocity.x, direction * speed, acceleration * delta)== проверяет, равны ли два значения. Один знак = задаёт значение переменной. Выражение direction == 0 истинно, когда ни одна клавиша не нажата.
При небольшом значении friction, например 300, персонаж скользит как по льду. Большое значение, например 2400, останавливает его за несколько кадров.
Задание
СреднеСделай так, чтобы герой быстро останавливался, когда ты отпускаешь клавишу.
- Помести строку
move_towardподelse:. - Над ней, под
if direction == 0:, замедляйvelocity.xдо0с помощьюfriction * deltaиmove_toward.
Нажми «Играть», побегай и отпусти клавишу: герой немного скользит, а затем останавливается. Затем нажми «Проверить».
Попробуйте сами
extends CharacterBody2D
var speed = 220
var acceleration = 900
var friction = 2400
var gravity = 1000
var jump_velocity = -500
func _physics_process(delta):
velocity.y += gravity * delta
if Input.is_action_just_pressed("jump") and is_on_floor():
velocity.y = jump_velocity
var direction = Input.get_axis("move_left", "move_right")
velocity.x = move_toward(velocity.x, direction * speed, acceleration * delta)
move_and_slide()
Все уроки раздела Ввод и перемещение
Потренируйтесь самостоятельно: Песочница Godot