Settery właściwości
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 11 z 65.
Właściwość może wykonywać kod za każdym razem, gdy zostanie jej przypisana wartość. Po deklaracji wstaw dwukropek i dodaj wcięty blok set(value): — jej setter:
# player.gd
var health: int = 100:
set(value):
health = clampi(value, 0, 100)value to wartość, która jest przypisywana. Wewnątrz settera przypisanie health zapisuje wartość we właściwości; nie uruchamia ponownie settera. Ten setter utrzymuje health w zakresie od 0 do 100, niezależnie od tego, co przypisuje reszta programu:
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 jest uruchamiany przy każdym przypisaniu, także wewnątrz klasy: health -= 10 w metodzie klasy Player oraz health = start_health w _init() również przez niego przechodzą. Tylko wartość początkowa po = w deklaracji jest zapisywana bez jego wywoływania.
Setter może również odrzucić wartość. Jeśli nie przypisze właściwości, pozostanie stara wartość:
var level: int = 1:
set(value):
if value > level:
level = valuePomiń typ przy value: set(value: int): to błąd. Typ samej właściwości już określa, co przechowuje.
Wyzwanie
ŁatwyDodaj właściwości health klasy Player w pliku player.gd setter, który:
- utrzymuje zapisaną wartość zdrowia w zakresie od
0domax_health: większa wartość jest zapisywana jakomax_health, a ujemna jako0 - wypisuje
Player is down!, gdy nowe zdrowie wynosi0, a poprzednie było większe od0
Dostarczony kod odczytuje liczbę kolejnych poleceń, a następnie po jednym w każdym wierszu: damage N (player.health -= N), heal N (player.health += N) lub set N (player.health = N). Po każdym poleceniu wypisuje stan zdrowia. Dla damage 30, heal 50, damage 120 i heal 10 wypisuje:
Health: 70
Health: 100
Player is down!
Health: 0
Health: 10Twój kod umieść w pliku player.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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)
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online