Özellik Ayarlayıcıları
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 11 / 65.
Bir özelliğe her değer atandığında kod çalıştırılabilir. Bildirimden sonra iki nokta koy ve girintili bir set(value): bloğu ekle; bu, özelliğin setter'ıdır:
# player.gd
var health: int = 100:
set(value):
health = clampi(value, 0, 100)Atanan şey value'dur. Setter içinde health atamak, değeri özelliğe kaydeder; setter'ı yeniden çalıştırmaz. Bu setter, programın geri kalanı ne atarsa atasın, health değerini 0 ile 100 arasında tutar:
var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0Setter, sınıfın içinde de olmak üzere her atamada çalışır: Player sınıfının bir metodundaki health -= 10 ve _init() içindeki health = start_health ifadelerinin ikisi de setter üzerinden geçer. Yalnızca bildirimdeki = işaretinden sonraki başlangıç değeri, setter çağrılmadan saklanır.
Bir setter bir değeri reddedebilir de. Property'ye atama yapmazsa eski değer kalır:
var level: int = 1:
set(value):
if value > level:
level = valuevalue için türü belirtme: set(value: int): bir hatadır. Özelliğin kendi türü, ne tuttuğunu zaten belirtir.
Görev
Kolayplayer.gd içindeki Player sınıfının health özelliğine şu koşulları sağlayan bir ayarlayıcı ekle:
- saklanan sağlık değerini
0ilemax_healtharasında tut: daha büyük bir değermax_health, negatif bir değer ise0olarak saklanır - yeni sağlık değeri
0olduğunda ve eski sağlık değeri0'dan büyük olduğundaPlayer is down!yazdır
Verilen kod, ardından kaç komut geleceğini okur ve her komutu ayrı bir satırdan okur: damage N (player.health -= N), heal N (player.health += N) veya set N (player.health = N). Her komuttan sonra sağlık değerini yazdırır. damage 30, heal 50, damage 120 ve heal 10 komutları için şu çıktıyı verir:
Health: 70
Health: 100
Player is down!
Health: 0
Health: 10Kodunu player.gd dosyasına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var player := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "damage":
player.health -= amount
elif parts[0] == "heal":
player.health += amount
elif parts[0] == "set":
player.health = amount
print("Health: %d" % player.health)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi