Menu
CoddyTech

כפתור ההאצה

שיעור 8 מתוך 20 בקורס משחק Godot: מעגל ניאון של Coddy.

עוד הגברה אחת, הפעם את התזמון שלה קובעים אתם. מד מתמלא במשך עשר שניות; כשהוא מלא, לחיצה על Enter (או E) מפעילה הגברה שנמשכת שנייה אחת ומרוקנת אותו.

if Input.is_action_just_pressed("action") and boost_charge >= 1.0:
	boost_charge = 0.0
	boost_time = 1.0

is_action_just_pressed מחזיר true רק בפריים שבו לוחצים על המקש, ולכן החזקת Enter מפעילה אותו פעם אחת. מלאו את המד והציגו אותו בסרגל של HUD, שרוחבו הוא scale.x:

boost_charge = minf(1.0, boost_charge + delta / 10.0)
$"../HUD/Boost".scale.x = boost_charge
challenge icon

אתגר

קל
  1. הוסף var boost_charge := 0.0.
  2. לאחר קריאת המקשים, הפעל את ההאצה כמו למעלה.
  3. לאחר מכן מלא את המד והגדר את רוחב הפס.
  4. לחץ על "שחק", המתן עד שהפס יתמלא ולחץ על Enter בקטע ישר.

נסו בעצמכם

extends Node2D

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

var velocity := Vector2.ZERO
var boost_time := 0.0

@onready var track: Node2D = $"../Track"


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)
	var top := max_speed
	var grip_now := grip
	if boost_time > 0.0:
		boost_time -= delta
		top = max_speed * 1.3
		velocity += forward * accel * delta
	for pad in get_tree().get_nodes_in_group("boost_pads"):
		if position.distance_to(pad.position) < 22.0:
			boost_time = maxf(boost_time, 0.4)
	for oil in get_tree().get_nodes_in_group("oil"):
		if position.distance_to(oil.position) < 20.0:
			grip_now = grip * 0.12
	if not track.is_on_road(position):
		top = max_speed * 0.45
		velocity *= 1.0 - 2.5 * delta

	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)

	var side := forward.orthogonal()
	velocity -= side * velocity.dot(side) * minf(1.0, grip_now * delta)
	velocity *= 1.0 - drag * delta
	if velocity.length() > top:
		velocity = velocity.move_toward(velocity.limit_length(top), accel * 2.0 * delta)
	position += velocity * delta
	$Exhaust.emitting = throttle > 0.0 or boost_time > 0.0
	$Flame.visible = boost_time > 0.0
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה משחק Godot: מעגל ניאון

תרגלו בעצמכם: Godot אונליין