FAQ
FAQ

Read this FAQ in English

Perguntas frequentes

Perguntas gerais

P: O Defold é realmente gratuito?

R: Sim, a engine e o editor Defold, com funcionalidade completa, são totalmente gratuitos. Sem custos escondidos, taxas ou royalties. Apenas gratuito.

P: Por que a Defold Foundation disponibiliza o Defold de graça?

R: Um dos objetivos da Defold Foundation é garantir que o software Defold esteja disponível para desenvolvedores do mundo todo e que o código-fonte esteja disponível gratuitamente.

P: Por quanto tempo vocês darão suporte ao Defold?

R: Temos um compromisso profundo com o Defold. A Defold Foundation foi constituída de uma forma que garante sua existência como proprietária responsável pelo Defold por muitos anos. Ela não vai desaparecer.

P: Posso confiar no Defold para desenvolvimento profissional?

R: Com certeza. O Defold é usado por um número crescente de desenvolvedores profissionais de jogos e estúdios de jogos. Confira a demonstração de jogos para ver exemplos de jogos criados com o Defold.

P: Que tipo de rastreamento de usuário vocês fazem?

R: Registramos dados de uso anônimos dos nossos sites e do editor Defold para melhorar nossos serviços e produto. Não há rastreamento de usuário nos jogos que você cria, a menos que você mesmo adicione um serviço de analytics. Leia mais sobre isso em nossa Política de Privacidade.

P: Quem criou o Defold?

R: O Defold foi criado por Ragnar Svensson e Christian Murray. Eles começaram a trabalhar na engine, no editor e nos servidores em 2009. A King e o Defold iniciaram uma parceria em 2013, e a King adquiriu o Defold em 2014. Leia a história completa aqui.

Perguntas sobre desenvolvimento de jogos

P: Posso fazer jogos 3D no Defold?

R: Com certeza! A engine é uma engine 3D completa. No entanto, o conjunto de ferramentas foi criado para 2D, então você precisará fazer bastante trabalho por conta própria. Um suporte melhor a 3D está planejado.

Perguntas sobre linguagens de programação

P: Com qual linguagem de programação eu trabalho no Defold?

R: A lógica de jogo no seu projeto Defold é escrita principalmente usando a linguagem Lua, especificamente Lua 5.1/LuaJIT; consulte o manual de Lua para detalhes. Lua é uma linguagem dinâmica leve, rápida e muito poderosa. O Defold suporta o uso de transpiladores que emitem código Lua. Com uma extensão de transpilador instalada, você pode usar linguagens alternativas, como Teal, para escrever Lua com verificação estática. Você também pode usar código nativo (C/C++, Objective-C, Java e JavaScript, dependendo da plataforma) para estender a engine Defold com novas funcionalidades. Ao criar materiais personalizados, a linguagem de shader OpenGL ES SL é usada para escrever vertex shaders e fragment shaders.

P: Posso usar C++ para escrever lógica de jogo?

R: O suporte a C++ existe no Defold principalmente para escrever extensões nativas que fazem interface com SDKs de terceiros ou APIs específicas de plataforma. A dmSDK (a API C++ do Defold usada em extensões nativas) será expandida gradualmente com mais funcionalidades para que seja possível escrever toda a lógica de jogo em C++, se um desenvolvedor desejar. Lua ainda será a principal linguagem usada para lógica de jogo, mas, com a API C++ expandida, também será possível escrever lógica de jogo usando C++. O trabalho para expandir a API C++ envolve principalmente mover arquivos de cabeçalho privados existentes para a seção pública e limpar APIs para uso público.

P: Posso usar TypeScript com o Defold?

R: TypeScript não tem suporte oficial. A comunidade mantém um toolkit, ts-defold, para escrever TypeScript e transpilar para Lua diretamente a partir do VSCode.

P: Posso usar Haxe com o Defold?

R: Haxe não tem suporte oficial. A comunidade mantém hxdefold para escrever Haxe e transpilar para Lua.

P: Posso usar C# com o Defold?

R: A Defold Foundation adicionou suporte a C# e o disponibilizou como uma dependência de biblioteca. C# é uma linguagem de programação amplamente adotada, e isso ajudará estúdios e desenvolvedores com grande investimento em C# a fazer a transição para o Defold.

P: Estou preocupado que adicionar suporte a C# tenha um impacto negativo no Defold. Devo me preocupar?

R: O Defold NÃO está deixando Lua como a principal linguagem de script. O suporte a C# foi adicionado como uma nova linguagem para extensões. Ele não afetará a engine, a menos que você escolha usar extensões C# no seu projeto.

O suporte a C# terá um custo (tamanho do executável, desempenho em runtime etc.), mas isso cabe a cada desenvolvedor ou estúdio decidir.

Quanto ao C# em si, é uma mudança relativamente pequena, já que o sistema de extensões já suporta várias linguagens (C/C++/Java/Objective-C/Zig). Os SDKs serão mantidos em sincronia por meio da geração dos bindings C#. Isso manterá os bindings atualizados com esforço mínimo.

A Defold Foundation já foi contra adicionar suporte a C# no Defold, mas mudou de opinião por vários motivos:

  • Estúdios e desenvolvedores continuam solicitando suporte a C#.
  • O escopo do suporte a C# foi reduzido apenas a extensões (ou seja, baixo esforço).
  • A engine principal não será afetada.
  • As APIs C# podem ser mantidas em sincronia com esforço mínimo se forem geradas.
  • O suporte a C# será baseado em DotNet 9 com NativeAOT, gerando bibliotecas estáticas às quais o pipeline de build existente pode vincular, como qualquer outra extensão do Defold.

Perguntas sobre plataformas

P: Em quais plataformas o Defold roda?

R: As seguintes plataformas têm suporte para o editor/ferramentas e para o runtime da engine:

Sistema Versão Arquiteturas Suporte
macOS 11 Big Sur x86-64, arm-64 Editor e Engine
Windows Vista x86-32, x86-64 Editor e Engine
Ubuntu (1) 22.04 LTS x86-64 Editor
Linux (2) Qualquer x86-64, arm-64 Engine
iOS 15.0 arm-64 x86_64 Engine
Android 5.0 (API level 21) arm-32, arm-64 Engine
HTML5   asm.js, wasm Engine

(1 O editor é compilado e testado para Ubuntu 64-bit. Ele também deve funcionar em outras distribuições, mas não damos garantias.)

(2 O runtime da engine deve rodar na maioria das distribuições Linux 64-bit, desde que os drivers gráficos estejam atualizados; veja abaixo mais informações sobre APIs gráficas.)

P: Para quais plataformas-alvo posso desenvolver jogos com o Defold?

R: Com um clique, você pode publicar para PS4™, PS5™, Nintendo Switch, iOS (64-bit), Android (32-bit e 64-bit) e HTML5, além de macOS (x86-64 e arm64), Windows (32-bit e 64-bit) e Linux (x86-64 e arm64). É realmente uma única base de código com várias plataformas suportadas.

P: De qual API de renderização o Defold depende?

R: Como desenvolvedor, você só precisa se preocupar com uma única API de renderização usando um pipeline de renderização totalmente programável. A API de script de renderização do Defold traduz operações de renderização para as seguintes APIs gráficas:

Sistema API gráfica Observação
macOS OpenGL 3.3 ou Metal Vulkan via MoltenVK
Windows OpenGL 3.3 ou Vulkan 1.1  
Linux OpenGL 3.3 ou Vulkan 1.1  
Android OpenGLES 3.0 ou Vulkan 1.1 Fallback para OpenGLES 2.0
iOS OpenGLES 3.0 ou Metal Vulkan via MoltenVK
HTML5 WebGL 2.0 ou WebGPU Fallback para WebGL 1.0

P: Existe uma forma de saber qual versão estou executando?

R: Sim, selecione a opção “About” no menu Help. O popup mostra claramente a versão beta do Defold e, mais importante, o SHA1 específico da release. Para consultar a versão em runtime, use sys.get_engine_info().

A versão beta mais recente disponível para download em http://d.defold.com/beta pode ser verificada abrindo http://d.defold.com/beta/info.json (o mesmo arquivo também existe para versões estáveis: http://d.defold.com/stable/info.json).

