FAQ
FAQ

Read this FAQ in English

Najczęściej zadawane pytania

Pytania ogólne

P: Czy Defold naprawdę jest darmowy?

A: Tak, silnik Defold i edytor z pełną funkcjonalnością są całkowicie bezpłatne. Bez ukrytych kosztów, opłat ani tantiem. Po prostu za darmo.

P: Dlaczego Defold Foundation oddaje Defold za darmo?

A: Jednym z celów Defold Foundation jest zapewnienie, że oprogramowanie Defold będzie dostępne dla deweloperów na całym świecie, a kod źródłowy będzie dostępny bezpłatnie.

P: Jak długo będziecie wspierać Defold?

A: Jesteśmy mocno zaangażowani w Defold. Defold Foundation została powołana tak, by przez wiele kolejnych lat pozostać odpowiedzialnym właścicielem Defold. To się nie skończy.

P: Czy mogę zaufać Defold w profesjonalnym tworzeniu gier?

A: Zdecydowanie. Defold jest używany przez coraz większą liczbę profesjonalnych twórców gier i studiów. Zobacz galerię gier, aby znaleźć przykłady gier stworzonych w Defold.

P: Jakiego rodzaju śledzenie użytkowników prowadzicie?

A: Rejestrujemy anonimowe dane użycia z naszych stron internetowych i edytora Defold, aby ulepszać nasze usługi i produkt. W grach, które tworzysz, nie ma śledzenia użytkowników, chyba że sam dodasz usługę analityczną. Więcej informacji znajdziesz w naszej Polityce prywatności.

P: Kto stworzył Defold?

A: Defold został stworzony przez Ragnara Svenssona i Christiana Murraya. Zaczęli pracować nad silnikiem, edytorem i serwerami w 2009 roku. W 2013 roku King i Defold rozpoczęły współpracę, a w 2014 roku King przejął Defold. Przeczytaj pełną historię tutaj.

Pytania o tworzenie gier

P: Czy mogę tworzyć gry 3D w Defold?

A: Oczywiście! Silnik jest pełnoprawnym silnikiem 3D. Zestaw narzędzi jest jednak przygotowany głównie pod 2D, więc wiele rzeczy trzeba będzie zrobić samodzielnie. Lepsze wsparcie 3D jest planowane.

Pytania o język programowania

P: W jakim języku programowania pracuje się w Defold?

A: Logika gry w projekcie Defold jest przede wszystkim pisana w języku Lua, konkretnie Lua 5.1/LuaJIT. Szczegóły znajdziesz w podręczniku Lua. Lua to lekki, dynamiczny język, który jest szybki i bardzo wydajny. Defold obsługuje użycie transpilerów generujących kod Lua. Po zainstalowaniu rozszerzenia do transpilacji możesz używać alternatywnych języków, takich jak Teal, do pisania statycznie sprawdzanego Lua. Możesz też używać kodu natywnego (C/C++, Objective-C, Java i JavaScript w zależności od platformy), aby rozszerzać silnik Defold o nową funkcjonalność. Przy tworzeniu własnych materiałów używany jest język shaderów OpenGL ES SL do pisania shaderów.

P: Czy mogę używać C++ do pisania logiki gry?

A: Obsługa C++ w Defold służy głównie do pisania rozszerzeń natywnych, które integrują się z SDK innych firm lub platformowymi API. dmSDK (API C++ dla Defold używane w rozszerzeniach natywnych) będzie stopniowo rozbudowywane o kolejne funkcje, tak aby w przyszłości dało się pisać całą logikę gry w C++, jeśli deweloper będzie tego chciał. Lua pozostanie głównym językiem do logiki gry, ale dzięki rozbudowanemu API C++ będzie można pisać logikę gry także w C++. Prace nad rozbudową API C++ polegają głównie na przenoszeniu istniejących prywatnych plików nagłówkowych do sekcji publicznej i porządkowaniu API do publicznego użytku.

P: Czy mogę używać TypeScript z Defold?

A: TypeScript nie jest oficjalnie obsługiwany. Społeczność utrzymuje zestaw narzędzi ts-defold do pisania w TypeScript i transpilowania go do Lua bezpośrednio z VSCode.

P: Czy mogę używać Haxe z Defold?

A: Haxe nie jest oficjalnie obsługiwany. Społeczność utrzymuje hxdefold do pisania w Haxe i transpilowania go do Lua.

P: Czy mogę używać C# z Defold?

A: Defold Foundation dodała obsługę C# i udostępniła ją jako zależność biblioteczną. C# to szeroko stosowany język programowania i pomoże studiom oraz deweloperom mocno związanym z C# przejść na Defold.

