Menu
CoddyTech

GDScript Cheat Sheet: ściąga z GDScript

Ostatnia aktualizacja

Podstawy i wypisywanie

Skrypt rozszerza typ węzła, a Godot sam wywołuje jego funkcje.

OperacjaSkładnia
Podłącz skrypt do typu węzłaextends Node
Kod uruchamiany przy starcie węzłafunc _ready() -> void: print("Hello, World!")
Wypisz wartości bez separatoraprint("HP: ", hp)
Wypisz wartości oddzielone spacjamiprints("a", "b", 3)
Komentarz# This is a comment
Komentarz dokumentacyjny## Shown in the editor's help
Łańcuch wielowierszowyvar text := """Line one Line two"""
Zgłoś błądpush_error("Health is negative")
Zgłoś ostrzeżeniepush_warning("Old save file")

Zmienne, stałe i typy

Typy są opcjonalne. Dodaj je, by edytor sprawdzał kod, lepiej podpowiadał, a kod działał szybciej.

OperacjaSkładnia
Zmienna (typ dynamiczny)var score = 0
Zmienna z typem statycznymvar speed: float = 200.0
Wywnioskuj typ statycznyvar lives := 3
Stałaconst MAX_HP = 100
Enumenum State { IDLE, RUN, JUMP }
Użyj wartości enumavar state: State = State.IDLE
Wektory i koloryvar pos := Vector2(10, 20) var tint := Color(1, 0, 0)
Pusta referencja do obiektuvar target: Node = null
Konwersja na tekst, int lub floatstr(42), int("42"), float("3.5")
Float na int (obcina część dziesiętną)int(3.9) # 3
Sprawdź typvalue is int, node is Sprite2D
Rzutuj na typvar sprite := node as Sprite2D

Operatory

Znajoma matematyka, a do logiki angielskie słowa.

OperacjaSkładnia
Dodawanie, odejmowanie, mnożenie, dzieleniea + b, a - b, a * b, a / b
Dzielenie całkowite (int / int)7 / 2 # 3
Reszta z dzielenia7 % 3, fmod(7.5, 2.0)
Potęga2 ** 10 # 1024
Przypisanie złożonex += 1, x -= 1, x *= 2, x /= 2
Porównanie==, !=, <, >, <=, >=
Logikaa and b, a or b, not a
Logika (zapis symboliczny)a && b, a || b, !a
If w jednej linii (wyrażenie)var label := "win" if score > 10 else "lose"
Czy jest w kolekcji"sword" in inventory
Operacje bitowea & b, a | b, a ^ b, ~a, a << 1, a >> 1

Sterowanie przepływem

Bloki wyznacza wcięcie, jak w Pythonie. Godot domyślnie wcina tabulatorami.

OperacjaSkładnia
If, elif, elseif hp <= 0: die() elif hp < 20: print("Low HP") else: print("OK")
If w jednej liniiif hp <= 0: die()
Pętla po zakresiefor i in range(5): print(i) # 0 to 4
Zakres z początkiem, końcem i krokiemfor i in range(10, 0, -2): print(i) # 10, 8, 6, 4, 2
Powtórz n razyfor i in 3: print(i) # 0, 1, 2
Pętla po tablicyfor item in items: print(item)
Typowana zmienna pętli (Godot 4.2+)for n: String in names: print(n.to_upper())
Pętla whilewhile hp > 0: hp -= 10
Wyjdź z pętli lub pomiń krokbreak, continue
Pusty blok (placeholder)pass

Dopasowanie wzorców (match)

match wykonuje pierwszą gałąź, której wzorzec pasuje. Nie ma przechodzenia do kolejnej (fallthrough).

OperacjaSkładnia
Dopasuj wartościmatch state: State.IDLE: print("idle") State.RUN: print("run")
Kilka wartości w jednej gałęzimatch key: "w", "up": move_up()
Gałąź domyślna (wildcard)match n: 0: print("zero") _: print("other")
Przypisz wartość do nazwymatch cmd: "quit": get_tree().quit() var other: print("Unknown: ", other)
Wzorzec tablicymatch pos: [0, 0]: print("origin") [var x, 0]: print("on the x axis at ", x)
Tablica z dowolną resztąmatch args: ["move", ..]: print("move command")
Wzorzec słownikamatch item: {"type": "coin", "value": var v}: gold += v
Warunek z when (Godot 4.4+)match score: var s when s >= 90: print("A") var s when s >= 75: print("B") _: print("C")

Funkcje i lambdy

Funkcje też są wartościami: możesz je przechowywać, przekazywać i wiązać z nimi argumenty.

OperacjaSkładnia
Typowane parametry i wartość zwracanafunc add(a: int, b: int) -> int: return a + b
Brak wartości zwracanejfunc reset() -> void: score = 0
Argument domyślnyfunc greet(who := "player") -> void: print("Hi, ", who)
Funkcja statycznastatic func double(x: int) -> int: return x * 2
Lambda w jednej liniivar square := func(x): return x * x
Wywołaj Callablesquare.call(4) # 16
Funkcja jako wartośćvar on_done := reset on_done.call()
Wiązanie argumentówvar add_ten := add.bind(10) print(add_ten.call(5)) # 15
Lambda wielowierszowavar greet_all := func(names: Array) -> void: for n in names: print("Hi, ", n)
Poczekaj na timerawait get_tree().create_timer(1.0).timeout
Poczekaj na korutynęvar data = await fetch_data()

Łańcuchy

Metody łańcuchów zwracają nowy łańcuch i nigdy nie zmieniają oryginału.

OperacjaSkładnia
Formatowanie z %"%s has %d HP" % [name, hp]
Dwa miejsca po przecinku"%.2f" % 3.14159 # "3.14"
Formatowanie z nazwanymi placeholderami"{a} vs {b}".format({"a": 1, "b": 2})
Łączenie przez +"Score: " + str(score)
Długośćtext.length()
Wielkie lub małe literytext.to_upper(), text.to_lower()
Podziel na części"a,b,c".split(",") # ["a", "b", "c"]
Połącz części", ".join(["a", "b", "c"])
Usuń białe znaki" hi ".strip_edges() # "hi"
Zamień teksttext.replace("cat", "dog")
Znajdź pozycjętext.find("lo") # -1 if missing
Zaczyna się lub kończy natext.begins_with("Hi"), text.ends_with("!")
Podłańcuchtext.substr(0, 5)
Zawiera"ell" in "Hello" # true

Tablice

Tablice rosną i się kurczą. Tablica typowana przyjmuje tylko swój typ elementów.

OperacjaSkładnia
Literał tablicy (różne typy)var items = [1, "two", 3.0]
Tablica typowanavar scores: Array[int] = [10, 20, 30]
Odczyt po indeksie (ujemny liczy od końca)scores[0], scores[-1]
Dodaj na końcuscores.append(40), scores.push_back(40)
Wstaw pod indeksemscores.insert(0, 5)
Usuń i zwróć ostatnivar last = scores.pop_back()
Usuń po wartości lub po indeksiescores.erase(20), scores.remove_at(0)
Zawiera, indeks elementuscores.has(30), scores.find(30)
Długość, sprawdzenie pustościscores.size(), scores.is_empty()
Sortujscores.sort()
Sortuj według własnej regułyenemies.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)
Wycinek (bez końca)scores.slice(1, 3)

Słowniki

Pary klucz i wartość. Klucze mogą mieć dowolny typ; najczęściej są to łańcuchy.

OperacjaSkładnia
Literał słownikavar stats = {"hp": 100, "mp": 30}
Słownik typowany (Godot 4.4+)var prices: Dictionary[String, int] = {"sword": 50}
Odczyt lub zapis kluczastats["hp"], stats["xp"] = 50
Odczyt z wartością domyślnąstats.get("luck", 0)
Czy ma kluczstats.has("hp"), "hp" in stats
Usuń kluczstats.erase("mp")
Klucze i wartościstats.keys(), stats.values()
Liczba wpisówstats.size()
Scal inny słownik (true nadpisuje)stats.merge({"luck": 5}), stats.merge(bonus, true)
Pętla po kluczachfor key in stats: print(key, " = ", stats[key])

Klasy i adnotacje

Każdy skrypt jest klasą. Adnotacje zaczynają się od @.

OperacjaSkładnia
Nadaj klasie globalną nazwęclass_name Player extends CharacterBody2D
Konstruktorfunc _init(start_hp := 100) -> void: hp = start_hp
Utwórz instancjęvar p := Player.new()
Klasa wewnętrznaclass Item: var name := "" var price := 0
Wywołaj wersję tej metody z klasy nadrzędnejfunc _ready() -> void: super() print("child ready")
Wywołaj inną metodę klasy nadrzędnejsuper.take_damage(10)
Zmienna statyczna (Godot 4.1+)static var count := 0
Pokaż w Inspektorze@export var speed := 300.0
Pokaż z suwakiem i zakresem@export_range(0, 100) var volume := 50
Pobierz węzeł potomny, gdy jest gotowy@onready var sprite: Sprite2D = $Sprite2D
Setter i gettervar hp := 100: set(value): hp = clampi(value, 0, 100) get: return hp
Uruchamiaj skrypt w edytorze@tool

Sygnały

Sygnały są pełnoprawnymi obiektami: zadeklaruj je, a potem emituj, podłączaj i czekaj na nie bezpośrednio.

