التماسك والانزلاق
الدرس 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, ...) ألا يزيل الإطار أبدًا أكثر من الجزء الجانبي بأكمله.
التحدي
سهل- أضف
@export var grip := 7.0. - بعد الانعطاف، أزل السرعة الجانبية كما فعلت أعلاه.
- اضغط على «العب» وخذ منعطفًا. جرّب قيمة تماسك مقدارها 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