P: Obawiam się, że dodanie obsługi C# negatywnie wpłynie na Defold. Czy powinienem się martwić?

A: Defold NIE odchodzi od Lua jako głównego języka skryptowego. Obsługa C# jest dodana jako nowy język dla rozszerzeń natywnych. Nie wpłynie to na silnik, chyba że zdecydujesz się używać rozszerzeń C# w swoim projekcie.

Obsługa C# będzie miała swoją cenę, na przykład większy rozmiar pliku wykonywalnego czy wpływ na wydajność w czasie działania, ale to już decyzja konkretnego dewelopera lub studia.

Samo wsparcie dla C# to stosunkowo niewielka zmiana, ponieważ system rozszerzeń już obsługuje wiele języków (C/C++, Java, Objective-C, Zig). Generowane wiązania C# pozwolą utrzymać SDK w synchronizacji. Dzięki temu te wiązania pozostaną aktualne przy minimalnym nakładzie pracy.

Defold Foundation wcześniej była przeciwna dodaniu obsługi C# w Defold, ale zmieniła zdanie z kilku powodów:

  • Studia i deweloperzy nadal proszą o obsługę C#.
  • Obsługa C# została ograniczona wyłącznie do rozszerzeń, więc wymaga niewielkiego nakładu pracy.
  • Główny silnik nie ulegnie zmianie.
  • API C# można utrzymywać w synchronizacji przy minimalnym nakładzie pracy, jeśli jest generowane.
  • Obsługa C# będzie oparta na DotNet 9 z NativeAOT, co wygeneruje biblioteki statyczne, do których istniejący potok budowania może linkować, tak jak do każdego innego rozszerzenia Defold.

Pytania o platformy

P: Na jakich platformach działa Defold?

A: Następujące platformy są obsługiwane przez edytor i narzędzia oraz przez środowisko uruchomieniowe silnika:

System Wersja Architektury Obsługiwane
macOS 11 Big Sur x86-64, arm-64 Edytor i silnik
Windows Vista x86-32, x86-64 Edytor i silnik
Ubuntu (1) 22.04 LTS x86-64 Edytor
Linux (2) Dowolna x86-64, arm-64 Silnik
iOS 15.0 arm-64 x86_64 Silnik
Android 5.0 (API level 21) arm-32, arm-64 Silnik
HTML5   asm.js, wasm Silnik

(1 Edytor jest budowany i testowany dla 64-bitowego Ubuntu. Powinien też działać na innych dystrybucjach, ale nie dajemy żadnych gwarancji.)

(2 Środowisko uruchomieniowe silnika powinno działać na większości 64-bitowych dystrybucji Linuksa, o ile sterowniki graficzne są aktualne. Więcej informacji znajdziesz poniżej, w sekcji o API graficznych.)

P: Na jakie platformy docelowe mogę tworzyć gry z Defold?

A: Jednym kliknięciem możesz publikować na PS4™, PS5™, Nintendo Switch, iOS (64-bit), Android (32-bit i 64-bit) oraz HTML5, a także na macOS (x86-64 i arm64), Windows (32-bit i 64-bit) i Linux (x86-64 i arm64). To naprawdę jedna baza kodu i wiele obsługiwanych platform.

P: Jakiego API renderowania używa Defold?

A: Jako deweloper pracujesz tylko z jednym API renderowania, korzystając z w pełni skryptowalnego potoku renderowania. Skrypt renderowania Defold tłumaczy operacje renderowania na następujące API graficzne:

System operacyjny API graficzne Uwagi
macOS OpenGL 3.3 lub Metal Vulkan przez MoltenVK
Windows OpenGL 3.3 lub Vulkan 1.1  
Linux OpenGL 3.3 lub Vulkan 1.1  
Android OpenGLES 3.0 lub Vulkan 1.1 Awaryjnie OpenGLES 2.0
iOS OpenGLES 3.0 lub Metal Vulkan przez MoltenVK
HTML5 WebGL 2.0 lub WebGPU Awaryjnie WebGL 1.0

P: Czy mogę sprawdzić, jaką wersję uruchamiam?

A: Tak, wybierz opcję About w menu Help. Okno wyraźnie pokazuje wersję beta Defold i, co ważniejsze, konkretny SHA1 wydania. Aby odczytać wersję środowiska uruchomieniowego, użyj sys.get_engine_info().

Najnowszą wersję beta dostępną do pobrania z http://d.defold.com/beta można sprawdzić, otwierając http://d.defold.com/beta/info.json. Ten sam plik istnieje także dla wersji stabilnych: http://d.defold.com/stable/info.json.