OperacjaSkładnia
Zadeklaruj sygnałsignal died
Sygnał z typowanymi argumentamisignal health_changed(old_hp: int, new_hp: int)
Emitujdied.emit()
Emituj z argumentamihealth_changed.emit(100, 80)
Podłącz do metodyplayer.died.connect(_on_player_died)
Podłącz lambdębutton.pressed.connect(func(): print("Clicked"))
Przekaż dodatkowe argumentybutton.pressed.connect(_on_pressed.bind("start"))
Wywołaj tylko raztimer.timeout.connect(_on_timeout, CONNECT_ONE_SHOT)
Odłączplayer.died.disconnect(_on_player_died)
Sprawdź połączenieplayer.died.is_connected(_on_player_died)
Poczekaj na sygnaławait player.died

Węzły i cykl życia

Callbacki, które Godot wywołuje na twoim węźle, i wywołania, które wykonujesz na drzewie sceny.

OperacjaSkładnia
Obiekt utworzony (przed drzewem)func _init() -> void: print("created")
Węzeł i jego dzieci są gotowefunc _ready() -> void: print("ready")
W każdej klatcefunc _process(delta: float) -> void: position.x += 100.0 * delta
W każdym takcie fizykifunc _physics_process(delta: float) -> void: velocity.y += 980.0 * delta move_and_slide()
Wejście nieużyte przez UIfunc _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("jump"): jump()
Pobierz węzeł po ścieżceget_node("Sprite2D"), $Sprite2D
Ścieżka ze spacjami, unikalna nazwa$"UI/Health Bar", %HealthBar
Sprawdź akcję wejściaInput.is_action_pressed("move_right")
Utwórz instancję scenyvar enemy := preload("res://enemy.tscn").instantiate() add_child(enemy)
Bezpiecznie usuń węzełqueue_free()
Rodzic i dzieciget_parent(), get_children()
Zmień scenęget_tree().change_scene_to_file("res://main.tscn")

Składnia GDScript, po którą sięgasz podczas tworzenia gry w Godot, na jednej stronie. Ten GDScript cheat sheet to szybka ściąga dla Godot 4: zmienne i typy statyczne, operatory, sterowanie przepływem i match, funkcje i lambdy, łańcuchy, tablice i słowniki, klasy, sygnały oraz callbacki węzłów, które Godot uruchamia w każdej klatce.

Wszystko tutaj to składnia Godot 4, więc zobaczysz @export, @onready, died.emit() i await zamiast form z Godot 3. Skopiuj to, czego potrzebujesz, do swojego skryptu albo uruchom fragmenty języka w edytorze online GDScript: umieść je w _ready() i uruchom w przeglądarce, bez instalowania Godot.

GDScript cheat sheet: najczęstsze pytania

Czy ta ściąga z GDScript jest darmowa?
Tak. Ta ściąga z GDScript jest całkowicie darmowa i nie wymaga rejestracji. Dodaj ją do zakładek i wracaj, gdy potrzebujesz dokładnej składni sygnału, wzorca match albo metody tablicy.
Czy ta ściąga jest dla Godot 4 czy Godot 3?
Dla Godot 4. Obie wersje różnią się w sposób, który psuje skopiowany kod: Godot 4 używa adnotacji @export i @onready zamiast słów kluczowych export i onready, died.emit() i died.connect(callable) zamiast emit_signal("died") i connect opartego na łańcuchach, await zamiast yield oraz super() zamiast .method(). Wiersze oznaczone 4.1+, 4.2+ lub 4.4+ wymagają co najmniej tej wersji Godot.
Jaka jest różnica między = a := w GDScript?
var x = 5 tworzy zmienną dynamiczną, która później może przechowywać dowolny typ. var x := 5 wnioskuje typ z wartości (tutaj int) i go blokuje, więc późniejsze przypisanie łańcucha to błąd. var x: int = 5 podaje typ jawnie. Typy statyczne dają błędy w edytorze, lepsze podpowiedzi i szybszy kod.
Jak działają sygnały w GDScript?
Zadeklaruj sygnał przez signal died, wyślij go przez died.emit() i reaguj na niego w innym węźle przez player.died.connect(_on_player_died). Zamiast metody możesz podłączyć lambdę, związać dodatkowe argumenty przez .bind() albo wstrzymać funkcję do momentu wywołania sygnału przez await player.died.
Czy GDScript jest podobny do Pythona?
Wygląda podobnie: bloki wyznacza wcięcie, a język używa for ... in, if/elif/else i angielskich słów, takich jak and, or i not. Ale GDScript to osobny język, stworzony dla Godot. Ma opcjonalne typy statyczne, sygnały, adnotacje takie jak @export i bezpośredni dostęp do węzłów przez $.
Czy mogę ćwiczyć GDScript online?
Tak. Otwórz edytor online GDScript, aby uruchamiać fragmenty z tej ściągi w przeglądarce: edytor podłącza twój skrypt do węzła, więc kod w _ready() uruchamia się raz. Jeśli chcesz uczyć się po kolei, darmowy interaktywny kurs GDScript w Coddy krok po kroku prowadzi od zmiennych i funkcji do klas i sygnałów.
Ilustracja języków programowania w Coddy

Naucz się języka GDScript z Coddy

ZACZNIJ