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 הזה בחינם?
כן. ה-GDScript cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שצריך את התחביר המדויק של סיגנל, תבנית match או מתודה של מערך.
האם דף העזר הזה מיועד ל-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 לוקח אתכם צעד אחר צעד ממשתנים ופונקציות ועד מחלקות וסיגנלים.