P: Czy da się sprawdzić, na jakiej platformie działa gra w czasie uruchomienia?

A: Tak, zobacz sys.get_sys_info().

Pytania o edytor

P: Jakie są wymagania systemowe edytora?

O: Edytor będzie używał do 75% dostępnej pamięci systemu. Na komputerze z 4 GB RAM powinno to wystarczyć dla mniejszych projektów Defold. W przypadku projektów średniej wielkości lub dużych zaleca się 6 GB RAM lub więcej.

P: Czy wersje beta Defold aktualizują się automatycznie?

O: Tak. Wersja beta edytora Defold sprawdza dostępność aktualizacji przy uruchomieniu, tak samo jak wersja stabilna.

P: Dlaczego podczas uruchamiania edytora pojawia się błąd java.awt.AWTError: Assistive Technology not found?

O: Ten błąd jest związany z problemami z technologią wspomagającą Java, taką jak czytnik ekranu NVDA. Prawdopodobnie masz plik .accessibility.properties w katalogu domowym. Usuń ten plik i spróbuj uruchomić edytor ponownie. (Uwaga: jeśli korzystasz z technologii wspomagającej i potrzebujesz, aby ten plik był obecny, skontaktuj się z nami pod adresem info@defold.se, aby omówić alternatywne rozwiązania).

Omówiono to tutaj na forum Defold.

P: Dlaczego podczas uruchamiania edytora pojawia się błąd sun.security.validator.ValidatorException: PKIX path building failed?

O: Ten wyjątek występuje, gdy edytor próbuje nawiązać połączenie https, ale łańcuch certyfikatów dostarczony przez serwer nie może zostać zweryfikowany.

Szczegóły tego błędu znajdziesz pod tym linkiem.

P: Dlaczego podczas wykonywania niektórych operacji pojawia się java.lang.OutOfMemoryError: Java heap space?

O: Edytor Defold jest zbudowany w Javie i w niektórych przypadkach domyślna konfiguracja pamięci Javy może nie wystarczyć. Jeśli tak się stanie, możesz ręcznie skonfigurować edytor tak, aby przydzielał więcej pamięci, edytując plik konfiguracyjny edytora. Plik konfiguracyjny o nazwie config znajduje się w folderze Defold.app/Contents/Resources/ na macOS. Na Windows znajduje się obok pliku wykonywalnego Defold.exe, a na Linux obok pliku wykonywalnego Defold. Otwórz plik config i dodaj -Xmx6gb do linii zaczynającej się od vmargs. Dodanie -Xmx6gb ustawi maksymalny rozmiar sterty na 6 gigabajtów (domyślnie zwykle jest to 4Gb). Powinno to wyglądać mniej więcej tak:

vmargs = -Xmx6gb,-Dfile.encoding=UTF-8,-Djna.nosys=true,-Ddefold.launcherpath=${bootstrap.launcherpath},-Ddefold.resourcespath=${bootstrap.resourcespath},-Ddefold.version=${build.version},-Ddefold.editor.sha1=${build.editor_sha1},-Ddefold.engine.sha1=${build.engine_sha1},-Ddefold.buildtime=${build.time},-Ddefold.channel=${build.channel},-Ddefold.archive.domain=${build.archive_domain},-Djava.net.preferIPv4Stack=true,-Dsun.net.client.defaultConnectTimeout=30000,-Dsun.net.client.defaultReadTimeout=30000,-Djogl.texture.notexrect=true,-Dglass.accessible.force=false,--illegal-access=warn,--add-opens=java.base/java.lang=ALL-UNNAMED,--add-opens=java.desktop/sun.awt=ALL-UNNAMED,--add-opens=java.desktop/sun.java2d.opengl=ALL-UNNAMED,--add-opens=java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED

Pytania o Linuksa

P: Dlaczego edytor Defold jest supermały, gdy uruchamiam go na monitorze 4K lub HiDPI?

O: Jeśli używasz GNOME, możesz przed uruchomieniem Defold zmienić współczynnik skalowania. źródło

$ gsettings set org.gnome.desktop.interface scaling-factor 2
$ ./Defold

O: Alternatywnym rozwiązaniem, szczególnie gdy chcesz skalować interfejs o ułamek, jest zmodyfikowanie pliku Defold/config i dodanie na linii vmargs parametru glass.gtk.uiScale: źródło

vmargs = -Dglass.gtk.uiScale=1.5,-Dfile.encoding=UTF-8,...
vmargs = -Dglass.gtk.uiScale=175%,-Dfile.encoding=UTF-8,...
vmargs = -Dglass.gtk.uiScale=192dpi,-Dfile.encoding=UTF-8,...

