Menu
CoddyTech

GDScript Hile Sayfası

Son güncelleme

Temeller ve çıktı

Bir betik bir node tipini genişletir ve fonksiyonlarını Godot sizin yerinize çağırır.

İşlemSöz dizimi
Betiği bir node tipine bağlamaextends Node
Node başladığında çalışan kodfunc _ready() -> void: print("Hello, World!")
Değerleri ayırıcı olmadan yazdırmaprint("HP: ", hp)
Değerleri boşlukla ayırarak yazdırmaprints("a", "b", 3)
Yorum# This is a comment
Belgeleme yorumu## Shown in the editor's help
Çok satırlı dizevar text := """Line one Line two"""
Hata bildirmepush_error("Health is negative")
Uyarı bildirmepush_warning("Old save file")

Değişkenler, sabitler ve tipler

Tipler isteğe bağlıdır. Editör denetimleri, otomatik tamamlama ve daha hızlı kod için ekleyin.

İşlemSöz dizimi
Değişken (dinamik tip)var score = 0
Statik tipli değişkenvar speed: float = 200.0
Statik tipi çıkarsamavar lives := 3
Sabitconst MAX_HP = 100
Enumenum State { IDLE, RUN, JUMP }
Enum değeri kullanmavar state: State = State.IDLE
Vektör ve renk değerlerivar pos := Vector2(10, 20) var tint := Color(1, 0, 0)
Boş nesne referansıvar target: Node = null
Metne, int'e veya float'a dönüştürmestr(42), int("42"), float("3.5")
Float'tan int'e (ondalıklar atılır)int(3.9) # 3
Tip kontrolüvalue is int, node is Sprite2D
Bir tipe dönüştürme (cast)var sprite := node as Sprite2D

Operatörler

Tanıdık matematik, mantık için de İngilizce kelimeler.

İşlemSöz dizimi
Toplama, çıkarma, çarpma, bölmea + b, a - b, a * b, a / b
Tam sayı bölmesi (int / int)7 / 2 # 3
Kalan7 % 3, fmod(7.5, 2.0)
Üs alma2 ** 10 # 1024
Bileşik atamax += 1, x -= 1, x *= 2, x /= 2
Karşılaştırma==, !=, <, >, <=, >=
Mantıka and b, a or b, not a
Mantık (sembol biçimi)a && b, a || b, !a
Satır içi ifvar label := "win" if score > 10 else "lose"
Bir koleksiyonda var mı"sword" in inventory
Bit düzeyinde işlemlera & b, a | b, a ^ b, ~a, a << 1, a >> 1

Kontrol akışı

Bloklar Python'daki gibi girintiyle belirlenir. Godot varsayılan olarak sekmeyle girinti yapar.

İşlemSöz dizimi
If, elif, elseif hp <= 0: die() elif hp < 20: print("Low HP") else: print("OK")
Tek satırlık ifif hp <= 0: die()
Bir aralık üzerinde döngüfor i in range(5): print(i) # 0 to 4
Başlangıç, bitiş ve adımlı aralıkfor i in range(10, 0, -2): print(i) # 10, 8, 6, 4, 2
n kez tekrarlamafor i in 3: print(i) # 0, 1, 2
Bir dizi üzerinde döngüfor item in items: print(item)
Tipli döngü değişkeni (Godot 4.2+)for n: String in names: print(n.to_upper())
While döngüsüwhile hp > 0: hp -= 10
Döngüden çıkma veya adımı atlamabreak, continue
Boş blok yer tutucusupass

Desen eşleştirme (match)

match, deseni uyan ilk dalı çalıştırır. Bir sonraki dala geçiş (fallthrough) yoktur.

İşlemSöz dizimi
Değerleri eşleştirmematch state: State.IDLE: print("idle") State.RUN: print("run")
Tek dalda birkaç değermatch key: "w", "up": move_up()
Varsayılan dal (joker)match n: 0: print("zero") _: print("other")
Değeri bir isme bağlamamatch cmd: "quit": get_tree().quit() var other: print("Unknown: ", other)
Dizi desenimatch pos: [0, 0]: print("origin") [var x, 0]: print("on the x axis at ", x)
Kuyruğu serbest dizimatch args: ["move", ..]: print("move command")
Sözlük desenimatch item: {"type": "coin", "value": var v}: gold += v
when ile koşul (Godot 4.4+)match score: var s when s >= 90: print("A") var s when s >= 75: print("B") _: print("C")

Fonksiyonlar ve lambdalar

Fonksiyonlar da birer değerdir: onları saklayabilir, aktarabilir ve onlara argüman bağlayabilirsiniz.

İşlemSöz dizimi
Tipli parametreler ve dönüşfunc add(a: int, b: int) -> int: return a + b
Dönüş değeri yokfunc reset() -> void: score = 0
Varsayılan argümanfunc greet(who := "player") -> void: print("Hi, ", who)
Statik fonksiyonstatic func double(x: int) -> int: return x * 2
Tek satırlık lambdavar square := func(x): return x * x
Bir Callable'ı çağırmasquare.call(4) # 16
Değer olarak fonksiyonvar on_done := reset on_done.call()
Argüman bağlamavar add_ten := add.bind(10) print(add_ten.call(5)) # 15
Çok satırlı lambdavar greet_all := func(names: Array) -> void: for n in names: print("Hi, ", n)
Bir zamanlayıcıyı beklemeawait get_tree().create_timer(1.0).timeout
Bir eşyordamı beklemevar data = await fetch_data()

