Menu
CoddyTech

Трение

Часть раздела Ввод и перемещение путешествия по 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, останавливает его за несколько кадров.

challenge icon

Задание

Средне

Сделай так, чтобы герой быстро останавливался, когда ты отпускаешь клавишу.

  1. Помести строку move_toward под else:.
  2. Над ней, под 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