Więcej o tej wartości przeczytasz w artykule wiki Arch Linux HiDPI.

O: Jeśli używasz KDE, możesz ustawić GDK_SCALE:

$ GDK_SCALE=2 ./Defold

P: Dlaczego kliknięcia myszy w Elementary OS przechodzą przez edytor i trafiają w to, co jest pod spodem?

O: Uruchom edytor w ten sposób:

$ GTK_CSD=0 ./Defold

P: Edytor Defold ulega awarii podczas otwierania kolekcji lub obiektu gry, a awaria dotyczy com.jogamp.opengl

O: W niektórych dystrybucjach, na przykład Ubuntu 18, występuje problem między wersją jogamp/jogl używaną przez Defold a wersją Mesa zainstalowaną w systemie. Możesz nadpisać wersję GL zgłaszaną przez glGetString(GL_VERSION), ustawiając MESA_GL_VERSION_OVERRIDE na 2.1 albo na większą wartość, ale nie większą niż wersja obsługiwana przez sterownik. Maksymalną wersję OpenGL obsługiwaną przez sterownik możesz sprawdzić za pomocą glxinfo:

glxinfo | grep version

Przykładowy wynik (szukaj wiersza “OpenGL version string: x.y”):

server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
Max core profile version: 4.6
Max compat profile version: 4.6
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
OpenGL core profile version string: 4.6 (Core Profile) Mesa 20.2.6
OpenGL core profile shading language version string: 4.60
OpenGL version string: 4.6 (Compatibility Profile) Mesa 20.2.6
OpenGL shading language version string: 4.60
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.6
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
GL_EXT_shader_implicit_conversions, GL_EXT_shader_integer_mix,

Użyj wersji 2.1 albo wersji zgodnej z wersją sterownika graficznego:

$ MESA_GL_VERSION_OVERRIDE=2.1 ./Defold
$ MESA_GL_VERSION_OVERRIDE=4.6 ./Defold

P: Dlaczego pojawia się błąd “com.jogamp.opengl.GLException: Graphics configuration failed” podczas uruchamiania Defold?

O: W niektórych dystrybucjach, na przykład Ubuntu 20.04, występuje problem z nowymi sterownikami Mesa (Iris) podczas uruchamiania Defold. Możesz spróbować uruchomić Defold ze starszą wersją sterownika:

$ MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold

P: Edytor Defold ulega awarii podczas otwierania kolekcji lub obiektu gry, a awaria dotyczy libffi.so

O: Wersja libffi w twojej dystrybucji i wersja wymagana przez Defold (6 lub 7) nie są zgodne. Upewnij się, że libffi.so.6 albo libffi.so.7 jest zainstalowany w /usr/lib/x86_64-linux-gnu. Możesz pobrać libffi.so.7 w taki sposób:

$ wget http://ftp.br.debian.org/debian/pool/main/libf/libffi/libffi7_3.3-6_amd64.deb
$ sudo dpkg -i libffi7_3.3-6_amd64.deb

Następnie podczas uruchamiania Defold wskaż ścieżkę do tej wersji w zmiennej środowiskowej LD_PRELOAD:

$ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7 ./Defold

P: Czy mogę nadal używać Defold, jeśli moje sterowniki OpenGL są nieaktualne?

O: Tak, może być możliwe korzystanie z Defold po włączeniu renderowania programowego. Możesz je włączyć, ustawiając zmienną środowiskową LIBGL_ALWAYS_SOFTWARE na 1:

$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

P: Dlaczego moja gra stworzona w Defold nie uruchamia się, gdy próbuję ją uruchomić w systemie Linux?

O: Sprawdź wyjście konsoli w edytorze. Jeśli zobaczysz następujący komunikat:

dmengine: error while loading shared libraries: libopenal.so.1: cannot open shared object file: No such file or directory

Musisz zainstalować libopenal1. Nazwa pakietu różni się w zależności od dystrybucji i w niektórych przypadkach może być konieczne zainstalowanie pakietów openal oraz openal-dev lub openal-devel.

$ apt-get install libopenal-dev

P: Dlaczego górne menu zamyka się, zanim zdążę coś wybrać?

O: Najpewniej powoduje to używany menedżer okien, na przykład Qtile lub i3. To znany problem w JavaFX i można go rozwiązać albo przez ustawienie zmiennej środowiskowej GDK_DISPLAY na 1:

$ GDK_DISPLAY=1 ./Defold

D=2

Albo przez zmodyfikowanie pliku Defold/config i dodanie na linii vmargs parametru -Djdk.gtk.version=2:

vmargs = -Djdk.gtk.version=2,-Dfile.encoding=UTF-8,...