P: Existe uma forma de saber em qual plataforma o jogo está rodando em runtime?

R: Sim, consulte sys.get_sys_info().

Perguntas sobre o editor

P: Quais são os requisitos de sistema para o editor?

R: O editor usará até 75% da memória disponível do sistema. Em um computador com 4 GB de RAM, isso deve ser suficiente para projetos Defold menores. Para projetos médios ou grandes, recomenda-se usar 6 GB ou mais de RAM.

P: As versões beta do Defold são atualizadas automaticamente?

R: Sim. O editor beta do Defold verifica se há uma atualização na inicialização, assim como a versão estável do Defold.

P: Por que recebo um erro dizendo java.awt.AWTError: Assistive Technology not found ao iniciar o editor?

R: Esse erro está relacionado a problemas com tecnologia assistiva Java, como o leitor de tela NVDA. Você provavelmente tem um arquivo .accessibility.properties na sua pasta home. Remova o arquivo e tente iniciar o editor novamente. (Observação: se você usa alguma tecnologia assistiva e precisa que esse arquivo esteja presente, entre em contato conosco pelo endereço info@defold.se para discutir soluções alternativas).

Discutido aqui no fórum do Defold.

P: Por que recebo um erro dizendo sun.security.validator.ValidatorException: PKIX path building failed ao iniciar o editor?

R: Essa exceção ocorre quando o editor tenta fazer uma conexão https, mas a cadeia de certificados fornecida pelo servidor não pode ser verificada.

Veja este link para detalhes sobre esse erro.

P: Por que recebo um java.lang.OutOfMemoryError: Java heap space ao executar certas operações?

R: O editor Defold é criado com Java e, em alguns casos, a configuração padrão de memória do Java pode não ser suficiente. Se isso acontecer, você pode configurar manualmente o editor para alocar mais memória editando o arquivo de configuração do editor. O arquivo de configuração, chamado config, fica na pasta Defold.app/Contents/Resources/ no macOS. No Windows, ele fica ao lado do executável Defold.exe; no Linux, ao lado do executável Defold. Abra o arquivo config e adicione -Xmx6gb à linha que começa com vmargs. Adicionar -Xmx6gb definirá o tamanho máximo da heap para 6 gigabytes (o padrão geralmente é 4Gb). Ele deve ficar parecido com isto:

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

Perguntas sobre Linux

P: Por que o editor Defold fica muito pequeno quando executado em um monitor 4K ou HiDPI?

R: Se você estiver usando GNOME, é possível alterar o fator de escala antes de rodar o Defold. fonte

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

R: Uma solução alternativa, especialmente quando você deseja aumentar a escala por uma fração, é modificar o arquivo Defold/config e, na linha vmargs, adicionar glass.gtk.uiScale: fonte

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,...

Mais sobre esse valor no artigo da wiki do Arch Linux sobre HiDPI.

R: Se você estiver usando KDE, é possível definir GDK_SCALE:

$ GDK_SCALE=2 ./Defold

P: Por que cliques do mouse no Elementary OS atravessam o editor e atingem o que está abaixo?

R: Inicie o editor assim:

$ GTK_CSD=0 ./Defold

P: O editor Defold trava ao abrir uma coleção ou objeto de jogo e o crash se refere a com.jogamp.opengl

R: Em certas distribuições (como Ubuntu 18), há um problema entre a versão de jogamp/jogl que o Defold usa e a versão do Mesa no sistema. Você pode sobrescrever qual versão de GL é relatada ao chamar glGetString(GL_VERSION) definindo MESA_GL_VERSION_OVERRIDE como 2.1 ou um valor maior, mas menor ou igual à versão do seu driver. Você pode verificar qual é a versão máxima do OpenGL compatível com seu driver usando glxinfo:

glxinfo | grep version