Dizeler

Dize metotları yeni bir dize döndürür ve orijinali asla değiştirmez.

İşlemSöz dizimi
% ile biçimlendirme"%s has %d HP" % [name, hp]
İki ondalık basamak"%.2f" % 3.14159 # "3.14"
Adlandırılmış yer tutucularla biçimlendirme"{a} vs {b}".format({"a": 1, "b": 2})
+ ile birleştirme"Score: " + str(score)
Uzunluktext.length()
Büyük veya küçük harftext.to_upper(), text.to_lower()
Parçalara ayırma"a,b,c".split(",") # ["a", "b", "c"]
Parçaları birleştirme", ".join(["a", "b", "c"])
Baştaki ve sondaki boşlukları silme" hi ".strip_edges() # "hi"
Metin değiştirmetext.replace("cat", "dog")
Konum bulmatext.find("lo") # -1 if missing
Şununla başlıyor veya bitiyor mutext.begins_with("Hi"), text.ends_with("!")
Alt dizetext.substr(0, 5)
İçeriyor mu"ell" in "Hello" # true

Diziler

Diziler büyüyüp küçülebilir. Tipli bir dizi yalnızca kendi eleman tipini kabul eder.

İşlemSöz dizimi
Dizi değişmezi (karışık tipler)var items = [1, "two", 3.0]
Tipli dizivar scores: Array[int] = [10, 20, 30]
İndeksle okuma (negatif değer sondan sayar)scores[0], scores[-1]
Sona eklemescores.append(40), scores.push_back(40)
Bir indekse yerleştirmescores.insert(0, 5)
Sonuncuyu çıkarıp döndürmevar last = scores.pop_back()
Değere veya indekse göre silmescores.erase(20), scores.remove_at(0)
İçeriyor mu, indeksiscores.has(30), scores.find(30)
Uzunluk, boşluk kontrolüscores.size(), scores.is_empty()
Sıralamascores.sort()
Kendi kuralınla sıralamaenemies.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)
Dilim (bitiş hariç)scores.slice(1, 3)

Sözlükler

Anahtar ve değer çiftleri. Anahtarlar her tipte olabilir, en yaygını dizelerdir.

İşlemSöz dizimi
Sözlük değişmezivar stats = {"hp": 100, "mp": 30}
Tipli sözlük (Godot 4.4+)var prices: Dictionary[String, int] = {"sword": 50}
Bir anahtarı okuma veya yazmastats["hp"], stats["xp"] = 50
Varsayılan değerle okumastats.get("luck", 0)
Anahtar var mıstats.has("hp"), "hp" in stats
Anahtar silmestats.erase("mp")
Anahtarlar ve değerlerstats.keys(), stats.values()
Kayıt sayısıstats.size()
Başka bir sözlüğü birleştirme (true üzerine yazar)stats.merge({"luck": 5}), stats.merge(bonus, true)
Anahtarlar üzerinde döngüfor key in stats: print(key, " = ", stats[key])

Sınıflar ve açıklamalar (annotation)

Her betik bir sınıftır. Açıklamalar @ ile başlar.

İşlemSöz dizimi
Sınıfa global bir ad vermeclass_name Player extends CharacterBody2D
Yapıcı (constructor)func _init(start_hp := 100) -> void: hp = start_hp
Örnek oluşturmavar p := Player.new()
İç sınıfclass Item: var name := "" var price := 0
Bu metodun üst sınıftaki sürümünü çağırmafunc _ready() -> void: super() print("child ready")
Üst sınıfın başka bir metodunu çağırmasuper.take_damage(10)
Statik değişken (Godot 4.1+)static var count := 0
Inspector'da gösterme@export var speed := 300.0
Kaydırıcı aralığıyla gösterme@export_range(0, 100) var volume := 50
Hazır olduğunda bir alt node alma@onready var sprite: Sprite2D = $Sprite2D
Setter ve gettervar hp := 100: set(value): hp = clampi(value, 0, 100) get: return hp
Betiği editörde çalıştırma@tool

Sinyaller

Sinyaller birinci sınıf değerlerdir: onları tanımlayın, sonra doğrudan yayınlayın, bağlayın ve bekleyin.

İşlemSöz dizimi
Sinyal tanımlamasignal died
Tipli argümanlı sinyalsignal health_changed(old_hp: int, new_hp: int)
Yayınlamadied.emit()
Argümanlarla yayınlamahealth_changed.emit(100, 80)
Bir metoda bağlamaplayer.died.connect(_on_player_died)
Bir lambda bağlamabutton.pressed.connect(func(): print("Clicked"))
Ek argüman aktarmabutton.pressed.connect(_on_pressed.bind("start"))
Yalnızca bir kez tetiklemetimer.timeout.connect(_on_timeout, CONNECT_ONE_SHOT)
Bağlantıyı kesmeplayer.died.disconnect(_on_player_died)
Bağlantıyı kontrol etmeplayer.died.is_connected(_on_player_died)
Bir sinyali beklemeawait player.died

