Plik game.project zawiera wszystkie ustawienia wykorzystywane w projekcie. Jest to specjalny plik i musi pozostać w głównej lokalizacji Twojego projektu, a nazwa musi pozostać niezmieniona - game.project. Pierwsza rzeczą jaką zajmuje się silnik Defold zaraz po starcie Twojej gry jest właśnie wyszukanie tego pliku. (W systemie Windows można przypisać plik .project do domyślnego otwierania za pomocą aplikacji Defold)
Każde ustawienie w tym pliku przynależy do konkretnej kategorii. Defold wyświetla ustawienia z tego pliku podzielone właśnie na te kategorie.
Poniżej przedstawiono wszystkie dostępne ustawienia, poukładane w sekcje. Niektóre z nich nie są pokazywane po otwarciu w Edytorze Defold (oznaczono je “hidden setting” (z ang. ukryte ustawienie))), ale wciąż można je zmienić ręcznie otwierając plik game.project w edytorze tekstu: Open With ▸ Text Editor.
Tytuł aplikacji
Wersja aplikacji
Kiedy opcja zapisu logów jest zaznaczona, silnik zapisze wszystkie logi do pliku log.txt w głównej lokalizacji Twojego projektu. Gdy uruchomisz grę na systemie iOS, plik można będzie otworzyć przez iTunes w zakładce Apps w sekcji File Sharing. W systemie Android natomiast, plik jest przechowywany w zewnętrznej lokalizacji aplikacji (ang. app’s external storage). Podczas uruchamiania aplikacji deweloperskiej dmengine, możesz podejrzeć logi używając komendy:
$ adb shell cat /mnt/sdcard/Android/data/com.defold.dmengine/files/log.txt
Umożliwia kompresowanie archiwów podczas budowania paczki. Zauważ, że dotyczy to wszystkich platform oprócz systemu Android, gdzie plik apk zawiera od razy skompresowane dane.
Zależoności - lista adresów URL do projektów bibliotek (Library URLs). Więcej szczegółów znajdziesz w instrukcji do Bibliotek.
Własne zasoby - lista oddzielonych przecinkami zasobów, które będą dołączone do projektu. Jeśli określone są lokalizacje, wszystkie pliki i katalogi w danej lokalizacji są rekursywnie załączane. Zasoby te można załadować w trakcie działania programu używając sys.load_resource()
.
Zasoby paczki - lista oddzielonych przecinkami lokalizacji zasobów zawierających pliki i katalogi, które można skopiować w obecnym stanie do paczki wynikowej podczas budowania. Lokalizacje muszą być opisane ścieżkami bezwzględnymi od poziomu głównego katalogu Twojego projektu, np. /res
. Taka lokalizacja z zasobami musi zawierać podfoldery nazwane zgodnie z platformą (platform
lub architecure-platform
).
Wspierane platformy to: ios
, android
, osx
, win32
, linux
, web
.
Dozwolony jest również podfolder common
zawierający zasoby wspólne dla wszystkich platform.
Zasoby, które należy usunąć z paczki - lista oddzielonych przecinkami zasobów, które nie będą dołączane do paczki.
Główna kolekcja - referencja do pliku kolekcji używanej w aplikacji jako startowa, domyślnie: /logic/main.collection
.
Referencja do pliku render określającego sposób renderowania, domyślnie: /builtins/render/default.render
.
Dołączane lokalizacje - lista oddzielonych spacjami lokalizacji, które będą współdzielone z Twojego projektu poprzez udostępnianie bibliotek.
Stan współdzielony - Gdy opcja ta jest zaznaczona, projekt dzieli wspólny, pojedynczy stan Lua pomiędzy wszystkimi skryptami. Domyślnie odznaczone.
Kontynuuj po zminimalizowaniu okna - pozwól silnikowi na kontynuację pracy, gdy okno aplikacji jest zminimalizowane (dotyczy tylko komputerów), domyślnie odznaczone - false
.
Szerokość okna aplikacji w pikselach, domyślnie: 960
.
Wysokość okna aplikacji w pikselach, domyślnie: 640
.
Tworzy bufor High Dpi na wyświetlaczach, które to wspierają. Gra zostanie wyrenderowana w rozdzielczości dwukrotnie większej niż podana w ustawieniach Width i Height, ale podana rozdzielczość będzie nadal rozdzielczością dla logiki gry.
Określa jak wiele próbek aplikacja ma używać przy anty-aliasingu. Ustawia wartość GLFW_FSAA_SAMPLES dla okna. Domyślnie: 0
, co oznacza, że anty-aliasing jest wyłączony.
Zaznacz, żeby aplikacja startowała w trybie pełnego ekranu. Odznacz, żeby startowała w oknie.
Jeśli opcja Vsync
jest zaznaczona, przybliż do najbliższego pasującego przedziału wymiany dla ustawionego limiu ramki, jeśli monitor jest wykryty. W przeciwnym przypadku używaj timer’ów w celu zgodności z ustawioną wartością. 0 oznacza, że nie ma limitu. Ustawienie to dotyczy display.update_frequency
.
Vertical sync, czyli pionowa synchronizacja - polegaj na sprzętowej synchronizacji do określania czasu ramki. Może być nadpisane w zależności od sterownika karty graficznej i specyfiki platformy.
Profile wyświetlania - określa, których profili używać, domyślnie: /builtins/render/default.display_profilesc
. Więce szczegółów znajdziesz w instrukcji do layout’ów GUI.
Dynamiczna orientacja - zaznacz, żeby pozwolić aplikacji dynamicznie zmieniać między ustawieniem horyzontalnym i portretowym w zależności od orientacji urządzenia. Aplikacja deweloperska dmegine obecnie nie respektuje tego ustawienia.
Czerwona składowa koloru czyszczenia ekranu, używana przez skrypt renderowania, kiedy okno jest tworzone. Dodano w 1.2.167.
Zielona składowa koloru czyszczenia ekranu, używana przez skrypt renderowania, kiedy okno jest tworzone. Dodano w 1.2.167.
Niebieska składowa koloru czyszczenia ekranu, używana przez skrypt renderowania, kiedy okno jest tworzone. Dodano w 1.2.167.
Składowa koloru czyszczenia ekranu odpowiedzialna za transparentność, używana przez skrypt renderowania, kiedy okno jest tworzone. Dodano w 1.2.167.
Jaki typ fizyki jest używany: 2D
(domyślnie) albo 3D
.
Składowa Y wektora siły grawitacji, domyślnie -10
(ziemska grawitacja).
Zaznacz, żeby wizualizować fizykę do celów debugowania.
Składowa koloru wizualizacji fizyki odpowiedzialna za transparentność z przedziału 0
–1
. Domyślnie: 0.9
.
Maksymalna liczba oddzielnych światów z fizyką, domyślnie: 4
. Jeśli wczytujesz więcej niż 4 światy poprzez pełnomocników kolekcji (collection proxies) musisz zwiększyć tę wartość. Pamiętaj, że każdy osobny świat fizyki zajmuje odpowiednią ilość pamięci.
Składowa X wektora siły grawitacji, domyślnie 0
.
Składowa Z wektora siły grawitacji, domyślnie 0
.
Skala fizyki - pomaga silnikowi określić w jaki sposób skalować wartości świata fizyki, aby zachować precyzję numeryczną, z przedziału 0.01
–1.0
. Jeśli ustawisz wartość 0.02
, oznacza to, że świat fizyki będzie postrzegał 50 jednostek jako jeden metr.($1 / 0.02$). Domyślnie: 1.0
.
Zaznacz, aby silnik fizyki skalował obiekty kolizji używając skali obiektów gry, do których należą.
Określa jak duże rysować obiekty służące do debugowania fizyki - np. wektory normalne, domyślnie 30
.
Określa jak wiele kolizji będzie obsługiwanych przez skrypty, domyślnie 64
.
Określa jak wiele punktów styku będzie obsługiwanych przez skrypty, domyślnie 128
.
Silnik zignoruje zderzenia z impulsem mniejszym niż ta wartość, domyślnie 0.0
.
Maksymalna liczba promieni 2D rzucanych w czasie jednej ramki, domyślnie 64
.
Maksymalna liczba promieni 3D rzucanych w czasie jednej ramki, domyślnie 128
.
Maksymalna liczba pokrywających się przełączników (triggers), domyślnie 16
.
Określa jakiego filtra używać podczas pomniejszającego filtrowania tekstur, linear
(domyślnie) lub nearest
.
Określa jakiego filtra używać podczas powiększającego filtrowania tekstur, linear
(domyślnie) lub nearest
.
Maksymalna liczba wywołań rysowania grafiki (renderowania, ang. render calls), domyślnie 1024
.
Maksymalna liczba znaków zaalokowanych wcześniej w buforze renderowania tekstu, czyli liczba znaków, które można wyświetlić w każdej ramce, domyślnie 8192
.
Maksymalna liczba punktów służących do debugowania, między innymi do rysowania kształtów silnika fizyki, domyślnie 10000
.
Określa jakiego profilu teksturowania należy używać do tego projektu, domyślnie /builtins/graphics/default.texture_profiles
.
Czas w sekundach, który należy odczekać po odczytaniu danego wejścia, zanim to samo wejście może zostać powtórzone, domyślnie 0.5
.
Czas w sekundach, który należy odczekać po odczytaniu danego wejścia, które jest ciągle wciskane, zanim to samo wejście może zostać odczytane jako powtórzone, domyślnie 0.2
.
Określa jakiego pliku należy używać do konfiguracji kontrolerów, który mapuje wejścia kontrolera do systemu operacyjnego, domyślnie /builtins/input/default.gamepads
.
Określa jakiego pliku należy używać do konfiguracji wejść, który mapuje wejścia sprzętowe do podanych akcji, domyślnie /input/game.input_binding
.
Zaznacz, żeby silnik mógł otrzymywać dane z akceleratora jako wejście dla każdej ramki. Wyłączenie akcelerometra może dawać korzyści pod względem wydajności. Domyślnie zaznaczone.
Kiedy zaznaczone, pamięć podręczna (cache) HTTP jest aktywowana, aby szybciej ładować zasoby przez sieć do działającego na urządzeniu silnika. Domyślnie odznaczone.
Wskazuje gdzie szukać danych do budowania projektu, w formacie URI.
Maksymalna liczba zasobów, które mogą być załadowane jednocześnie, domyślnie 1024
.
Czas w sekundach do zaniechania czekania na odpowiedź HTTP. Ustaw na 0
, żeby wyłączyć timeout, domyślnie właśnie wyłączony, czyli czeka na odpowiedź nieskończenie długo.
Maksymalna liczba instancji obiektów gry w jednej kolekcji, domyślnie 1024
.
Globalne wzmocnienie dźwięku (volume), 0
–1
, domyślnie 1
.
Maksymalna liczba źródeł dźwięku, czyli liczba unikalnych plików dźwiękowych, które można otworzyć jednocześnie, domyślnie 128
.
(Obecnie nie używane) Maksymalna liczba jednocześnie istniejących buforów dźwiękowych, domyślnie 32
.
(Obecnie nie używane) Maksymalna liczba jednocześnie istniejących źródeł dźwięku, domyślnie 16
.
Maksymalna liczba jednocześnie istniejących instancji dźwięku, czyli liczba aktualnych dźwięków odtwarzanych w tym samym momencie, domyślnie 256
.
Maksymalna liczba sprite’ów w jednej kolekcji, domyślnie 128
.
Zaznacz, aby pozwolić sprite’om pojawiać się nieprzylegając do pełnych pikseli, domyślnie zaznaczone.
Maksymalna liczba map kafelków w jednej kolekcji, domyślnie 16
.
Maksymalna liczba jednocześnie widocznych kafelków w jednej kolekcji, domyślnie 2048
.
Maksymalna liczba modeli szkieletowych Spine, domyślnie 128
.
Maksymalna liczba komponentów GUI, domyślnie 64
.
Maksymalna liczba jednocześnie istniejących emiterów cząsteczek w GUI, domyślnie 64
.
Maksymalna liczba jednocześnie istniejących cząsteczek w GUI, domyślnie 1024
.
Maksymalna liczba etykiet z tekstem, domyślnie 64
.
Zaznacz, aby pozwolić etykietom pojawiać się nieprzylegając do pełnych pikseli, domyślnie zaznaczone.
Maksymalna liczba jednocześnie istniejących emiterów cząsteczek, domyślnie 64
.
Maksymalna liczba jednocześnie istniejących cząsteczek, domyślnie 1024
.
Maksymalna liczba pełnomocników kolekcji, domyślnie 8
.
Maksymalna liczba fabryk kolekcji, domyślnie 128
.
Maksymalna liczba fabryk, domyślnie 128
.
Plik graficzny (.png) używany jako ikona aplikacji o podanych wymiarach W
× H
.
Plik Storyboard (.storyboard). Więcej szczegółów znajdziesz w instrukcji do systemu iOS.
(Dotyczy iOS 6 i wcześniejszych wersji) Zaznacz, żeby ikony były pre-renderowane. Jeśli ta opcja nie jest zaznaczona ikony będą miały automatycznie dodany świetlistą poświatę.
Identyfikator paczki - pozwala systemowi iOS rozpoznawać Twoją aplikację przy aktualizacjach. ID Twojej paczki musi być zarejestrowane przez Apple i być dla niej unikalne. Nie można używać tego samego identyfikatora dla aplikacji iOS i macOS.
Jeśli podany - używany będzie określony plik info.plist podczas budowania paczki aplikacji.
Uprawnienia - jeśli podane, mogą nadpisać domyślne uprawnienia określone w profilach nadzorujących (.entitlements, .xcent, .plist).
Domyślny jeżyk aplikacji - używany, jeśli użytkownik nie posiada wybranego preferowanego języka domyślnego w liście Localizations
(zobacz: CFBundleDevelopmentRegion). Należy tutaj użyć dwuznakowego symbolu kraju zgodnego ze standardem ISO 639-1, jeśli preferowany język znajduje się w standardzie, w przeciwnym przypadku - trójznakowego symbolu ze standardu ISO 639-2.
Ustawienia regionalne - pole zawiera oddzielone przecinkami słowa (strings) identyfikujące nazwę języka lub oznaczenie języka ISO wspieranych lokalizacji (zobacz: CFBundleLocalizations).
Plik graficzny (.png) używany jako ikona aplikacji o podanych wymiarach W
× H
.
Plik graficzny (.png) używany jako ikona aplikacji w powiadomieniach push systemu Android. Ikony będą używane automatycznie zarówno do lokalnych i zdalnych powiadomień. Jeśli nie podano ikony, domyślna ikona aplikacji będzie używana.
Określa jakie pole z pliku JSON (payload) ma być użyte jako tytuł powiadomienia. Pozostawienie tego pola pustego sprawia, że domyślnie używana jest nazwa aplikacji.
Określa jakie pole z pliku JSON (payload) ma być użyte jako treść powiadomienia. Pozostawienie tego pola pustego sprawia, że domyślnie używany jest tekst alert
, tak jak dla iOS.
Kod wersji - wartość numeryczna całkowita (integer) określająca wersję aplikacji. Zwiększaj tę wartość przy każdej aktualizacji.
Identyfikator paczki.
Google Cloud Messaging Sender Id. Podaj tutaj string przypisany przez Google, aby aktywować powiadomienia push.
Plik XML - jeśli podany, będzie używany podczas budowania paczki.
Określa jakiego sklepu używać do zakupów wewnątrz aplikacji (ang. In App Purchases). Możliwe opcje to Amazon
i GooglePlay
(domyślnie).
Określa jakich sposobów obsługi klawiatury na urządzeniach z Androidem używać. Możliwe opcje to KeyEvent
(stara metoda, domyślna) i HiddenInputField
(nowa).
Tryb imersyjny. Jeśli ustawiony, ukrywa przyciski nawigacji i górny pasek statusu systemu Android oraz pozwala aplikacji na wykrywanie i przechwytywanie dotyku na powierzchni całego ekranu.
Określa czy aplikacja może być debugowana używając takich narzędzi jak GAPID lub Android Studio. Ustawia flagę android:debuggable
w manifeście systemu Android.
Plik graficzny (.png) używany jako ikona aplikacji w systemie macOS.
Jeśli podany - używany będzie określony plik info.plist podczas budowania paczki aplikacji.
Identyfikator paczki - pozwala systemowi iOS rozpoznawać Twoją aplikację przy aktualizacjach. ID Twojej paczki musi być zarejestrowane przez Apple i być dla niej unikalne. Nie można używać tego samego identyfikatora dla aplikacji iOS i macOS.
Domyślny jeżyk aplikacji - używany, jeśli użytkownik nie posiada wybranego preferowanego języka domyślnego w liście Localizations
(zobacz: CFBundleDevelopmentRegion). Należy tutaj użyć dwuznakowego symbolu kraju zgodnego ze standardem ISO 639-1, jeśli preferowany język znajduje się w standardzie, w przeciwnym przypadku - trójznakowego symbolu ze standardu ISO 639-2.
Ustawienia regionalne - pole zawiera oddzielone przecinkami słowa (strings) identyfikujące nazwę języka lub oznaczenie języka ISO wspieranych lokalizacji (zobacz: CFBundleLocalizations).
Plik graficzny (.ico) używany jako ikona aplikacji w systemie Windows. Więcej szczegółów na temat tworzenia plików .ico znajdziesz w instrukcji do systemu Windows.
Określa jakiego sklepu używać do zakupów wewnątrz aplikacji (ang. In App Purchases). Możliwe opcje to None
(domyślnie) i Gameroom
.
Rozmiar sterty (liczba megabajtów) dla użycia przez Emscripten. Domyślnie 256MB.
Używaj określonego szablonu HTML podczas budowania paczki aplikacji, domyślnie: /builtins/manifests/web/engine_template.html
.
Używaj określonego pliku z motywem CSS podczas budowania paczki aplikacji, domyślnie: /builtins/manifests/web/light_theme.css
.
Jeśli określony, użyj podanej grafiki jako ekranu startowego podczas budowania paczki aplikacji zamiast domyślnego logo Defold.
Podczas budowania paczki aplikacji dane gry HTML5 są rozdzielane na jeden lub więcej plików archiwów. Kiedy silnik uruchamia aplikację, archiwa te są ładowane do pamięci. Użyj tego pola, aby określić lokalizację danych, domyślnie: archive
.
Przyrostek dodawany do plików archiwów. Użyteczny na przykład przy wymuszaniu nie-buforowanych (non-cache) zawartości z CDN (na przykład: ?version2
).
Lista argumentów, które zostaną przekazane do silnika.
Dodaje przycisk trybu pełnoekranowego do pliku index.html
. Domyślnie true
.
Dodaje link Made With Defold link do pliku index.html
. Domyślnie true
.
Określa jakiego sposobu skalowania kanwy (obszaru wyświetlania) gry używać. Domyślnie Downscale Fit
.
Zaznacz, żeby automatycznie kończyć proces transakcji zakupów IAP. Jeśli odznaczony, musisz jawnie wywołać iap.finish()
po udanej transakcji, domyślnie zaznaczony.
Jeśli zaznaczone, użyj podanego klucza prywatnego podczas budowania paczki aplikacji z zawartością do aktualizacji live update. Jeśli nie podany, zostanie automatycznie wygenerowany.
Jeśli zaznaczone, użyj podanego klucza publicznego podczas budowania paczki aplikacji z zawartością do aktualizacji live update. Jeśli nie podany, zostanie automatycznie wygenerowany.
Jeśli zaznaczone, użyj manifestu aplikacji do personalizacji wersji silnika (engine build). Pozwala to na usunięcie zbędnych części z silnika umożliwiając zmniejszenie ostatecznej wagi aplikacji. Funkcjonalność ta jest w wersji alpha. Odwiedź porszę ten post na forum, aby dowiedzieć się więcej.
Jeśli zaznaczone, aktywowane będzie profilowanie CPU w wersji release. Normalnie można profilować tylko w wersji debug.
Format pliku z ustawieniami jest plikiem tekstowym (INI format) i może być dowolnie modyfikowany przez każdy edytor tekstu. Format wygląda następująco:
[category1]
setting1 = value
setting2 = value
[category2]
...
Przykład:
[bootstrap]
main_collection = /main/main.collectionc
co oznacza, że ustawienie main_collection należy do kategorii bootstrap. Kiedy używana jest referencja do pliku, jak w powyższym przykładzie, ścieżka musi być zakończona znakiem ‘c’, co oznacza, że odnosisz się do skompilowanej wersji pliku. Zauważ również, że folder zawieracjący plik game.project będzie folderem głównym projektu (root), stąd początkowy znak ‘/’ w ścieżce do pliku.
Kiedy silnik zostaje uruchomiony jest możliwe podanie wartości konfiguracji z lini wiersza poleceń, które nadpiszą wartości w pliku game.project:
# Określ kolekcę główną/bootstrapową
$ dmengine --config=bootstrap.main_collection=/my.collectionc
# Ustaw dwie wartości:
$ dmengine --config=test.my_value=4711 --config=test2.my_value2=1234
Twoje wartości mogą —tak jak każde inne wartości konfiguracji— być odczytane w trakcie działania aplikacji dzięki funkcji sys.get_config()
:
local my_value = tonumber(sys.get_config("test.my_value"))
Po pierwsze na komputerach osobistych opcja Vsync
(synchronizacja pionowa) może być kontrolowana globalnie przez ustawienia karty graficznej. Jeśli przykładowo opcja vsync jest wymuszona jako ustawiona w panelu kontrolnym karty graficznej, nie jest już możliwe zmienienie jej z poziomu użytkownika, czyli Defold nie może mieć do niej dostępu ani jej zmodyfikować. Większość urządzeń ma opcję vsync uruchomioną domyślnie.
Kiedy opcja Vsync
jest zaznaczona w pliku game.project silnik będzie polegał na sprzętowym wsparciu synchronizacji pionowej i używał stałej wartości długości ramki dt
bazującej na wartości częstotliwości odświeżania monitora. Jest to domyślne ustawienie. Kiedy opcja Vsync
jest zaznaczona, a Frame cap
> 0, wartość długości będzie zmniejszona do interwału przejścia odpowiadającego częstotliwości odświeżania głównego wykrytego monitora. Kiedy opcja Vsync
jest odznaczona, a Frame cap
= 0, wartość długości ramki nie jest stała, tylko używa aktualnej przyblizonej wartości różnicy czasowej dla wartości dt
. Kiedy opcja Vsync
jest odznaczona, a Frame cap
> 0, używane są timery, aby dostosować się do podanej wartości frame cap. Nie ma niestety gwarancji, że wartość frame cap zostanie osiągnięta na różnych platformach i w zależności od różnych ustawień sprzętowych.
Interwał zmiany (Swap interval) jest przedziałem czasowym określającym kiedy zamienić przedni i tylni bufor podczas synchronizacji z pionowymi pustkami (vertical blanks - v-blank), sprzętowe wydarzenie, gdzie ekran jest aktualizowany danymi z przedniego bufora. Wartość 1 pozwala na zamianę buforów przy każdym v-blanku, wartość 2 zamienia bufory przy co drugim v-blanku itd. Wartość 0 wyłącza oczekiwanie na v-blank przed zamianą buforów*. Ustawienie swap_interval
można zmienić dzięki funkcji set_vsync_swap_interval
.
Obecnie, Defold odpytuje o częstotliwość odświeżania monitora podczas inicjalizacji silnika i używa tej wartości jako bazy przy wyborze stałej wartości dt
. Jeśli chcesz wspierać monitory ze zmienną wartością częstotliwości odświeżania (np. GSync albo FreeSync) lub w innych scenariuszach gdzie wartość częstotliwości odświeżania nie jest trywialna do ustalenia, odznacz opcję Vsync
, żeby pozwolić silnikowi dobrać dt
podczas każdej ramki, zamiast polegać na stałej wartości.
Frame cap 0 (default) | Frame cap > 0 | |
---|---|---|
Vsync checked (default) | Relies on hardware vsync. Fixed dt of 1/(detected monitor refresh rate) . |
Fixed dt of (swap interval)/(detected monitor refresh rate) where swap interval is clamped to the closest matching monitor refresh rate frame cap multiple. |
Vsync unchecked | Calculates dt each frame based on elapsed system time. Vsync might still be enabled in driver settings. |
Uses a fixed dt of 1 / (Frame cap) . Uses timers and sleeps to respect the set frame cap. |
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB