Menu
CoddyTech

Ö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) # 0

Setter, 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 = value

value için türü belirtme: set(value: int): bir hatadır. Özelliğin kendi türü, ne tuttuğunu zaten belirtir.

challenge icon

Görev

Kolay

player.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 0 ile max_health arasında tut: daha büyük bir değer max_health, negatif bir değer ise 0 olarak saklanır
  • yeni sağlık değeri 0 olduğunda ve eski sağlık değeri 0'dan büyük olduğunda Player 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: 10

Kodunu 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)
quiz iconKendini test et

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

Kendi başına pratik yap: Online GDScript derleyicisi