Node'lar ve yaşam döngüsü

Godot'nun node'unuzda çağırdığı geri çağrılar ve sizin sahne ağacında yaptığınız çağrılar.

İşlemSöz dizimi
Nesne oluşturuldu (ağaca girmeden önce)func _init() -> void: print("created")
Node ve alt node'ları hazırfunc _ready() -> void: print("ready")
Her karefunc _process(delta: float) -> void: position.x += 100.0 * delta
Her fizik adımıfunc _physics_process(delta: float) -> void: velocity.y += 980.0 * delta move_and_slide()
Arayüzün kullanmadığı girdifunc _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("jump"): jump()
Yola göre node almaget_node("Sprite2D"), $Sprite2D
Boşluklu yol, benzersiz ad$"UI/Health Bar", %HealthBar
Bir girdi eylemini kontrol etmeInput.is_action_pressed("move_right")
Bir sahnenin örneğini oluşturmavar enemy := preload("res://enemy.tscn").instantiate() add_child(enemy)
Bir node'u güvenle silmequeue_free()
Üst ve alt node'larget_parent(), get_children()
Sahneyi değiştirmeget_tree().change_scene_to_file("res://main.tscn")

Godot ile oyun geliştirirken başvurduğunuz GDScript söz dizimi tek sayfada. Bu GDScript hile sayfası, Godot 4 için hızlı bir başvurudur: değişkenler ve statik tipler, operatörler, kontrol akışı ve match, fonksiyonlar ve lambdalar, dizeler, diziler ve sözlükler, sınıflar, sinyaller ve Godot'nun her karede çalıştırdığı node geri çağrıları.

Buradaki her şey Godot 4 söz dizimidir, bu yüzden Godot 3 biçimleri yerine @export, @onready, died.emit() ve await göreceksiniz. İhtiyacınız olanı betiğinize kopyalayın ya da parçaları GDScript playground'da canlı deneyin: onları _ready() içine koyun ve Godot kurmadan tarayıcınızda çalıştırın.

GDScript hile sayfası SSS

Bu GDScript hile sayfası ücretsiz mi?
Evet. Bu GDScript hile sayfası tamamen ücretsizdir ve kayıt gerektirmez. Yer imlerine ekleyin, bir sinyalin, match deseninin ya da dizi metodunun tam söz dizimine ihtiyaç duyduğunuzda geri dönün.
Bu hile sayfası Godot 4 için mi, Godot 3 için mi?
Godot 4 için. İki sürüm, kopyalanan kodu bozacak şekilde farklıdır: Godot 4, export ve onready anahtar kelimeleri yerine @export ve @onready açıklamalarını, emit_signal("died") ve dize tabanlı connect yerine died.emit() ve died.connect(callable) kullanır, ayrıca yield yerine await, .method() yerine super() gelir. 4.1+, 4.2+ veya 4.4+ işaretli satırlar en az o Godot sürümünü gerektirir.
GDScript'te = ile := arasındaki fark nedir?
var x = 5, daha sonra her tipten değer tutabilen dinamik bir değişken oluşturur. var x := 5 tipi değerden çıkarır (burada int) ve sabitler, bu yüzden sonradan bir dize atamak hata olur. var x: int = 5 tipi açıkça belirtir. Statik tipler size editörde hata uyarıları, daha iyi otomatik tamamlama ve daha hızlı kod sağlar.
GDScript'te sinyaller nasıl çalışır?
Bir sinyali signal died ile tanımlayın, died.emit() ile gönderin ve başka bir node'dan player.died.connect(_on_player_died) ile ona tepki verin. Metot yerine bir lambda bağlayabilir, .bind() ile ek argümanlar bağlayabilir ya da bir fonksiyonu await player.died ile sinyal tetiklenene kadar duraklatabilirsiniz.
GDScript Python'a benziyor mu?
Görünüşte benzer: bloklar girintiyle belirlenir ve for ... in, if/elif/else ile and, or ve not gibi İngilizce kelimeler kullanılır. Ama GDScript, Godot için yapılmış ayrı bir dildir. İsteğe bağlı statik tipleri, sinyalleri, @export gibi açıklamaları ve $ ile node'lara doğrudan erişimi vardır.
GDScript'i çevrimiçi pratik edebilir miyim?
Evet. Bu hile sayfasındaki parçaları tarayıcınızda çalıştırmak için GDScript playground'u açın: playground betiğinizi bir node'a bağlar, böylece _ready() içindeki kod bir kez çalışır. Daha düzenli ilerlemek isterseniz, Coddy'nin ücretsiz etkileşimli GDScript kursu sizi değişkenler ve fonksiyonlardan sınıflara ve sinyallere adım adım götürür.
Coddy programlama dilleri çizimi

Coddy ile GDScript öğren

BAŞLA