This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Komponenty są używane, żeby nadać obiektom gry konkretne właściwości i funkcjonalności, takie jak reprezentacja graficzna, dźwiękowa czy logika gry. Komponenty muszą należeć do obiektu gry i są afektowane przez zmiany jego pozycji, orientacji i skali:

Wiele komponentów ma specyficzne właściwości, które mogą być modyfikowane. Istnieją trzy specyficzne funkcje do interakcji z nimi w trakcie działania programu:
-- disable the can "body" sprite
msg.post("can#body", "disable")
-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )
Komponenty są dodawane do obiektów gry z poziomu Edytora jako ich nowe komponenty lub referencje do istniejących plików komponentów:
Naciśnij prawym przyciskiem myszki na obiekcie gry w panelu Outline i wybierz Add Component (nowy komponent) lub Add Component File (jako referencja do pliku).
W większości przypadków sens ma tworzenie nowych komponentów specyficznych dla danego obiektu, ale często możesz też wykorzystywać wspólne komponenty dla wielu obiektów, a niektóre z nich nie mogą być utworzone inaczej niż przez stworzenie wcześniej pliku:
Defold wspiera następujące typy komponentów:
Dodatkowe komponenty można dodać przez rozszerzenia:
Komponenty obiektu gry są aktywne od chwili utworzenia tego obiektu. Jeśli chcesz wyłączyć komponent, wyślij do niego wiadomość disable:
-- wyłączenie komponentu o identyfikatorze 'weapon' na tym samym obiekcie gry, co ten skrypt
msg.post("#weapon", "disable")
-- wyłączenie komponentu o identyfikatorze 'shield' na obiekcie gry 'enemy'
msg.post("enemy#shield", "disable")
-- wyłączenie wszystkich komponentów na bieżącym obiekcie gry
msg.post(".", "disable")
-- wyłączenie wszystkich komponentów na obiekcie gry 'enemy'
msg.post("enemy", "disable")
Aby ponownie włączyć komponent, wyślij do niego wiadomość enable:
-- włączenie komponentu o identyfikatorze 'weapon'
msg.post("#weapon", "enable")
Typy komponentów w Defoldzie mają różne właściwości. Panel Properties w edytorze pokazuje właściwości aktualnie zaznaczonego komponentu w panelu Outline. Więcej informacji o dostępnych właściwościach znajdziesz w instrukcjach poszczególnych typów komponentów.
Komponenty wizualne zwykle mają właściwość położenia i obrotu, a najczęściej także skalę. Właściwości te można zmieniać w edytorze, ale w niemal wszystkich przypadkach nie da się ich zmienić w czasie działania gry. Wyjątkiem jest skala komponentów sprite i label, którą można zmieniać także w trakcie działania.
Jeśli musisz zmienić położenie, obrót albo skalę komponentu w czasie działania gry, zmień zamiast tego położenie, obrót albo skalę obiektu gry, do którego ten komponent należy. Ma to jednak taki skutek uboczny, że wpłynie na wszystkie komponenty na tym obiekcie gry. Jeśli chcesz sterować tylko jednym komponentem spośród wielu przypisanych do obiektu gry, zaleca się przenieść ten komponent do osobnego obiektu gry i dodać go jako obiekt potomny do obiektu gry, do którego pierwotnie należał.
Kolejność rysowania komponentów wizualnych zależy od dwóch rzeczy:
Każdemu komponentowi przypisany jest material, a każdy material ma jeden lub więcej tagów. Z kolei skrypt do renderowania definiuje zestaw predykatów, a każdy z nich dopasowuje jeden lub więcej tagów materiału. Predykaty są rysowane jeden po drugim w funkcji update() skryptu do renderowania, a następnie rysowane są komponenty pasujące do tagów zdefiniowanych w każdym predykacie. Domyślny skrypt do renderowania najpierw rysuje sprite’y i tilemapy w jednym przebiegu, potem efekty cząsteczkowe w drugim przebiegu, oba w przestrzeni świata. Następnie przechodzi do rysowania komponentów GUI w osobnym przebiegu w przestrzeni ekranu.
Wszystkie obiekty gry i komponenty są umieszczone w przestrzeni 3D, a ich pozycje są wyrażane jako obiekty vector3. Gdy oglądasz grafikę swojej gry w 2D, wartości X i Y określają położenie obiektu na osiach szerokości i wysokości, a pozycja Z określa położenie na osi głębokości. Pozycja Z pozwala kontrolować widoczność nakładających się obiektów: sprite z wartością Z równą 1 pojawi się przed sprite’em na pozycji Z równej 0. Domyślnie Defold używa układu współrzędnych, w którym wartości Z mieszczą się w zakresie od -1 do 1:

Komponenty pasujące do predykatu renderowania są rysowane razem, a kolejność ich rysowania zależy od końcowej wartości Z komponentu. Końcowa wartość Z komponentu jest sumą wartości Z samego komponentu, obiektu gry, do którego należy, oraz wartości Z wszystkich nadrzędnych obiektów gry.
Kolejność rysowania wielu komponentów GUI nie jest określana przez wartość Z tych komponentów. Kolejność rysowania komponentów GUI kontroluje funkcja gui.set_render_order().
Przykład: Dwa obiekty gry A i B. B jest obiektem potomnym A. B ma komponent sprite.
| Co | Wartość Z |
|---|---|
| A | 2 |
| B | 1 |
| B#sprite | 0.5 |

W powyższej hierarchii końcowa wartość Z komponentu sprite na obiekcie B wynosi 2 + 1 + 0.5 = 3.5.
Jeśli dwa komponenty mają dokładnie taką samą wartość Z, kolejność jest nieokreślona i komponenty mogą migać, przełączając się między sobą, albo być renderowane w innej kolejności na różnych platformach.
Skrypt do renderowania definiuje bliską i daleką płaszczyznę dla wartości Z. Każdy komponent, którego wartość Z znajduje się poza tym zakresem, nie zostanie wyrenderowany. Domyślny zakres to od -1 do 1, ale można go łatwo zmienić. Precyzja numeryczna wartości Z przy granicach bliskiej i dalekiej płaszczyzny ustawionych na -1 i 1 jest bardzo wysoka. Pracując z zasobami 3D, możesz potrzebować zmienić te granice w niestandardowym skrypcie do renderowania. Więcej informacji znajdziesz w instrukcji Render.
Plik ustawień game.project zawiera wiele wartości określających maksymalną liczbę danego zasobu, który może istnieć jednocześnie, zwykle w przeliczeniu na załadowaną kolekcję, nazywaną też światem (ang. world). Silnik Defold używa tych wartości do wstępnej alokacji pamięci, aby ograniczyć dynamiczne alokacje i fragmentację pamięci podczas działania gry.
Struktury danych Defold używane do reprezentowania komponentów i innych zasobów są zoptymalizowane pod kątem jak najmniejszego zużycia pamięci, ale przy ustawianiu tych wartości nadal trzeba zachować ostrożność, aby nie przydzielać więcej pamięci, niż naprawdę potrzeba.
Aby dodatkowo zoptymalizować zużycie pamięci, proces budowania w Defold analizuje zawartość gry i nadpisuje wartości maksymalne tam, gdzie można z całkowitą pewnością określić dokładną liczbę:
Factory, zostanie zaalokowana dokładna liczba każdego komponentu i obiektu gry, a wartości maksymalne zostaną zignorowane.Factory, obiekty tworzone przez tę fabrykę zostaną przeanalizowane, a dla komponentów możliwych do utworzenia przez Factory oraz dla obiektów gry zostaną użyte wartości maksymalne.Factory albo Collection factory z włączoną opcją Dynamic Prototype, ta kolekcja będzie używać liczników maksymalnych.