Menu
CoddyTech

Hızlanma Düğmesi

Coddy'nin Godot Oyunu: Neon Pisti kursunda ders 8 / 20.

Bir takviye daha; bu kez zamanlamasını sen ayarlayacaksın. Bir gösterge on saniyede dolar; dolduğunda Enter (veya E) bir saniyelik takviyeyi etkinleştirir ve göstergeyi boşaltır.

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

is_action_just_pressed yalnızca tuşa basıldığı karede true olur, bu yüzden Enter tuşunu basılı tutmak takviyeyi bir kez etkinleştirir. Göstergeyi doldur ve genişliği scale.x olan HUD çubuğunda göster:

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

Görev

Kolay
  1. var boost_charge := 0.0 ekle.
  2. Tuşları okuduktan sonra, yukarıdaki gibi takviyeyi etkinleştir.
  3. Ardından göstergeyi doldur ve çubuğun genişliğini ayarla.
  4. “Oyna”ya bas, çubuğun dolmasını bekle ve düz bir yolda Enter tuşuna bas.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Godot Oyunu: Neon Pisti bölümündeki tüm dersler

Kendi başına pratik yap: Godot playground