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 صحيحة إلا في الإطار الذي يُضغط فيه المفتاح، لذا فإن الاستمرار في الضغط على 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: حلبة النيون

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