اسکریپت typed برای Node
نوع صریح، قصد متغیر و خروجی تابع را مستند میکند.
extends Node2D@export var speed: float = 240.0var direction: Vector2 = Vector2.ZEROfunc move_step(delta: float) -> void: position += direction * speed * delta
مرجع GDScript برای تعریف متغیر و تابع، سیگنالها، گرهها و چرخه اجرای Godot. نوع پایهٔ node را درست انتخاب کنید، annotation را برای قراردادهای مهم بنویسید و callbackهای lifecycle را متناسب با نیاز صحنه بهکار ببرید. signal برای ارتباط رویدادمحور و کموابستگی مناسب است. ورودی را در Input Map تعریف کنید و اتصالها را با lifecycle صحنه هماهنگ نگه دارید. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
نوع صریح، قصد متغیر و خروجی تابع را مستند میکند.
extends Node2D@export var speed: float = 240.0var direction: Vector2 = Vector2.ZEROfunc move_step(delta: float) -> void: position += direction * speed * delta_ready برای آمادهسازی یکباره و _process برای بهروزرسانی هر فریم است.
func _ready() -> void: set_process(true)func _process(delta: float) -> void: update_animation(delta)مسیر node و نوع آن را با ساختار scene هماهنگ کنید.
@onready var health_label: Label = $HUD/HealthLabelfunc update_health(value: int) -> void: health_label.text = "HP: %d" % valuesignal اعلان تغییر وضعیت را از جزئیات مصرفکننده جدا میکند.
signal health_changed(current: int, maximum: int)func set_health(value: int) -> void: health = clampi(value, 0, max_health) health_changed.emit(health, max_health)نام action در Project Settings تعریف میشود، نه در کد پراکنده.
func _physics_process(delta: float) -> void: var axis := Input.get_axis("move_left", "move_right") velocity.x = axis * speed move_and_slide()نمونهٔ scene را بسازید و آن را به parent مناسب اضافه کنید.
const PROJECTILE = preload("res://projectile.tscn")func spawn_projectile() -> void: var projectile = PROJECTILE.instantiate() projectile.global_position = global_position get_tree().current_scene.add_child(projectile)برای مجموعههای کوچک و واضح از Array.filter و lambda استفاده کنید.
var living_enemies = enemies.filter( func(enemy): return is_instance_valid(enemy) and enemy.health > 0)await جریان اجرا را تا دریافت signal متوقف میکند.
func show_message() -> void: message_label.show() await get_tree().create_timer(2.0).timeout message_label.hide()پیش از دسترسی به objectی که ممکن است queue_free شده باشد اعتبارش را بررسی کنید.
func apply_effect(target: Node) -> void: if not is_instance_valid(target): return target.call("apply_effect")اسکریپت را با extends Node یا نوع پایه گره موردنیاز آغاز کنید.
متغیر را با var و مقدار ثابت را با const تعریف کنید.
برای استنباط نوع از := و برای annotation صریح از : Type استفاده کنید.
تابع را با func name(): تعریف کنید؛ نامگذاری را با قرارداد پروژه هماهنگ نگه دارید.
گره فرزند را با مسیر مناسب دریافت و پیش از استفاده وجودش را بررسی کنید.
از signal برای ارتباط کموابستگی میان گرهها استفاده کنید.
چرخههای _ready() و _process(delta) را متناسب با نیاز انتخاب کنید.
ورودی را از Input Map بخوانید، نه با کلیدهای پراکنده در منطق بازی.
منابع و nodeهای ساختهشده را در زمان مناسب آزاد یا حذف کنید.
صحنهها را اجرا و مسیرهای null، تغییر صحنه و ورودی را آزمایش کنید.
سیگنالها را برای ارتباط event-driven میان nodeها بهکار ببرید و اتصالها را در چرخهٔ عمر مناسب قطع کنید.
برای nodeهای صحنه از reference امن و بررسی is_instance_valid() هنگام احتمال آزادشدن استفاده کنید.