GDScript Cheat Sheet: דף עזר מהיר
עודכן לאחרונה
יסודות ופלט
סקריפט מרחיב סוג של צומת, ו-Godot קורא לפונקציות שלו בשבילכם.
| פעולה | תחביר |
|---|---|
| חיבור הסקריפט לסוג צומת | extends Node |
| קוד שרץ כשהצומת מתחיל | func _ready() -> void:
print("Hello, World!") |
| הדפסת ערכים בלי מפריד | print("HP: ", hp) |
| הדפסת ערכים מופרדים ברווחים | prints("a", "b", 3) |
| הערה | # This is a comment |
| הערת תיעוד | ## Shown in the editor's help |
| מחרוזת מרובת שורות | var text := """Line one
Line two""" |
| דיווח על שגיאה | push_error("Health is negative") |
| דיווח על אזהרה | push_warning("Old save file") |
משתנים, קבועים וטיפוסים
טיפוסים הם אופציונליים. הוסיפו אותם כדי לקבל בדיקות בעורך, השלמה אוטומטית וקוד מהיר יותר.
| פעולה | תחביר |
|---|---|
| משתנה (טיפוס דינמי) | var score = 0 |
| משתנה עם טיפוס סטטי | var speed: float = 200.0 |
| הסקת הטיפוס הסטטי | var lives := 3 |
| קבוע | const MAX_HP = 100 |
| Enum | enum State { IDLE, RUN, JUMP } |
| שימוש בערך של enum | var state: State = State.IDLE |
| ערכי וקטור וצבע | var pos := Vector2(10, 20)
var tint := Color(1, 0, 0) |
| הפניה ריקה לאובייקט | var target: Node = null |
| המרה לטקסט, int או float | str(42), int("42"), float("3.5") |
| float ל-int (חותך את השבר) | int(3.9) # 3 |
| בדיקת טיפוס | value is int, node is Sprite2D |
| המרה (cast) לטיפוס | var sprite := node as Sprite2D |
אופרטורים
חשבון מוכר, ומילים באנגלית ללוגיקה.
| פעולה | תחביר |
|---|---|
| חיבור, חיסור, כפל, חילוק | a + b, a - b, a * b, a / b |
| חילוק שלמים (int / int) | 7 / 2 # 3 |
| שארית | 7 % 3, fmod(7.5, 2.0) |
| חזקה | 2 ** 10 # 1024 |
| השמה מורכבת | x += 1, x -= 1, x *= 2, x /= 2 |
| השוואה | ==, !=, <, >, <=, >= |
| לוגיקה | a and b, a or b, not a |
| לוגיקה (בצורת סימנים) | a && b, a || b, !a |
| if בשורה אחת (ביטוי) | var label := "win" if score > 10 else "lose" |
| האם נמצא באוסף | "sword" in inventory |
| פעולות ביטים | a & b, a | b, a ^ b, ~a, a << 1, a >> 1 |
בקרת זרימה
בלוקים נקבעים לפי הזחה, כמו ב-Python. כברירת מחדל Godot מזיח עם טאבים.
| פעולה | תחביר |
|---|---|
| If, elif, else | if hp <= 0:
die()
elif hp < 20:
print("Low HP")
else:
print("OK") |
| if בשורה אחת | if hp <= 0: die() |
| לולאה על טווח | for i in range(5):
print(i) # 0 to 4 |
| טווח עם התחלה, סוף וקפיצה | for i in range(10, 0, -2):
print(i) # 10, 8, 6, 4, 2 |
| חזרה n פעמים | for i in 3:
print(i) # 0, 1, 2 |
| לולאה על מערך | for item in items:
print(item) |
| משתנה לולאה עם טיפוס (Godot 4.2+) | for n: String in names:
print(n.to_upper()) |
| לולאת while | while hp > 0:
hp -= 10 |
| יציאה מלולאה או דילוג על צעד | break, continue |
| placeholder לבלוק ריק | pass |
התאמת תבניות (match)
match מריץ את הענף הראשון שהתבנית שלו מתאימה. אין fallthrough.
| פעולה | תחביר |
|---|---|
| התאמת ערכים | match state:
State.IDLE:
print("idle")
State.RUN:
print("run") |
| כמה ערכים בענף אחד | match key:
"w", "up":
move_up() |
| ענף ברירת מחדל (wildcard) | match n:
0:
print("zero")
_:
print("other") |
| קישור הערך לשם | match cmd:
"quit":
get_tree().quit()
var other:
print("Unknown: ", other) |
| תבנית מערך | match pos:
[0, 0]:
print("origin")
[var x, 0]:
print("on the x axis at ", x) |
| מערך עם כל זנב | match args:
["move", ..]:
print("move command") |
| תבנית מילון | match item:
{"type": "coin", "value": var v}:
gold += v |
| תנאי שמירה עם when (Godot 4.4+) | match score:
var s when s >= 90:
print("A")
var s when s >= 75:
print("B")
_:
print("C") |
פונקציות ולמבדות
גם פונקציות הן ערכים: אפשר לשמור אותן, להעביר אותן ולקשור אליהן ארגומנטים.
| פעולה | תחביר |
|---|---|
| פרמטרים וערך החזרה עם טיפוסים | func add(a: int, b: int) -> int:
return a + b |
| בלי ערך החזרה | func reset() -> void:
score = 0 |
| ארגומנט ברירת מחדל | func greet(who := "player") -> void:
print("Hi, ", who) |
| פונקציה סטטית | static func double(x: int) -> int:
return x * 2 |
| למבדה בשורה אחת | var square := func(x): return x * x |
| קריאה ל-Callable | square.call(4) # 16 |
| פונקציה כערך | var on_done := reset
on_done.call() |
| קשירת ארגומנטים | var add_ten := add.bind(10)
print(add_ten.call(5)) # 15 |
| למבדה מרובת שורות | var greet_all := func(names: Array) -> void:
for n in names:
print("Hi, ", n) |
| המתנה לטיימר | await get_tree().create_timer(1.0).timeout |
| המתנה ל-coroutine | var data = await fetch_data() |
מחרוזות
מתודות של מחרוזות מחזירות מחרוזת חדשה ולעולם לא משנות את המקור.
| פעולה | תחביר |
|---|---|
| עיצוב עם % | "%s has %d HP" % [name, hp] |
| שתי ספרות אחרי הנקודה | "%.2f" % 3.14159 # "3.14" |
| עיצוב עם placeholders בעלי שם | "{a} vs {b}".format({"a": 1, "b": 2}) |
| חיבור עם + | "Score: " + str(score) |
| אורך | text.length() |
| אותיות גדולות או קטנות | text.to_upper(), text.to_lower() |
| פיצול לחלקים | "a,b,c".split(",") # ["a", "b", "c"] |
| איחוד חלקים | ", ".join(["a", "b", "c"]) |
| הסרת רווחים מהקצוות | " hi ".strip_edges() # "hi" |
| החלפת טקסט | text.replace("cat", "dog") |
| מציאת מיקום | text.find("lo") # -1 if missing |
| מתחיל או מסתיים ב | text.begins_with("Hi"), text.ends_with("!") |
| תת-מחרוזת | text.substr(0, 5) |
| מכיל | "ell" in "Hello" # true |
מערכים
מערכים גדלים וקטנים. מערך עם טיפוס מקבל רק את טיפוס האיברים שלו.
| פעולה | תחביר |
|---|---|
| ליטרל מערך (טיפוסים מעורבים) | var items = [1, "two", 3.0] |
| מערך עם טיפוס | var scores: Array[int] = [10, 20, 30] |
| קריאה לפי אינדקס (שלילי סופר מהסוף) | scores[0], scores[-1] |
| הוספה לסוף | scores.append(40), scores.push_back(40) |
| הכנסה באינדקס | scores.insert(0, 5) |
| הסרה והחזרה של האחרון | var last = scores.pop_back() |
| הסרה לפי ערך או לפי אינדקס | scores.erase(20), scores.remove_at(0) |
| מכיל, אינדקס של | scores.has(30), scores.find(30) |
| אורך, בדיקה אם ריק | scores.size(), scores.is_empty() |
| מיון | scores.sort() |
| מיון לפי כלל משלכם | enemies.sort_custom(func(a, b): return a.hp < b.hp) |
| Map | scores.map(func(x): return x * 2) |
| Filter | scores.filter(func(x): return x > 15) |
| Reduce | scores.reduce(func(acc, x): return acc + x, 0) |
| חיתוך (בלי הסוף) | scores.slice(1, 3) |
מילונים
זוגות של מפתח וערך. מפתחות יכולים להיות מכל טיפוס; מחרוזות הן הנפוצות ביותר.
| פעולה | תחביר |
|---|---|
| ליטרל מילון | var stats = {"hp": 100, "mp": 30} |
| מילון עם טיפוס (Godot 4.4+) | var prices: Dictionary[String, int] = {"sword": 50} |
| קריאה או כתיבה של מפתח | stats["hp"], stats["xp"] = 50 |
| קריאה עם ברירת מחדל | stats.get("luck", 0) |
| האם יש מפתח | stats.has("hp"), "hp" in stats |
| הסרת מפתח | stats.erase("mp") |
| מפתחות וערכים | stats.keys(), stats.values() |
| מספר הרשומות | stats.size() |
| מיזוג מילון אחר (true דורס) | stats.merge({"luck": 5}), stats.merge(bonus, true) |
| לולאה על מפתחות | for key in stats:
print(key, " = ", stats[key]) |
מחלקות ואנוטציות
כל סקריפט הוא מחלקה. אנוטציות מתחילות ב-@.
| פעולה | תחביר |
|---|---|
| מתן שם גלובלי למחלקה | class_name Player
extends CharacterBody2D |
| בנאי | func _init(start_hp := 100) -> void:
hp = start_hp |
| יצירת מופע | var p := Player.new() |
| מחלקה פנימית | class Item:
var name := ""
var price := 0 |
| קריאה לגרסת ההורה של המתודה הזו | func _ready() -> void:
super()
print("child ready") |
| קריאה למתודה אחרת של ההורה | super.take_damage(10) |
| משתנה סטטי (Godot 4.1+) | static var count := 0 |
| הצגה ב-Inspector | @export var speed := 300.0 |
| הצגה עם טווח של סליידר | @export_range(0, 100) var volume := 50 |
| קבלת צומת ילד כשהצומת מוכן | @onready var sprite: Sprite2D = $Sprite2D |
| Setter ו-getter | var hp := 100:
set(value):
hp = clampi(value, 0, 100)
get:
return hp |
| הרצת הסקריפט בעורך | @tool |
סיגנלים
סיגנלים הם אזרחים מדרגה ראשונה: מצהירים עליהם, ואז משדרים, מחברים וממתינים להם ישירות.
| פעולה | תחביר |
|---|---|
| הצהרה על סיגנל | signal died |
| סיגנל עם ארגומנטים בעלי טיפוס | signal health_changed(old_hp: int, new_hp: int) |
| שידור (emit) | died.emit() |
| שידור עם ארגומנטים | health_changed.emit(100, 80) |
| חיבור למתודה | player.died.connect(_on_player_died) |
| חיבור למבדה | button.pressed.connect(func(): print("Clicked")) |
| העברת ארגומנטים נוספים | button.pressed.connect(_on_pressed.bind("start")) |
| הפעלה פעם אחת בלבד | timer.timeout.connect(_on_timeout, CONNECT_ONE_SHOT) |
| ניתוק | player.died.disconnect(_on_player_died) |
| בדיקת חיבור | player.died.is_connected(_on_player_died) |
| המתנה לסיגנל | await player.died |
צמתים ומחזור חיים
ה-callbacks ש-Godot קורא להם על הצומת שלכם, והקריאות שאתם מבצעים על עץ הסצנה.
| פעולה | תחביר |
|---|---|
| האובייקט נוצר (לפני העץ) | func _init() -> void:
print("created") |
| הצומת והילדים שלו מוכנים | func _ready() -> void:
print("ready") |
| בכל פריים | func _process(delta: float) -> void:
position.x += 100.0 * delta |
| בכל tick של הפיזיקה | func _physics_process(delta: float) -> void:
velocity.y += 980.0 * delta
move_and_slide() |
| קלט שממשק המשתמש לא ניצל | func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("jump"):
jump() |
| קבלת צומת לפי נתיב | get_node("Sprite2D"), $Sprite2D |
| נתיב עם רווחים, שם ייחודי | $"UI/Health Bar", %HealthBar |
| בדיקת פעולת קלט | Input.is_action_pressed("move_right") |
| יצירת מופע של סצנה | var enemy := preload("res://enemy.tscn").instantiate()
add_child(enemy) |
| מחיקת צומת בבטחה | queue_free() |
| הורה וילדים | get_parent(), get_children() |
| החלפת סצנה | get_tree().change_scene_to_file("res://main.tscn") |
התחביר של GDScript שצריך כשבונים משחק ב-Godot, בעמוד אחד. ה-GDScript cheat sheet הזה הוא דף עזר מהיר ל-Godot 4: משתנים וטיפוסים סטטיים, אופרטורים, בקרת זרימה ו-match, פונקציות ולמבדות, מחרוזות, מערכים ומילונים, מחלקות, סיגנלים, וה-callbacks של צמתים ש-Godot מריץ בכל פריים.
כל מה שכאן הוא תחביר של Godot 4, ולכן תראו @export, @onready, died.emit() ו-await במקום הצורות של Godot 3. העתיקו לסקריפט את מה שצריך, או נסו את קטעי הקוד של השפה בזמן אמת ב-GDScript playground: שימו אותם בתוך _ready() והריצו אותם בדפדפן, בלי להתקין Godot.
שאלות נפוצות על ה-GDScript cheat sheet
האם ה-GDScript cheat sheet הזה בחינם?
האם דף העזר הזה מיועד ל-Godot 4 או ל-Godot 3?
@export ו-@onready במקום מילות המפתח export ו-onready, ב-died.emit() וב-died.connect(callable) במקום emit_signal("died") ו-connect מבוסס מחרוזות, ב-await במקום yield, וב-super() במקום .method(). שורות שמסומנות 4.1+, 4.2+ או 4.4+ דורשות לפחות את גרסת Godot הזו.מה ההבדל בין = ל-:= ב-GDScript?
var x = 5 יוצר משתנה דינמי שיכול להחזיק אחר כך כל טיפוס. var x := 5 מסיק את הטיפוס מהערך (כאן int) ונועל אותו, כך שהשמה של מחרוזת בהמשך היא שגיאה. var x: int = 5 מציין את הטיפוס במפורש. טיפוסים סטטיים נותנים שגיאות כבר בעורך, השלמה אוטומטית טובה יותר וקוד מהיר יותר.איך סיגנלים עובדים ב-GDScript?
signal died, משדרים אותו עם died.emit(), ומגיבים לו מצומת אחר עם player.died.connect(_on_player_died). אפשר לחבר למבדה במקום מתודה, לקשור ארגומנטים נוספים עם .bind(), או לעצור פונקציה עד שהסיגנל מופעל עם await player.died.האם GDScript דומה ל-Python?
for ... in, ב-if/elif/else ובמילים באנגלית כמו and, or ו-not. אבל GDScript היא שפה נפרדת, שנבנתה בשביל Godot. יש בה טיפוסים סטטיים אופציונליים, סיגנלים, אנוטציות כמו @export, וגישה ישירה לצמתים עם $.אפשר לתרגל GDScript אונליין?
_ready() רץ פעם אחת. כשתרצו מסגרת מסודרת, קורס ה-GDScript האינטראקטיבי והחינמי של Coddy לוקח אתכם צעד אחר צעד ממשתנים ופונקציות ועד מחלקות וסיגנלים.