زر التعزيز
الدرس 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التحدي
سهل- أضف
var boost_charge := 0.0. - بعد قراءة المفاتيح، أطلق التعزيز كما سبق.
- ثم املأ المقياس واضبط عرض الشريط.
- اضغط «العب»، وانتظر حتى يمتلئ الشريط، ثم اضغط 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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس لعبة Godot: حلبة النيون
تدرّب بنفسك: Playground لـ Godot