אחיזה והחלקה
שיעור 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: מעגל ניאון
תרגלו בעצמכם: Godot אונליין