P: Dlaczego nie mogę przeglądać wszystkich dostępnych lokalizacji plików po wybraniu Open From Disk?

O: Jeśli uruchamiasz Defold z Steam przez Flatpak, musisz nadać Steam uprawnienia do dostępu do innych dysków. Możesz zmienić uprawnienia aplikacji Flatpak za pomocą Flatseal lub podobnego narzędzia.

P: Dlaczego nie mogę otworzyć web profiler albo innej opcji menu, która wymaga przeglądarki?

O: Najprawdopodobniej wewnętrzne wywołanie Desktop.getDesktop().browse(new URI(url)); kończy się niepowodzeniem, ponieważ w systemach innych niż GNOME nie wykryto przeglądarki. Spróbuj zainstalować libgnome.

$ apt-get install libgnome

Pytania o Androida

P: Czy można ukryć paski nawigacji i stanu w Androidzie?

O: Tak, ustaw opcję immersive_mode w sekcji Android w pliku game.project. Dzięki temu aplikacja może przejąć cały ekran i przechwytywać wszystkie zdarzenia dotykowe na ekranie.

P: Dlaczego podczas instalowania gry Defold na urządzeniu pojawia się błąd “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]”?

O: Android wykrywa, że próbujesz zainstalować aplikację z nowym certyfikatem. Podczas tworzenia pakietów debugowych każda kompilacja jest podpisywana tymczasowym certyfikatem. Przed zainstalowaniem nowej wersji odinstaluj starą aplikację:

$ adb uninstall com.defold.examples
Success
$ adb install Defold\ examples.apk
4826 KB/s (18774344 bytes in 3.798s)
      pkg: /data/local/tmp/Defold examples.apk
Success

P: Dlaczego podczas budowania z niektórymi rozszerzeniami pojawiają się błędy o sprzecznych właściwościach w AndroidManifest.xml?

O: Może się tak zdarzyć, gdy dwa lub więcej rozszerzeń dostarcza szablon manifestu Androida zawierający ten sam tag właściwości, ale z różnymi wartościami. Taka sytuacja miała na przykład miejsce z Firebase i AdMob. Błąd budowania wygląda podobnie do tego:

SEVERE: /tmp/job4531953598647135356/upload/AndroidManifest.xml:32:13-58
Error: Attribute property#android.adservices.AD_SERVICES_CONFIG@resource
value=(@xml/ga_ad_services_config) from AndroidManifest.xml:32:13-58 is also
present at AndroidManifest.xml:92:13-59 value=(@xml/gma_ad_services_config).
Suggestion: add 'tools:replace="android:resource"' to <property> element at
AndroidManifest.xml to override. 

Więcej informacji o tym problemie i obejściu znajdziesz w zgłoszonym problemie Defold #9453 oraz w problemie Google #327696048.

Pytania o HTML5

P: Dlaczego moja aplikacja HTML5 zawiesza się na ekranie startowym w Chrome?

O: W niektórych przypadkach nie da się uruchomić gry w przeglądarce lokalnie z systemu plików. Uruchamianie z edytora udostępnia grę z lokalnego serwera WWW. Możesz na przykład użyć SimpleHTTPServer w Pythonie:

$ python -m SimpleHTTPServer [port]

P: Dlaczego moja gra kończy się błędem “Unexpected data size” podczas wczytywania?

O: Zwykle zdarza się to, gdy używasz Windows, tworzysz build i zatwierdzasz go w repozytorium Git. Jeśli konfiguracja końców linii w Git jest nieprawidłowa, Git zmieni końce linii, a więc także rozmiar danych. Postępuj zgodnie z tymi instrukcjami, aby rozwiązać problem: https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings

Pytania o iOS

P: Nie mogę zainstalować mojej gry Defold, korzystając z darmowego konta Apple Developer.

O: Upewnij się, że w projekcie Defold używasz tego samego identyfikatora bundla, którego użyłeś w projekcie Xcode podczas generowania profilu provisioning dla urządzeń mobilnych.

P: Jak mogę sprawdzić uprawnienia zbudowanej aplikacji?

O: Zobacz Sprawdzanie uprawnień zbudowanej aplikacji:

codesign -d --ent :- /path/to/the.app

P: Jak mogę sprawdzić uprawnienia profilu provisioning?

O: Zobacz Sprawdzanie uprawnień profilu provisioning:

security cms -D -i /path/to/iOSTeamProfile.mobileprovision

Pytania o Windows

P: Dlaczego węzły GUI typu box bez tekstury są przezroczyste w edytorze, ale po zbudowaniu i uruchomieniu wyglądają poprawnie?

O: Ten błąd może występować na komputerach z kartami graficznymi AMD Radeon. Upewnij się, że masz zaktualizowane sterowniki graficzne.

P: Dlaczego podczas otwierania atlasu lub widoku sceny pojawia się błąd com.sun.jna.Native.open.class java.lang.Error: Access is denied?

O: Spróbuj uruchomić Defold jako administrator. Kliknij plik wykonywalny Defold prawym przyciskiem myszy i wybierz Run as Administrator.

P: Dlaczego moja gra nie renderuje się poprawnie w Windows na zintegrowanym układzie Intel UHD, choć wersja HTML5 działa?

O: Upewnij się, że sterownik jest zaktualizowany do wersji nie niższej niż 27.20.100.8280. Sprawdź to za pomocą narzędzia Intel Driver Support Assistant. Dodatkowe informacje znajdziesz w tym wpisie na forum.

P: Edytor Defold się zawiesza, a w logu widzę AWTError: Assistive Technology not found

Jeśli edytor ulega awarii, a w logu pojawia się wpis Caused by: java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge, wykonaj następujące kroki:

  • Przejdź do C:\Users\<username>
  • Otwórz plik .accessibility.properties w zwykłym edytorze tekstu (Notatnik też wystarczy)
  • Znajdź w konfiguracji następujące linie:
assistive_technologies=com.sun.java.accessibility.AccessBridge
screen_magnifier_present=true
  • Dodaj przed tymi liniami znak hash (#)
  • Zapisz zmiany w pliku i uruchom Defold ponownie

Pytania o konsole

P: Czy muszę instalować dodatkowe narzędzia, aby budować na konsole?

O: Będziesz mógł tworzyć pakiety aplikacji z poziomu edytora i narzędzi wiersza poleceń. Informacje o tym, jak testować na sprzęcie PlayStation®4, PlayStation®5 i Nintendo Switch, zostaną Ci udostępnione po uzyskaniu dostępu do odpowiednich platform.

P: Czy nadal łatwo jest używać jednej bazy kodu, jeśli zdecyduję się także na konsole?

O: Tak, wszystkie standardowe funkcje API Defold są również dostępne na platformach konsolowych. Oprócz standardowej funkcjonalności będziesz też mieć dostęp do kilku funkcji specyficznych dla PlayStation®4, PlayStation®5 i Nintendo Switch, ale zasadniczo kod może pozostać dokładnie taki sam na wielu platformach.

Publikowanie gier

P: Próbuję opublikować moją grę w App Store. Jak powinienem odpowiedzieć na IDFA?

A: Podczas przesyłania aplikacji Apple pokazuje trzy pola wyboru dla trzech poprawnych przypadków użycia IDFA:

  1. Wyświetlanie reklam w aplikacji
  2. Atrybucja instalacji na podstawie reklam
  3. Atrybucja działań użytkownika na podstawie reklam

Jeśli zaznaczysz opcję 1, recenzent aplikacji będzie szukał reklam w aplikacji. Jeśli twoja gra nie wyświetla reklam, może zostać odrzucona. Sam Defold nie używa identyfikatora reklamowego.

P: Jak mogę monetyzować swoją grę?

A: Defold obsługuje zakupy w aplikacji oraz różne rozwiązania reklamowe. Sprawdź kategorię Monetization w Asset Portal, aby zobaczyć aktualną listę dostępnych opcji monetyzacji.

Błędy w Defold

P: Nie mogę uruchomić gry i nie ma błędu budowania. Co jest nie tak?

A: Proces budowania może w rzadkich przypadkach nie przebudować plików, jeśli wcześniej wystąpiły błędy budowania, które już naprawiłeś. Wymuś pełną przebudowę, wybierając Project > Rebuild And Launch z menu.

Zawartość gry

P: Czy Defold obsługuje prefaby?

A: Tak. Nazywają się kolekcje. Pozwalają tworzyć złożone hierarchie obiektów gry i przechowywać je jako oddzielne elementy składowe, które można instancjonować w edytorze lub w czasie działania programu, przez tworzenie instancji kolekcji. Dla węzłów GUI dostępne są szablony GUI.

P: Dlaczego nie mogę dodać obiektu gry jako dziecka innego obiektu gry?

A: Najprawdopodobniej próbujesz dodać obiekt podrzędny w pliku obiektu gry, a to nie jest możliwe. Jest to możliwe tylko w pliku kolekcji. Aby zrozumieć dlaczego, trzeba pamiętać, że hierarchie rodzic-dziecko są wyłącznie hierarchią transformacji grafu sceny. Obiekt gry, który nie został umieszczony (lub utworzony dynamicznie) w scenie (kolekcji), nie należy do grafu sceny, więc nie może być częścią takiej hierarchii. Możesz sprawdzić id rodzica danego obiektu gry używając go.get_parent().

P: Dlaczego nie mogę rozsyłać wiadomości do wszystkich dzieci obiektu gry?

A: Relacje rodzic-dziecko wyrażają wyłącznie relacje transformacji w grafie sceny i nie należy ich mylić z agregatami obiektów w programowaniu obiektowym. Jeśli skupisz się na danych swojej gry i na tym, jak najlepiej je przekształcać, gdy gra zmienia stan, prawdopodobnie rzadziej będziesz musiał wysyłać wiadomości z danymi stanu do wielu obiektów jednocześnie. Tam, gdzie potrzebujesz hierarchii danych, można je łatwo tworzyć i obsługiwać w Lua.

P: Dlaczego widzę artefakty wizualne wokół krawędzi moich sprite’ów?

A: To artefakt wizualny nazywany “edge bleeding”, w którym piksele z krawędzi sąsiednich obrazów w atlasie przenikają do obrazu przypisanego do sprite’a. Rozwiązaniem jest dodanie dodatkowych wierszy i kolumn identycznych pikseli na obrzeżach obrazów atlasu. Na szczęście można to zrobić automatycznie w edytorze atlasu w Defold. Otwórz atlas i ustaw wartość właściwości Extrude Borders na 1.

P: Czy mogę barwić sprite’y albo uczynić je przezroczystymi, czy muszę napisać do tego własny shader?

A: Wbudowany shader sprite’a, używany domyślnie dla wszystkich sprite’ów, ma zdefiniowaną stałą “tint”:

  local red = 1
  local green = 0.3
  local blue = 0.55
  local alpha = 1
  go.set("#sprite", "tint", vmath.vector4(red, green, blue, alpha))

P: Jeśli ustawię współrzędną Z sprite’a na 100, to nie będzie renderowany. Dlaczego?

A: Pozycja Z obiektu gry kontroluje kolejność renderowania. Niższe wartości są rysowane przed wyższymi. W domyślnym skrypcie do renderowania rysowane są obiekty gry o głębokości od -1 do 1, a wszystko poza tym zakresem nie zostanie narysowane. Więcej o skrypcie do renderowania przeczytasz w oficjalnej dokumentacji renderowania. W przypadku węzłów GUI wartość Z jest ignorowana i w ogóle nie wpływa na kolejność renderowania. Zamiast tego węzły są renderowane w kolejności, w jakiej widnieją na liście, oraz zgodnie z hierarchią węzłów podrzędnych i warstwami. Więcej o renderowaniu GUI i optymalizacji wywołań rysowania z użyciem warstw przeczytasz w oficjalnej dokumentacji GUI.

P: Czy zmiana zakresu Z projekcji widoku na zakres od -100 do 100 wpłynęłaby na wydajność?

A: Nie. Jedyny efekt dotyczy precyzji. Bufor Z jest logarytmiczny i ma bardzo wysoką rozdzielczość wartości Z blisko 0 oraz mniejszą rozdzielczość dalej od 0. Na przykład przy 24-bitowym buforze wartości 10.0 i 10.000005 można odróżnić, natomiast 10000 i 10005 już nie.

P: Dlaczego sposób reprezentacji kątów jest niespójny?

A: W rzeczywistości istnieje spójność. Kąty są wszędzie w edytorze i w API gry wyrażane w stopniach. Biblioteki matematyczne używają radianów. Obecnie wyjątek stanowi właściwość fizyki angular_velocity, która jest wyrażana w radianach/s. To ma się zmienić.

P: Gdy tworzę węzeł GUI typu box z samym kolorem, bez tekstury, jak będzie renderowany?

A: To po prostu pokolorowany prostokątny kształt. Trzeba jednak pamiętać, że nadal będzie kosztować wypełnianie.

P: Jeśli w locie zmienię zasoby, czy silnik automatycznie je zwolni?

A: Wszystkie zasoby są wewnętrznie objęte zliczaniem referencji. Gdy tylko licznik referencji spadnie do zera, zasób zostaje zwolniony.

P: Czy można odtwarzać dźwięk bez używania komponentu dźwięku dołączonego do obiektu gry?

A: W Defold wszystko jest oparte na komponentach. Można utworzyć pusty obiekt gry z wieloma dźwiękami i odtwarzać je, wysyłając wiadomości do obiektu sterującego dźwiękiem.

P: Czy można w czasie działania zmienić plik dźwiękowy powiązany z komponentem dźwięku?

A: Zasadniczo wszystkie zasoby są deklarowane statycznie, dzięki czemu zarządzanie nimi dostajesz za darmo. Możesz użyć właściwości zasobów, aby zmienić zasób przypisany do komponentu.

P: Czy istnieje sposób na dostęp do właściwości kształtu kolizji w fizyce?

A: Tak, sprawdź funkcji API fizyki, w szczególności physics.get_shape() i physics.set_shape().

P: Czy istnieje jakiś szybki sposób na renderowanie obiektów kolizji w mojej scenie? (jak debug draw w Box2D)

A: Tak, ustaw flagę physics.debug w game.project. (Zobacz oficjalną dokumentację ustawień projektu)

P: Jakie są koszty wydajnościowe wielu kontaktów i kolizji?

A: Defold uruchamia w tle zmodyfikowaną wersję Box2D, więc koszt wydajnościowy powinien być bardzo podobny. Zawsze możesz sprawdzić, ile czasu silnik spędza na fizyce, otwierając profiler. Powinieneś też wziąć pod uwagę, jakiego rodzaju obiekty kolizji używasz. Na przykład obiekty statyczne są tańsze wydajnościowo. Zobacz oficjalną dokumentację fizyki w Defold, aby uzyskać więcej szczegółów.

P: Jaki jest wpływ na wydajność wielu komponentów efektów cząsteczkowych?

A: To zależy od tego, czy są odtwarzane, czy nie. Nieodtwarzany ParticleFX nie ma kosztu wydajnościowego. Wpływ odtwarzanego ParticleFX trzeba ocenić za pomocą profilera, ponieważ zależy od jego konfiguracji. Jak w większości innych przypadków pamięć jest przydzielana z góry dla liczby komponentów ParticleFX zdefiniowanej jako max_count w game.project.

P: Jak mogę odbierać wejście w obiekcie gry wewnątrz kolekcji załadowanej przez pełnomocnika kolekcji?

A: Każda kolekcja załadowana przez pełnomocnika kolekcji ma własny stos wejścia. Wejście jest kierowane ze stosu wejścia głównej kolekcji przez komponent pełnomocnika kolekcji do obiektów w kolekcji. Oznacza to, że nie wystarczy, aby obiekt gry w załadowanej kolekcji przejął skupienie wejścia. Obiekt gry, który zawiera komponent pełnomocnika kolekcji, również musi przejąć skupienie wejścia. Zobacz dokumentację wejścia, aby uzyskać szczegóły.

P: Czy mogę używać właściwości skryptowych typu string?

A: Nie. Defold obsługuje właściwości typu hash. Można ich używać do oznaczania typów, identyfikatorów stanu lub dowolnych kluczy. Hashe można też wykorzystywać do przechowywania identyfikatorów obiektów gry (ścieżek), choć często lepsze są właściwości url, ponieważ edytor automatycznie wypełnia listę rozwijaną odpowiednimi adresami URL. Zobacz dokumentację właściwości skryptowych, aby uzyskać szczegóły.

P: Jak uzyskać dostęp do poszczególnych komórek macierzy (utworzonej za pomocą vmath.matrix4() lub podobnej)?

A: Dostęp do komórek uzyskujesz przez mymatrix.m11, mymatrix.m12, mymatrix.m21 itd.

P: Dostaję komunikat Not enough resources to clone the node podczas używania gui.clone() lub gui.clone_tree()

A: Zwiększ wartość Max Nodes komponentu GUI. Znajdziesz ją w panelu Properties, gdy zaznaczysz korzeń komponentu w Outline.

Forum

P: Czy mogę założyć wątek, w którym reklamuję swoją pracę?

A: Oczywiście! Mamy do tego specjalną kategorię “Work for hire”. Zawsze wspieramy wszystko, co służy społeczności, a oferowanie swoich usług społeczności, za wynagrodzeniem lub bez, jest tego dobrym przykładem.

P: Założyłem wątek i dodałem swoją pracę. Czy mogę dodać więcej?

A: Aby ograniczyć podbijanie wątków z kategorii “Work for hire”, nie możesz pisać w swoim własnym wątku częściej niż raz na 14 dni, chyba że jest to bezpośrednia odpowiedź na komentarz w wątku, wtedy możesz odpowiedzieć. Jeśli chcesz dodać dodatkową pracę do wątku w ciągu 14 dni, musisz edytować istniejące posty i dopisać do nich nową treść.

P: Czy mogę użyć kategorii „Work for hire” do publikowania ofert pracy?

A: Jasne, śmiało! Można jej używać zarówno do ofert, jak i do próśb o współpracę, na przykład: „Programista szuka grafika 2D specjalizującego się w pixel arcie. Mam pieniądze i dobrze zapłacę”.