Menu
CoddyTech

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
Enumenum State { IDLE, RUN, JUMP }
שימוש בערך של enumvar state: State = State.IDLE
ערכי וקטור וצבעvar pos := Vector2(10, 20) var tint := Color(1, 0, 0)
הפניה ריקה לאובייקטvar target: Node = null
המרה לטקסט, int או floatstr(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, elseif 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())
לולאת whilewhile 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
קריאה ל-Callablesquare.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
המתנה ל-coroutinevar 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)
Mapscores.map(func(x): return x * 2)
Filterscores.filter(func(x): return x > 15)
Reducescores.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 ו-gettervar 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?
ל-Godot 4. בין שתי הגרסאות יש הבדלים ששוברים קוד מועתק: ב-Godot 4 משתמשים באנוטציות @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 אונליין?
כן. פתחו את ה-GDScript playground כדי להריץ קטעי קוד מדף העזר הזה בדפדפן: ה-playground מחבר את הסקריפט שלכם לצומת, כך שקוד בתוך _ready() רץ פעם אחת. כשתרצו מסגרת מסודרת, קורס ה-GDScript האינטראקטיבי והחינמי של Coddy לוקח אתכם צעד אחר צעד ממשתנים ופונקציות ועד מחלקות וסיגנלים.
איור של שפות התכנות ב-Coddy

ללמוד GDScript עם Coddy

להתחיל