Exemplo de saída (procure por “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,

Use a versão 2.1 ou a versão correspondente ao seu driver gráfico:

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

P: Por que recebo “com.jogamp.opengl.GLException: Graphics configuration failed” ao iniciar o Defold?

R: Em certas distribuições (por exemplo, Ubuntu 20.04), há um problema com os novos drivers Mesa (Iris) ao rodar o Defold. Você pode tentar usar uma versão de driver mais antiga ao rodar o Defold:

$ MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold

P: O editor Defold trava ao abrir uma coleção ou objeto de jogo e o crash se refere a libffi.so

R: A versão da libffi da sua distribuição e a exigida pelo Defold (versão 6 ou 7) não correspondem. Certifique-se de que libffi.so.6 ou libffi.so.7 esteja instalado em /usr/lib/x86_64-linux-gnu. Você pode baixar libffi.so.7 assim:

$ 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

Em seguida, especifique o caminho para essa versão na variável de ambiente LD_PRELOAD ao rodar o Defold:

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

P: Meus drivers OpenGL estão desatualizados. Ainda posso usar o Defold?

R: Sim, talvez seja possível usar o Defold se você habilitar a renderização por software. Você pode habilitar a renderização por software definindo a variável de ambiente LIBGL_ALWAYS_SOFTWARE como 1:

$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

P: Por que meu jogo Defold não inicia quando tento rodá-lo no Linux?

R: Verifique a saída do console no editor. Se você receber a seguinte mensagem:

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

Então você precisa instalar libopenal1. O nome do pacote varia entre distribuições e, em alguns casos, talvez você precise instalar os pacotes openal e openal-dev ou openal-devel.

$ apt-get install libopenal-dev

P: Por que o menu superior fecha antes que eu consiga selecionar algo?

R: Isso provavelmente é causado pelo gerenciador de janelas usado (por exemplo, Qtile ou i3). Este é um problema conhecido no JavaFX e pode ser resolvido definindo a variável de ambiente GDK_DISPLAY como 1:

$ GDK_DISPLAY=1 ./Defold

D=2

Ou modificando o arquivo Defold/config e adicionando -Djdk.gtk.version=2 à linha vmargs:

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

P: Por que não consigo navegar por todos os locais de arquivo disponíveis ao selecionar Open From Disk?

R: Se você estiver executando o Defold pela Steam usando Flatpak, precisa dar permissão à Steam para acessar seus outros discos. Você pode modificar as permissões dos seus aplicativos Flatpak usando o Flatseal ou uma ferramenta similar.

P: Por que não consigo abrir o perfilador web ou qualquer outra opção de menu que exige um navegador?

R: É provável que uma chamada interna para Desktop.getDesktop().browse(new URI(url)); falhe porque nenhum navegador é detectado em sistemas não GNOME. Tente instalar libgnome.

$ apt-get install libgnome

Perguntas sobre Android

P: É possível ocultar as barras de navegação e status no Android?

R: Sim, defina a configuração immersive_mode na seção Android do seu arquivo game.project. Isso permite que seu aplicativo ocupe a tela inteira e capture todos os eventos de toque na tela.

P: Por que recebo “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]” ao instalar um jogo Defold no dispositivo?

R: O Android detecta que você está tentando instalar o aplicativo com um novo certificado. Ao empacotar builds de debug, cada build será assinada com um certificado temporário. Desinstale o aplicativo antigo antes de instalar a nova versão:

$ 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: Por que recebo erros sobre propriedades conflitantes em AndroidManifest.xml ao compilar com certas extensões?

R: Isso pode acontecer quando duas ou mais extensões fornecem um stub de Android Manifest que contém a mesma tag de propriedade, mas com valores diferentes. Isso já aconteceu, por exemplo, com Firebase e AdMob. O erro de build se parece com isto:

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.

Você pode ler mais sobre o problema e a solução alternativa na issue do Defold relatada #9453 e na issue do Google #327696048.

Perguntas sobre HTML5

P: Por que meu aplicativo HTML5 congela na tela inicial no Chrome?

R: Em alguns casos, não é possível rodar um jogo localmente no navegador a partir do sistema de arquivos. Ao rodar pelo editor, o jogo é servido a partir de um servidor web local. Você pode, por exemplo, usar SimpleHTTPServer em Python:

$ python -m SimpleHTTPServer [port]

P: Por que meu jogo trava com o erro “Unexpected data size” durante o carregamento?

