# Tek satırlık yorumlar, '#' simgesi kullanılarak yazılır. """ Çok satırlı yorumlar üç tırnak kullanılarak yazılır """ # Belge yorumları (Doc Comments) sınıflara ve alanlara açıklama ekleyebilir. # bunlar, motor içi dokümanlarda görüntülenebilir. ## Bu sınıf, GDScript'in bir gösterimidir # Komut dosyası kendi başına bir sınıftır ve isteğe bağlı olarak bunun için bir ad tanımlayabilirsiniz. class_name MyClass # Kalıtım (Inheritance) komut dosyasının bağlı olduğu Node'a göre 'Node2D' kısmı değişkenlik gösterir. extends Node2D # Değişken türleri var x = 8 # int var y = 1.2 # float var b = true # bool var s = "Merhaba Dünya!" # String var a = [1, false, "turuncu kedi"] # Array - Python'daki listeye benzer, # aynı anda farklı tipte # değişkenleri tutabilir. var d = { "key" : "value", 42 : true } # Sözlük anahtar-değer (key-value) çiftlerini tutar. var p_arr = PackedStringArray(["Hey", "selamlar", "!"]) # Paketlenmiş diziler yalnızca # belirli bir türü tutabilir. # Doküman yorumları, özelliklere uygulanabilir. ## Bu değişken nesnenin kaç kez zıpladığını tutar. var jump_count = 0 # Motorda bulunan yerleşik vektör türleri: var v2 = Vector2(1, 2) var v3 = Vector3(1, 2, 3) # Sabitler (Constants) const ANSWER_TO_EVERYTHING = 42 const BREAKFAST = "Sucuklu yumurta!" # Enumlar enum { ZERO, ONE , TWO, THREE } enum NamedEnum { ONE = 1, TWO, THREE } # Dışa aktarılan değişkenler 'inspector' de görünür. # # Editörün hangi seçenekleri vereceğini bilmesi için bir tür ipucu (daha sonra açıklanacaktır) # veya varsayılan bir değere ihtiyaç vardır. @export var age: int @export var height: float @export var person_name = "Ahmet" # Ama ikisi de kabul edilebilir. @export var favorite_color: String = "Kırmızı" @export var favorite_food := "Lahmacun" # Fonksiyonlar func foo(): pass # pass anahtar sözcüğü gelecekteki yazılacak olan kod için bir yer tutucudur. # Editörde hata olarak göstermesini engellemek için de kullanılır. func add(first, second): return first + second # Fonksiyonlar üzerinde doküman yorumları yazma ## Zıplama Sayısını Artırma func jump(): jump_count += 1 # Değerleri yazdırma func printing(): print("GDScript ", "mükemmel.") prints("Bu", "kelimeler", "boşluklarla", "ayrıldı.") printt("Bu", "kelimeler", "tablarla", "ayrıldı.") printraw("Bu sistem konsoluna yazdırılır.") printerr("Bu konsolda hata olarak gösterilir.") # İsimsiz fonksiyonlar (Lambdas) var my_lambda = func(): print("lambda'dan merhaba!") my_lambda.call() # Matematik func doing_math(): var first = 8 var second = 4 print(first + second) # 12 print(first - second) # 4 print(first * second) # 32 print(first / second) # 2 print(first % second) # 0 # Ayrıca bunlar var +=, -=, *=, /=, %= vb., # ++ veya -- operatörleri yok. print(pow(first, 2)) # 64 print(sqrt(second)) # 2 printt(PI, TAU, INF, NAN) # Yerleşik (built-in) sabitler (constants) # Kontrol akışı func control_flow(): x = 8 y = 2 # y orjinalde float'dı, # ancak "dynamic typing" gücünü kullanarak # tipini int'e değiştirebiliriz! if x < y: print("x, y'den küçüktür.") elif x > y: print("x, y'den büyüktür.") else: print("x ve y eşittir.") var a = true var b = false var c = false if a and b or not c: # alternatif olarak bunları kullanabilirsiniz: &&, || ve ! print("Değer: true") for i in range(20): # GDScript'de "range" Python'dakine benzerdir. print(i) # bu 0'dan 19'a kadar sayıları yazdıracaktır. for i in 20: # Python'dan farklı olarak, doğrudan bir int üzerinde "range" kullanmadan döngüye girebilirsiniz. print(i) # bu da 0'dan 19'a kadar olan sayıları da yazdıracaktır. for i in ["two", 3, 1.0]: # Bir dizi üzerinde yineleme (iterasyon) yapma. print(i) while x > y: printt(x, y) y += 1 x = 2 y = 10 while x < y: x += 1 if x == 6: continue # 6, "continue" ifadesi nedeniyle yazdırılmayacak. prints("x eşittir:", x) if x == 7: break # döngü 7'de duracak, bu yüzden 8, 9 ve 10 yazdırılmayacak. match x: 1: print("Match, switch'e benzerdir.") 2: print("Ancak her değerden önce "case" koymanıza gerek yok.") 3: print("Ayrıca her "case" varsayılan olarak durdurulur.") break # HATA! "Break" ifadesi gereksiz! 4: print("Eğer "fallthrough" kullanmaya ihtiyacınız varsa "continue" kullanın.") continue _: print("Alt çizgi varsayılan bir "case"dir.") # Üç terimli operatör (tek satırda yazılabilen if-else) prints("x", "pozitif" if x >= 0 else "negatif") # Bir veri tipini başka bir veri tipine dönüştürme (Casting) func casting_examples(): var i = 42 var f = float(42) # Değişkenlerin kurucusunu (constructor) kullanarak var b = i as bool # veya "as" anahtar kelimesini kullanarak tür dönüştürme (casting) # Override fonksiyonlar # Built-in kurallı "overridable functions" bir alt çizgi ile başlar # ama pratikte hemen hemen her fonksiyonu geçersiz kılabilirsiniz. # _init nesne başlatıldığında çağrılır. # Bu, nesnenin kurucusudur (constructor). func _init(): # Burada nesnenin iç öğelerini başlatın. pass # _ready, komut dosyasında # node ve children node sahneye girdiğinde çağrılır. func _ready(): pass # _process her karede çağrılır. func _process(delta): # Bu fonksiyona iletilen delta argümanı, # son kare ile anlık kare arasında geçen saniye sayısıdır. print("Delta zamanı: ", delta) # _physics_process her fizik karesinde çağrılır. # Deltanın sabit olması gerektiği anlamına gelir. func _physics_process(delta): # Vektör toplama ve çarpma kullanarak hareket ettirme. var direction = Vector2(1, 0) # ya da Vector2.RIGHT var speed = 100.0 self.global_position += direction * speed * delta # self geçerli sınıf örneğini belirtir. # Geçersiz kılma sırasında, buradaki gibi nokta operatörünü kullanarak # parent işlevini çağırabilirsiniz: func get_children(): # Bazı ek şeyler ekleyebilirsiniz. var r = super() # Parent implementasyonunu çağırma return r # Dahili sınıflar (Inner class) class InnerClass: extends Object func hello(): print("Dahili sınıftan merhabalar!") func use_inner_class(): var ic = InnerClass.new() ic.hello() ic.free() # Ramde yer açmak için "free" kullanın. extends Node2D var sprite # Bu değişken referansı tutacak. # _ready'de diğer node'lara referanslar alabilirsiniz. func _ready() -> void: # "NodePath" node'lara erişmek için kullanışlıdır. var path1 = NodePath("path/to/something") # Ya da böyle kullanabilirsiniz: var path2 = ^"path/to/something" # NodePath örnekleri: var path3 = ^"Sprite" # geçerli node'un child node'u var path4 = ^"Timers/Firerate" # child node'un child node'u var path5 = ^".." # geçerli node'un parent node'u var path6 = ^"../Enemy" # geçerli node'un kardeşi var path7 = ^"/root" # ana yol, get_tree().get_root() ile eşdeğerdir. var path8 = ^"/root/Main/Player/Sprite" # Player'ın Sprite'ına giden ana yol var path9 = ^"Timers/Firerate:wait_time" # özelliklere erişme var path10 = ^"Player:position:x" # alt özelliklere erişim # Son olarak, referans almak için bunlardan birini kullanabilirsiniz: sprite = get_node(^"Sprite") as Sprite # her zaman belirttiğiniz türü yazın sprite = get_node("Sprite") as Sprite # burada String # NodePath'e dönüştürülür sprite = get_node(path3) as Sprite sprite = get_node_or_null("Sprite") as Sprite sprite = $Sprite as Sprite func _process(delta): # Artık referansı başka yerlerde tekrar kullanabiliriz. prints("Sprite has global_position of", sprite.global_position) # _ready çalıştırılmadan hemen önce # bir değişkene değer atamak için @onready kullanın. @onready var other_sprite = $Sprite as Sprite # NodePath'i dışa aktarabilir, böylece onu "inspector" içinde atama yapabilirsiniz. @export var nodepath = ^"" @onready var reference = get_node(nodepath) as Node # Veya Node'u doğrudan dışa aktarın @export var other_reference: Node class_name Player extends Node2D var hp = 10 # Belge yorumları sinyallere de yansıyabilir ## Oyuncu öldüğünde sinyal gönderir (emit). signal died() # sinyali tanımlama signal hurt(hp_old, hp_new) # sinyallere değişken tanımlanabilir. func apply_damage(dmg): var hp_old = hp hp -= dmg hurt.emit(hp_old, hp) # sinyal gönderme ve değişkenleri iletme if hp <= 0: died.emit() func _ready(): # "died" sinyali kendi içinde tanımlanan "_on_death" fonksiyonuna bağlama died.connect(_on_death) # Hedef nesne kendisi değilse # alternatif bir yol gerekir. # died.connect(Callable(self, &"_on_death")) func _on_death(): queue_free() # oyuncu öldüğünde sahneden siler extends Node var x: int # değişkenin türünü belirtme var y: float = 4.2 var z := 1.0 # ":=" operatörünü kullanmak üstteki tanımlama ile aynıdır. var a: Array[int] = [1, 2, 3] # Dizinin tür içeriğini belirtme enum NamedEnum { ONE = 1, TWO, THREE } var n: NamedEnum = NamedEnum.ONE # Enum da bir tür olarak kullanılabilir. @onready var node_ref_typed := $Child as Node @export var speed := 50.0 const CONSTANT := "Bu bir sabit atamadır (constant)." signal example(arg: int) func _ready() -> void: # fonksiyon hiçbir şey döndürmez x = "string" # HATA! Tür değiştirilemez! a.append("q") # HATA! Array[int] string tutamaz! return func join(arg1: String, arg2: String) -> String: # Fonksiyon iki tane string alır ve bir tane string döndürür. return arg1 + arg2 func get_child_at(index: int) -> Node: # Fonksiyon int alır ve node döndürür. return get_children()[index]