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.
| İşlem | Söz dizimi |
|---|---|
| Betiği bir node tipine bağlama | extends Node |
| Node başladığında çalışan kod | func _ready() -> void:
print("Hello, World!") |
| Değerleri ayırıcı olmadan yazdırma | print("HP: ", hp) |
| Değerleri boşlukla ayırarak yazdırma | prints("a", "b", 3) |
| Yorum | # This is a comment |
| Belgeleme yorumu | ## Shown in the editor's help |
| Çok satırlı dize | var text := """Line one
Line two""" |
| Hata bildirme | push_error("Health is negative") |
| Uyarı bildirme | push_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.
| İşlem | Söz dizimi |
|---|---|
| Değişken (dinamik tip) | var score = 0 |
| Statik tipli değişken | var speed: float = 200.0 |
| Statik tipi çıkarsama | var lives := 3 |
| Sabit | const MAX_HP = 100 |
| Enum | enum State { IDLE, RUN, JUMP } |
| Enum değeri kullanma | var state: State = State.IDLE |
| Vektör ve renk değerleri | var 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ürme | str(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.
| İşlem | Söz dizimi |
|---|---|
| Toplama, çıkarma, çarpma, bölme | a + b, a - b, a * b, a / b |
| Tam sayı bölmesi (int / int) | 7 / 2 # 3 |
| Kalan | 7 % 3, fmod(7.5, 2.0) |
| Üs alma | 2 ** 10 # 1024 |
| Bileşik atama | x += 1, x -= 1, x *= 2, x /= 2 |
| Karşılaştırma | ==, !=, <, >, <=, >= |
| Mantık | a and b, a or b, not a |
| Mantık (sembol biçimi) | a && b, a || b, !a |
| Satır içi if | var label := "win" if score > 10 else "lose" |
| Bir koleksiyonda var mı | "sword" in inventory |
| Bit düzeyinde işlemler | a & 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.
| İşlem | Söz dizimi |
|---|---|
| If, elif, else | if hp <= 0:
die()
elif hp < 20:
print("Low HP")
else:
print("OK") |
| Tek satırlık if | if 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ık | for i in range(10, 0, -2):
print(i) # 10, 8, 6, 4, 2 |
| n kez tekrarlama | for 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ı atlama | break, continue |
| Boş blok yer tutucusu | pass |
Desen eşleştirme (match)
match, deseni uyan ilk dalı çalıştırır. Bir sonraki dala geçiş (fallthrough) yoktur.
| İşlem | Söz dizimi |
|---|---|
| Değerleri eşleştirme | match state:
State.IDLE:
print("idle")
State.RUN:
print("run") |
| Tek dalda birkaç değer | match key:
"w", "up":
move_up() |
| Varsayılan dal (joker) | match n:
0:
print("zero")
_:
print("other") |
| Değeri bir isme bağlama | match cmd:
"quit":
get_tree().quit()
var other:
print("Unknown: ", other) |
| Dizi deseni | match pos:
[0, 0]:
print("origin")
[var x, 0]:
print("on the x axis at ", x) |
| Kuyruğu serbest dizi | match args:
["move", ..]:
print("move command") |
| Sözlük deseni | match 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.
| İşlem | Söz dizimi |
|---|---|
| Tipli parametreler ve dönüş | func add(a: int, b: int) -> int:
return a + b |
| Dönüş değeri yok | func reset() -> void:
score = 0 |
| Varsayılan argüman | func greet(who := "player") -> void:
print("Hi, ", who) |
| Statik fonksiyon | static func double(x: int) -> int:
return x * 2 |
| Tek satırlık lambda | var square := func(x): return x * x |
| Bir Callable'ı çağırma | square.call(4) # 16 |
| Değer olarak fonksiyon | var on_done := reset
on_done.call() |
| Argüman bağlama | var add_ten := add.bind(10)
print(add_ten.call(5)) # 15 |
| Çok satırlı lambda | var greet_all := func(names: Array) -> void:
for n in names:
print("Hi, ", n) |
| Bir zamanlayıcıyı bekleme | await get_tree().create_timer(1.0).timeout |
| Bir eşyordamı bekleme | var data = await fetch_data() |
Dizeler
Dize metotları yeni bir dize döndürür ve orijinali asla değiştirmez.
| İşlem | Sö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) |
| Uzunluk | text.length() |
| Büyük veya küçük harf | text.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ştirme | text.replace("cat", "dog") |
| Konum bulma | text.find("lo") # -1 if missing |
| Şununla başlıyor veya bitiyor mu | text.begins_with("Hi"), text.ends_with("!") |
| Alt dize | text.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.
| İşlem | Söz dizimi |
|---|---|
| Dizi değişmezi (karışık tipler) | var items = [1, "two", 3.0] |
| Tipli dizi | var scores: Array[int] = [10, 20, 30] |
| İndeksle okuma (negatif değer sondan sayar) | scores[0], scores[-1] |
| Sona ekleme | scores.append(40), scores.push_back(40) |
| Bir indekse yerleştirme | scores.insert(0, 5) |
| Sonuncuyu çıkarıp döndürme | var last = scores.pop_back() |
| Değere veya indekse göre silme | scores.erase(20), scores.remove_at(0) |
| İçeriyor mu, indeksi | scores.has(30), scores.find(30) |
| Uzunluk, boşluk kontrolü | scores.size(), scores.is_empty() |
| Sıralama | scores.sort() |
| Kendi kuralınla sıralama | 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) |
| Dilim (bitiş hariç) | scores.slice(1, 3) |
Sözlükler
Anahtar ve değer çiftleri. Anahtarlar her tipte olabilir, en yaygını dizelerdir.
| İşlem | Söz dizimi |
|---|---|
| Sözlük değişmezi | var stats = {"hp": 100, "mp": 30} |
| Tipli sözlük (Godot 4.4+) | var prices: Dictionary[String, int] = {"sword": 50} |
| Bir anahtarı okuma veya yazma | stats["hp"], stats["xp"] = 50 |
| Varsayılan değerle okuma | stats.get("luck", 0) |
| Anahtar var mı | stats.has("hp"), "hp" in stats |
| Anahtar silme | stats.erase("mp") |
| Anahtarlar ve değerler | stats.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.
| İşlem | Söz dizimi |
|---|---|
| Sınıfa global bir ad verme | class_name Player
extends CharacterBody2D |
| Yapıcı (constructor) | func _init(start_hp := 100) -> void:
hp = start_hp |
| Örnek oluşturma | var p := Player.new() |
| İç sınıf | class Item:
var name := ""
var price := 0 |
| Bu metodun üst sınıftaki sürümünü çağırma | func _ready() -> void:
super()
print("child ready") |
| Üst sınıfın başka bir metodunu çağırma | super.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 getter | var 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.
| İşlem | Söz dizimi |
|---|---|
| Sinyal tanımlama | signal died |
| Tipli argümanlı sinyal | signal health_changed(old_hp: int, new_hp: int) |
| Yayınlama | died.emit() |
| Argümanlarla yayınlama | health_changed.emit(100, 80) |
| Bir metoda bağlama | player.died.connect(_on_player_died) |
| Bir lambda bağlama | button.pressed.connect(func(): print("Clicked")) |
| Ek argüman aktarma | button.pressed.connect(_on_pressed.bind("start")) |
| Yalnızca bir kez tetikleme | timer.timeout.connect(_on_timeout, CONNECT_ONE_SHOT) |
| Bağlantıyı kesme | player.died.disconnect(_on_player_died) |
| Bağlantıyı kontrol etme | player.died.is_connected(_on_player_died) |
| Bir sinyali bekleme | await 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.
| İşlem | Söz dizimi |
|---|---|
| Nesne oluşturuldu (ağaca girmeden önce) | func _init() -> void:
print("created") |
| Node ve alt node'ları hazır | func _ready() -> void:
print("ready") |
| Her kare | func _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ığı girdi | func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("jump"):
jump() |
| Yola göre node alma | get_node("Sprite2D"), $Sprite2D |
| Boşluklu yol, benzersiz ad | $"UI/Health Bar", %HealthBar |
| Bir girdi eylemini kontrol etme | Input.is_action_pressed("move_right") |
| Bir sahnenin örneğini oluşturma | var enemy := preload("res://enemy.tscn").instantiate()
add_child(enemy) |
| Bir node'u güvenle silme | queue_free() |
| Üst ve alt node'lar | get_parent(), get_children() |
| Sahneyi değiştirme | get_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?
Bu hile sayfası Godot 4 için mi, Godot 3 için mi?
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?
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?
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?
_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.