R: Isso geralmente acontece quando você está usando Windows, faz uma build e a commita no Git. Se você tiver uma configuração errada de finais de linha no Git, ele mudará seus finais de linha e, portanto, também o tamanho dos dados. Siga estas instruções para resolver o problema: https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings

Perguntas sobre iOS

P: Não consigo instalar meu jogo Defold usando uma conta gratuita de Apple Developer.

R: Certifique-se de usar no seu projeto Defold o mesmo bundle identifier que você usou no projeto Xcode ao gerar o perfil de provisionamento móvel.

P: Como posso verificar os entitlements de uma aplicação empacotada?

R: De Inspect the entitlements of a built app:

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

P: Como posso verificar os entitlements de um perfil de provisionamento?

R: De Inspecting a profile’s entitlements:

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

Perguntas sobre Windows

P: Por que nós box de GUI sem uma textura ficam transparentes no editor, mas aparecem como esperado quando compilo e executo?

R: Esse erro pode acontecer em computadores que usam GPUs AMD Radeon. Certifique-se de atualizar seus drivers gráficos.

P: Por que recebo com.sun.jna.Native.open.class java.lang.Error: Access is denied ao abrir um atlas ou uma visualização de cena?

R: Tente executar o Defold como administrador. Clique com o botão direito no executável do Defold e selecione “Run as Administrator”.

P: Por que meu jogo não renderiza corretamente no Windows usando uma GPU integrada Intel UHD (mas minha build HTML5 funciona)?

R: Certifique-se de atualizar seu driver para uma versão maior ou igual a 27.20.100.8280. Verifique com o Intel Driver Support Assistant. Informações adicionais podem ser encontradas nesta postagem do fórum.

P: O editor Defold está travando e o log mostra AWTError: Assistive Technology not found

Se o editor travar com um log mencionando Caused by: java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge, siga estes passos:

  • Navegue até C:\Users\<username>
  • Abra o arquivo chamado .accessibility.properties usando um editor de texto padrão (Notepad serve)
  • Encontre as seguintes linhas na configuração:
assistive_technologies=com.sun.java.accessibility.AccessBridge
screen_magnifier_present=true
  • Adicione uma cerquilha (#) na frente dessas linhas
  • Salve suas alterações no arquivo e reinicie o Defold

Perguntas sobre consoles

P: Preciso instalar ferramentas adicionais para criar builds para consoles?

R: Você poderá criar bundles de aplicação pelo editor e pelas ferramentas de linha de comando. Informações sobre como testar em hardware PlayStation®4, PlayStation®5 e Nintendo Switch serão fornecidas a você quando receber acesso às respectivas plataformas.

P: Ainda é fácil usar uma única base de código se eu decidir também mirar consoles?

R: Sim, todas as funções padrão da API do Defold também estão disponíveis para as plataformas de console. Além da funcionalidade padrão, você também terá acesso a algumas funções específicas de PlayStation®4, PlayStation®5 e Nintendo Switch, mas, em geral, o código deve poder permanecer exatamente igual em várias plataformas.

Publicando jogos

P: Estou tentando publicar meu jogo na AppStore. Como devo responder sobre o IDFA?

R: Ao enviar, a Apple apresenta três caixas de seleção para os três casos de uso válidos do IDFA:

  1. Serve ads within the app
  2. Install attribution from ads
  3. User action attribution from ads

Se você marcar a opção 1, o revisor do app procurará anúncios aparecendo no app. Se seu jogo não mostra anúncios, ele pode ser rejeitado. O Defold em si não usa AD id.

P: Como monetizo meu jogo?

R: O Defold tem suporte a compras dentro do aplicativo e várias soluções de publicidade. Consulte a categoria Monetização no Portal de Assets para ver uma lista atualizada das opções de monetização disponíveis.

Erros ao usar o Defold

P: Não consigo iniciar o jogo e não há erro de build. O que está errado?

R: O processo de build pode deixar de recompilar arquivos em casos raros em que já encontrou erros de build que você corrigiu. Force um rebuild completo selecionando Project > Rebuild And Launch no menu.

Conteúdo de jogo

P: O Defold suporta prefabs?

R: Sim. Eles são chamados de coleções. Elas permitem criar hierarquias complexas de objetos de jogo e armazená-las como blocos de construção separados que você pode instanciar no editor ou em runtime, por meio da geração de coleções. Para nodes de GUI, há suporte a templates de GUI.

P: Não consigo adicionar um objeto de jogo como filho de outro objeto de jogo. Por quê?

R: É provável que você esteja tentando adicionar um filho no arquivo de objeto de jogo, e isso não é possível. Isso só é possível no arquivo de coleção. Para entender o motivo, lembre-se de que hierarquias pai-filho são estritamente uma hierarquia de transformação de scene-graph. Um objeto de jogo que não foi colocado (ou gerado) em uma cena (coleção) não faz parte de um scene-graph e, portanto, não pode fazer parte de uma hierarquia de scene-graph. Você pode obter o id do pai do objeto de jogo usando go.get_parent().

P: Por que não consigo enviar mensagens em broadcast para todos os filhos de um objeto de jogo?

R: Relações pai-filho não expressam nada além das relações de transformação no scene-graph e não devem ser confundidas com agregados de orientação a objetos. Se você tentar focar nos dados do jogo e em como transformá-los da melhor maneira à medida que o jogo altera seu estado, provavelmente terá menos necessidade de enviar mensagens com dados de estado para muitos objetos o tempo todo. Nos casos em que você precisar de hierarquias de dados, elas são facilmente construídas e manipuladas em Lua.

P: Por que estou vendo artefatos visuais ao redor das bordas dos meus sprites?

R: Isso é um artefato visual chamado “edge bleeding”, em que pixels das bordas de imagens vizinhas em um atlas vazam para a imagem atribuída ao seu sprite. A solução é preencher as bordas das imagens do atlas com linhas e colunas extras de pixels idênticos. Felizmente, isso pode ser feito automaticamente pelo editor de atlas do Defold. Abra seu atlas e defina o valor de Extrude Borders como 1.

P: Posso tingir meus sprites ou torná-los transparentes, ou preciso escrever meu próprio shader para isso?

R: O shader de sprite integrado, usado por padrão em todos os sprites, tem uma constante “tint” definida:

  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: Se eu definir a coordenada z de um sprite como 100, ele não é renderizado. Por quê?

R: A posição Z de um objeto de jogo controla a ordem de renderização. Valores baixos são desenhados antes de valores mais altos. No script de renderização padrão, objetos de jogo com profundidade entre -1 e 1 são desenhados; qualquer coisa abaixo ou acima disso não será desenhada. Você pode ler mais sobre o script de renderização na documentação oficial de renderização. Em nodes de GUI, o valor Z é ignorado e não afeta a ordem de renderização. Em vez disso, os nodes são renderizados na ordem em que estão listados e de acordo com hierarquias de filhos (e camadas). Leia mais sobre renderização de GUI e otimização de draw calls usando camadas na documentação oficial de GUI.

P: Alterar o intervalo Z da projeção de visualização para -100 a 100 afetaria o desempenho?

R: Não. O único efeito é a precisão. O z-buffer é logarítmico e tem resolução muito fina para valores de z próximos de 0, e menos resolução longe de 0. Por exemplo, com um buffer de 24 bits, os valores 10.0 e 10.000005 podem ser diferenciados, enquanto 10000 e 10005 não podem.

P: Não há consistência na forma como os ângulos são representados. Por quê?

R: Na verdade, há consistência. Os ângulos são expressos em graus em todos os lugares do editor e das APIs de jogo. As bibliotecas matemáticas usam radianos. Atualmente, a convenção falha na propriedade de física angular_velocity, que hoje é expressa em radianos/s. Espera-se que isso mude.

P: Ao criar um node GUI do tipo box apenas com cor (sem textura), como ele será renderizado?

R: É apenas uma forma colorida por vértices. Tenha em mente que ela ainda terá custo de fill-rate.

P: Se eu alterar assets dinamicamente, a engine os descarregará automaticamente?

R: Todos os recursos têm contagem de referências internamente. Assim que a contagem de referências chega a zero, o recurso é liberado.

P: É possível tocar áudio sem usar um componente de áudio anexado a um objeto de jogo?

R: Tudo é baseado em componentes. É possível criar um objeto de jogo headless com múltiplos sons e tocar sons enviando mensagens ao objeto controlador de som.

P: É possível alterar, em tempo de execução, o arquivo de áudio associado a um componente de áudio?

R: Em geral, todos os recursos são declarados estaticamente, com o benefício de que você recebe gerenciamento de recursos gratuitamente. Você pode usar propriedades de recurso para alterar qual recurso é atribuído a um componente.

P: Existe uma forma de acessar as propriedades da forma de colisão da física?

R: Sim, veja a API de física, especialmente physics.get_shape() e physics.set_shape().

P: Existe uma forma rápida de renderizar os objetos de colisão na minha cena? (como o debug draw do Box2D)

R: Sim, defina a flag physics.debug em game.project. (Consulte a documentação oficial de configurações do projeto)

P: Quais são os custos de desempenho de ter muitos contatos/colisões?

R: O Defold executa uma versão modificada do Box2D em segundo plano, e o custo de desempenho deve ser bastante parecido. Você sempre pode ver quanto tempo a engine gasta em física abrindo o profiler. Você também deve considerar que tipo de objetos de colisão está usando. Objetos estáticos são mais baratos em termos de desempenho, por exemplo. Consulte a documentação oficial de física do Defold para mais detalhes.

P: Qual é o impacto de desempenho de ter muitos componentes de efeito de partículas?

R: Depende se eles estão em reprodução ou não. Um ParticleFx que não está em reprodução tem custo de desempenho zero. O impacto de desempenho de um ParticleFx em reprodução deve ser avaliado usando o profiler, já que seu impacto depende de como ele está configurado. Como na maioria das outras coisas, a memória é alocada antecipadamente para o número de ParticleFx definido como max_count em game.project.

P: Como recebo entrada em um objeto de jogo dentro de uma coleção carregada via proxy de coleção?

R: Cada coleção carregada por proxy tem sua própria pilha de entrada. A entrada é roteada da pilha de entrada da coleção principal, via componente proxy, para os objetos na coleção. Isso significa que não basta o objeto de jogo na coleção carregada adquirir foco de entrada; o objeto de jogo que contém o componente proxy também precisa adquirir foco de entrada. Consulte a documentação de entrada para detalhes.

P: Posso usar propriedades de script do tipo string?

R: Não. O Defold suporta propriedades do tipo hash. Elas podem ser usadas para indicar tipos, identificadores de estado ou chaves de qualquer tipo. Hashes também podem ser usados para armazenar ids de objetos de jogo (caminhos), embora propriedades url muitas vezes sejam preferíveis, pois o editor preenche automaticamente um menu suspenso com URLs relevantes para você. Consulte a documentação de propriedades de script para detalhes.

P: Como acesso as células individuais de uma matriz (criada usando vmath.matrix4() ou similar)?

R: Você acessa as células usando mymatrix.m11, mymatrix.m12, mymatrix.m21 etc.

P: Estou recebendo Not enough resources to clone the node ao usar gui.clone() ou gui.clone_tree()

R: Aumente o valor de Max Nodes do componente GUI. Você encontra esse valor no painel Properties ao selecionar a raiz do componente no Outline.

O fórum

P: Posso publicar uma thread anunciando meu trabalho?

R: Claro! Temos uma categoria especial “Work for hire” para isso. Sempre incentivaremos tudo que beneficia a comunidade, e oferecer seus serviços à comunidade, com remuneração ou não, é um bom exemplo disso.

P: Criei uma thread e adicionei meu trabalho. Posso adicionar mais?

R: Para reduzir o bumping de threads da categoria “Work for hire”, você não pode postar mais de uma vez a cada 14 dias na sua própria thread, a menos que seja uma resposta direta a um comentário na thread; nesse caso, você pode responder. Se quiser adicionar mais trabalhos à sua thread dentro do período de 14 dias, edite seus posts existentes com o conteúdo adicionado.

P: Posso usar a categoria Work for Hire para publicar ofertas de trabalho?

R: Claro, fique à vontade! Ela pode ser usada tanto para ofertas quanto para pedidos, por exemplo, “Programador procura artista de pixel 2D; sou rico e vou pagar bem”.