Menu
CoddyTech

التماسك والانزلاق

الدرس 4 من 20 في دورة لعبة Godot: حلبة النيون على Coddy.

انعطف بحدة وستنزلق السيارة كقرص هوكي: تتجه في اتجاه وتتحرك في اتجاه آخر. الإطارات تمنع ذلك. فهي تسمح للسيارة بالتدحرج إلى الأمام، لا إلى الجانب.

يشير forward.orthogonal() إلى جانب السيارة. قسّم السرعة إلى الجزء الموازي له، ثم أزل معظم ذلك الجزء في كل إطار:

var side := forward.orthogonal()
velocity -= side * velocity.dot(side) * minf(1.0, grip * delta)

عندما تكون قيمة grip هي 7، تتبع السيارة مقدمتها بعد لحظة من الانعطاف، مع انزلاق قصير. كلما انخفضت قيمة التماسك، طال الانزلاق. تضمن minf(1.0, ...) ألا يزيل الإطار أبدًا أكثر من الجزء الجانبي بأكمله.

challenge icon

التحدي

سهل
  1. أضف @export var grip := 7.0.
  2. بعد الانعطاف، أزل السرعة الجانبية كما فعلت أعلاه.
  3. اضغط على «العب» وخذ منعطفًا. جرّب قيمة تماسك مقدارها 2 في Inspector للانزلاق.

جرّب بنفسك

extends Node2D

@export var accel := 260.0
@export var max_speed := 200.0
@export var turn_speed := 3.2
@export var drag := 0.6

var velocity := Vector2.ZERO


func _physics_process(delta: float) -> void:
	var throttle := Input.get_axis("move_down", "move_up")
	var steer := Input.get_axis("move_left", "move_right")

	var forward := Vector2.RIGHT.rotated(rotation)
	var speed := velocity.dot(forward)

	if throttle < 0.0 and speed > 10.0:
		velocity += forward * throttle * accel * 1.6 * delta
	else:
		velocity += forward * throttle * accel * delta
	rotation += steer * turn_speed * delta * clampf(absf(speed) / 90.0, 0.0, 1.0) * signf(speed + 0.01)
	velocity *= 1.0 - drag * delta
	velocity = velocity.limit_length(max_speed)
	position += velocity * delta
	$Exhaust.emitting = throttle > 0.0

جميع دروس لعبة Godot: حلبة النيون

تدرّب بنفسك: Playground لـ Godot