FAQ
FAQ

Read this FAQ in English

常见问题

一般问题

问: Defold 真的免费吗?

答: 是的,具有完整功能的 Defold 引擎和编辑器完全免费。没有隐藏成本、费用或版权使用费。就是免费。

问: 为什么 Defold 基金会要免费提供 Defold?

答: Defold 基金会 的目标之一是确保 Defold 软件可供全球开发者使用,并且源代码免费提供。

问: 你们会支持 Defold 多久?

答: 我们对 Defold 深度投入。Defold 基金会 的设立方式保证了它将作为 Defold 的负责任所有者存在多年。它不会消失。

问: 我可以信任 Defold 用于专业开发吗?

答: 绝对可以。Defold 已被越来越多的专业游戏开发者和游戏工作室使用。查看 游戏展示 了解使用 Defold 创建的游戏示例。

问: 你们在进行什么样的用户跟踪?

答: 我们记录来自我们网站和 Defold 编辑器的匿名使用数据,以改进我们的服务和产品。在你创建的游戏中没有用户跟踪(除非你自己添加分析服务)。在我们的 隐私政策 中阅读更多相关信息。

问: 谁创造了 Defold?

答: Defold 由 Ragnar Svensson 和 Christian Murray 创造。他们从 2009 年开始开发引擎、编辑器和服务器。King 和 Defold 在 2013 年开始合作,King 于 2014 年收购了 Defold。阅读完整故事请点击这里

游戏开发问题

问: 我可以在 Defold 中制作 3D 游戏吗?

答: 当然可以!引擎是一个完整的 3D 引擎。然而,工具集是为 2D 设计的,所以你必须自己完成大量繁重的工作。更好的 3D 支持正在计划中。

编程语言问题

问: 我在 Defold 中使用什么编程语言?

答: Defold 项目中的游戏逻辑主要使用 Lua 语言编写(特别是 Lua 5.1/LuaJIT,详情请参考 Lua 手册)。Lua 是一种轻量级的动态语言,快速且非常强大。从 1.8.1 版本开始,Defold 支持使用能生成 Lua 代码的转译器。安装转译器扩展后,你可以使用替代语言——如 Teal——来编写静态类型检查的 Lua。你也可以使用原生代码(根据平台不同,可以是 C/C++、Objective-C、Java 和 JavaScript)来为 Defold 引擎扩展新功能。在构建自定义材质时,使用 OpenGL ES SL 着色器语言来编写顶点和片段着色器。

问: 我可以使用 C++ 来编写游戏逻辑吗?

答: Defold 中的 C++ 支持主要用于编写与第三方 SDK 或平台特定 API 交互的原生扩展。dmSDK(用于原生扩展的 Defold C++ API)将逐步扩展更多功能,使开发者可以选择完全使用 C++ 编写所有游戏逻辑。Lua 仍将是游戏逻辑的主要语言,但通过扩展的 C++ API,也可以使用 C++ 编写游戏逻辑。扩展 C++ API 的工作主要是将现有的私有头文件移至公共部分,并清理 API 以供公共使用。

问: 我可以在 Defold 中使用 TypeScript 吗?

答: TypeScript 不是官方支持的。社区维护了一个工具包 ts-defold,用于编写 TypeScript 并直接从 VSCode 将其转译为 Lua。

问: 我可以在 Defold 中使用 Haxe 吗?

答: Haxe 不是官方支持的。社区维护了 hxdefold 用于编写 Haxe 并将其转译为 Lua。

问: 我可以在 Defold 中使用 C# 吗?

答: Defold 基金会将添加 C# 支持并将其作为库依赖项提供。C# 是一种广泛采用的编程语言,它将帮助那些大量投资于 C# 的工作室和开发者过渡到 Defold。

问: 我担心添加 C# 支持会对 Defold 产生负面影响。我应该担心吗?

答: Defold 不会放弃将 Lua 作为主要脚本语言。C# 支持将作为扩展的新语言添加。除非你在项目中选择使用 C# 扩展,否则它不会影响引擎。

C# 支持是有代价的(可执行文件大小、运行时性能等),但这由个别开发者/工作室来决定。

至于 C# 本身,这是一个相对较小的变化,因为扩展系统已经支持多种语言(C/C++/Java/Objective-C/Zig)。SDK 将通过生成 C# 绑定来保持同步。这将使绑定以最小的努力保持最新。

Defold 基金会以前一直反对在 Defold 中添加 C# 支持,但由于多种原因改变了看法:

  • 工作室和开发者继续要求 C# 支持。
  • C# 支持的范围已缩小到仅扩展(即工作量小)。
  • 核心引擎不会受到影响。
  • 如果生成 C# API,可以以最小的努力保持同步。
  • C# 支持将基于带有 NativeAOT 的 DotNet 9,从而生成现有构建管道可以链接的静态库(就像任何其他 Defold 扩展一样)。

平台问题

问: Defold 可以在哪些平台上运行?

答: 以下平台支持编辑器/工具和引擎运行时:

System Version Architectures Supported
macOS 11 Big Sur x86-64, arm-64 Editor and Engine
Windows Vista x86-32, x86-64 Editor and Engine
Ubuntu (1) 22.04 LTS x86-64 Editor
Linux (2) Any 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 编辑器为 64 位 Ubuntu 构建和测试。它应该也能在其他发行版上运行,但我们不提供保证。)

(2 只要图形驱动是最新的,引擎运行时应该在大多数 64 位 Linux 发行版上运行,有关图形 API 的更多信息见下文)

问: 使用 Defold 我可以为哪些目标平台开发游戏?

答: 只需点击一下,您就可以发布到 PS4™、PS5™、Nintendo Switch、iOS(64 位)、Android(32 位和 64 位)和 HTML5,以及 macOS(x86-64 和 arm64)、Windows(32 位和 64 位)和 Linux(x86-64 和 arm64)。真正的一套代码库,多个支持的平台。

问: Defold 依赖哪种渲染 API?

答: 作为开发者,您只需要担心使用完全可编程渲染管线的一种渲染 API。Defold 渲染脚本 API 将渲染操作转换为以下图形 API:

System Graphics API Note
macOS OpenGL 3.3 或 Metal 通过 MoltenVK 使用 Vulkan
Windows OpenGL 3.3 或 Vulkan 1.1  
Linux OpenGL 3.3 或 Vulkan 1.1  
Android OpenGLES 3.0 或 Vulkan 1.1 回退到 OpenGLES 2.0
iOS OpenGLES 3.0 或 Metal 通过 MoltenVK 使用 Vulkan
HTML5 WebGL 2.0 或 WebGPU 回退到 WebGL 1.0

问: 有什么方法可以知道我运行的是哪个版本?

答: 是的,在帮助菜单中选择”关于”选项。弹出窗口清楚地显示了 Defold 测试版版本,更重要的是,特定的发布 SHA1。对于运行时版本查找,请使用 sys.get_engine_info()

可以从 http://d.defold.com/beta 下载的最新测试版可以通过打开 http://d.defold.com/beta/info.json 来检查(稳定版本也存在相同的文件:http://d.defold.com/stable/info.json)

问: 有什么方法可以在运行时知道游戏在哪个平台上运行?

答: 是的,请查看 sys.get_sys_info()

编辑器问题

Q: 编辑器的系统要求是什么?

A: 编辑器将使用系统最多 75% 的可用内存。在具有 4 GB RAM 的计算机上,这应该足以满足较小的 Defold 项目。对于中型或大型项目,建议使用 6 GB 或更多的 RAM。

Q: Defold 测试版会自动更新吗?

A: 是的。Defold 测试版编辑器会在启动时检查更新,就像 Defold 稳定版一样。

Q: 为什么启动编辑器时会出现 java.awt.AWTError: Assistive Technology not found 错误?

A: 此错误与 Java 辅助技术(如 NVDA 屏幕阅读器)相关的问题有关。您的主文件夹中可能有一个 .accessibility.properties 文件。删除该文件并尝试重新启动编辑器。(注意:如果您确实使用任何辅助技术并且需要该文件存在,请通过 info@defold.se 与我们联系以讨论替代解决方案)。

Defold 论坛上讨论过

Q: 为什么启动编辑器时会出现 sun.security.validator.ValidatorException: PKIX path building failed 错误?

A: 当编辑器尝试建立 https 连接但服务器提供的证书链无法验证时,会发生此异常。

有关此错误的详细信息,请参阅此链接

Q: 为什么执行某些操作时会出现 java.lang.OutOfMemoryError: Java heap space 错误?

A: Defold 编辑器是使用 Java 构建的,在某些情况下,Java 的默认内存配置可能不够。如果发生这种情况,您可以通过编辑编辑器配置文件手动配置编辑器分配更多内存。配置文件名为 config,在 macOS 上位于 Defold.app/Contents/Resources/ 文件夹中。在 Windows 上,它位于 Defold.exe 可执行文件旁边,在 Linux 上位于 Defold 可执行文件旁边。打开 config 文件,并在以 vmargs 开头的行中添加 -Xmx6gb。添加 -Xmx6gb 会将最大堆大小设置为 6 GB(默认通常为 4GB)。它应该看起来像这样:

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

Linux 问题

Q: 为什么在 4k 或 HiDPI 显示器上运行 Defold 编辑器时显得特别小?

A: 如果您使用的是 GNOME,可以在运行 Defold 之前更改缩放因子。来源

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

A: 另一种解决方案,特别是当您希望按分数比例放大时,是修改 Defold/config 文件并在 vmargs 行添加 glass.gtk.uiScale来源

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

有关此值的更多信息,请参见 Arch Linux HiDPI wiki 文章

A: 如果您使用的是 KDE,可以设置 GDK_SCALE

$ GDK_SCALE=2 ./Defold

Q: 为什么在 Elementary OS 上鼠标点击会穿过编辑器到达下面的任何内容?

A: 像这样启动编辑器:

$ GTK_CSD=0 ./Defold

Q: 当打开集合或游戏对象时,Defold 编辑器崩溃,崩溃信息提到 com.jogamp.opengl

A: 在某些发行版(如 Ubuntu 18)上,Defold 使用的 jogamp/jogl 版本与系统上的 Mesa 版本存在问题。您可以通过设置 MESA_GL_VERSION_OVERRIDE 为 2.1 或更大但小于或等于您驱动程序版本的值来覆盖调用 glGetString(GL_VERSION) 时报告的 GL 版本。您可以使用 glxinfo 检查您的驱动程序支持的最高 OpenGL 版本:

glxinfo | grep version

示例输出(查找 “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,

使用版本 2.1 或匹配您的图形驱动程序的版本:

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

Q: 为什么启动 Defold 时出现 “com.jogamp.opengl.GLException: Graphics configuration failed” 错误?

A: 在某些发行版(例如 Ubuntu 20.04)上,运行 Defold 时新的 Mesa 驱动程序(Iris)存在问题。您可以尝试在运行 Defold 时使用较旧的驱动程序版本:

$ MESA_LOADER_DRIVER_OVERRIDE=i965 ./Defold

Q: 当打开集合或游戏对象时,Defold 编辑器崩溃,崩溃信息提到 libffi.so

A: 您发行版的 libffi 版本与 Defold(版本 6 或 7)所需的版本不匹配。确保 libffi.so.6libffi.so.7 安装在 /usr/lib/x86_64-linux-gnu 下。您可以像这样下载 libffi.so.7

$ 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

接下来,在运行 Defold 时,在 LD_PRELOAD 环境变量中指定此版本的路径:

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

Q: 我的 OpenGL 驱动程序已过时。我还能使用 Defold 吗?

A: 是的,如果您启用软件渲染,可能仍然可以使用 Defold。您可以通过将 LIBGL_ALWAYS_SOFTWARE 环境变量设置为 1 来启用软件渲染:

$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

Q: 为什么我尝试在 Linux 上运行 Defold 游戏时无法启动?

A: 检查编辑器中的控制台输出。如果您收到以下消息:

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

那么您需要安装 libopenal1。软件包名称在不同发行版之间有所不同,在某些情况下,您可能需要安装 openalopenal-devopenal-devel 软件包。

$ apt-get install libopenal-dev

Q: 为什么顶部菜单在我选择某项之前就关闭了?

A: 这很可能是由使用的窗口管理器(例如 Qtile 或 i3)引起的。这是 JavaFX 中的一个已知问题,可以通过将 GDK_DISPLAY 环境变量设置为 1 来解决:

$ GDK_DISPLAY=1 ./Defold

或者通过修改 Defold/config 文件并在 vmargs 行添加 -Djdk.gtk.version=2

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

Q: 为什么当我选择从磁盘打开时无法浏览所有可用的文件位置?

A: 如果您通过 使用 Flatpak 的 Steam 运行 Defold,您需要授予 Steam 访问其他驱动器的权限。您可以使用 Flatseal 或类似工具修改您的 Flatpak 应用程序的权限。

Q: 为什么我无法打开 Web 分析器或任何其他需要浏览器的菜单选项?

A: 这很可能是因为在非 Gnome 系统上没有检测到浏览器,导致对 Desktop.getDesktop().browse(new URI(url)); 的内部调用失败。尝试安装 libgnome

$ apt-get install libgnome

Android 问题

Q: 是否可以在 Android 上隐藏导航栏和状态栏?

A: 是的,在您的 game.project 文件的 Android 部分设置 immersive_mode 选项。这可以让您的应用程序占据整个屏幕并捕获屏幕上的所有触摸事件。

Q: 在设备上安装 Defold 游戏时,为什么会出现 “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]” 错误?

A: Android 检测到您尝试使用新证书安装应用程序。打包调试版本时,每个版本都将使用临时证书签名。在安装新版本之前,请卸载旧的应用程序:

$ 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

Q: 为什么在使用某些扩展构建时,会出现关于 AndroidManifest.xml 中属性冲突的错误?

A: 当两个或多个扩展提供包含相同属性标签但值不同的 Android Manifest 存根时,可能会发生这种情况。例如,Firebase 和 AdMob 就曾发生过这种情况。构建错误类似于以下内容:

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. 

您可以在报告的 Defold 问题 #9453 和 Google 问题 #327696048 中阅读有关此问题和解决方法的更多信息。

HTML5 问题

Q: 为什么我的 HTML5 应用程序在 Chrome 中启动画面处冻结?

A: 在某些情况下,无法从本地文件系统在浏览器中本地运行游戏。从编辑器运行时,游戏会从本地 Web 服务器提供。例如,您可以在 Python 中使用 SimpleHTTPServer

$ python -m SimpleHTTPServer [port]

Q: 为什么我的游戏在加载时因出现”意外的数据大小”错误而崩溃?

A: 当您使用 Windows 进行构建并将其提交到 Git 时,通常会发生这种情况。如果您的 Git 中行尾配置不正确,它将会更改您的行尾,从而也会更改数据大小。请按照以下说明解决问题:https://docs.github.com/en/free-pro-team@latest/github/using-git/configuring-git-to-handle-line-endings

iOS 问题

Q: 我无法使用免费的 Apple Developer 账户安装我的 Defold 游戏。

A: 请确保您在 Defold 项目中使用的 bundle identifier 与您在生成移动设备配置文件时在 Xcode 项目中使用的 bundle identifier 相同。

Q: 如何检查捆绑应用程序的权限?

A: 来自 检查构建应用程序的权限

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

Q: 如何检查配置文件的权限?

A: 来自 检查配置文件的权限

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

Windows 问题

Q: 为什么编辑器中无纹理的 GUI 框节点透明显示,但是构建运行后能正常显示?

A: 这个错误发生在 使用 AMD Radeon GPU 的计算机 上。请确保更新您的显卡驱动。

Q: 打开图集或者场景视图时报错 com.sun.jna.Native.open.class java.lang.Error: Access is denied

A: 尝试以管理员身份运行 Defold。右键点击 Defold 可执行程序并选择”以管理员身份运行”。

Q: 为什么在 Windows 上使用 Intel UHD 集成 GPU 渲染不正常(但是 HTML5 版本正常)?

A: 确保您的驱动版本高于或等于 27.20.100.8280。请查看 Intel 驱动程序支持助手。更多信息请参见 此论坛帖子

Q: Defold 编辑器崩溃,日志显示 AWTError: Assistive Technology not found

如果编辑器崩溃,日志提示 Caused by: java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge,请按照以下步骤操作:

  • 导航到 C:\Users\<用户名>
  • 使用标准文本编辑器(记事本即可)打开名为 .accessibility.properties 的文件
  • 在配置中找到以下几行:
assistive_technologies=com.sun.java.accessibility.AccessBridge
screen_magnifier_present=true
  • 在这些行的前面添加井号(#
  • 保存对文件的更改并重新启动 Defold

主机问题

Q: 我需要安装额外的工具来为游戏主机构建游戏吗?

A: 您将能够从编辑器和命令行工具创建应用程序包。当您获得相应平台的访问权限时,将向您提供有关如何在 PlayStation®4、PlayStation®5 和 Nintendo Switch 硬件上进行测试的信息。

Q: 如果我决定也针对游戏主机进行开发,是否仍然容易使用单个代码库?

A: 是的,所有标准的 Defold API 函数在游戏主机平台上同样可用。除了标准功能外,您还将能够访问一些 PlayStation®4、PlayStation®5 和 Nintendo Switch 特定的函数,但总体上讲,代码应该能够在多个平台上保持完全相同。

发布游戏

问: 我正在尝试将我的游戏发布到 AppStore。我应该如何回答 IDFA 的问题?

答: 提交时,Apple 为其三个有效的 IDFA 用例提供了三个复选框:

  1. 在应用内投放广告
  2. 来自广告的安装归因
  3. 来自广告的用户行为归因

如果您选择选项 1,应用审核人员会在应用中寻找广告。如果您的游戏不显示广告,游戏可能会被拒绝。Defold 本身不使用广告 ID。

问: 我如何通过游戏获利?

答: Defold 支持应用内购买和各种广告解决方案。查看 资源门户中的盈利类别 获取最新的可用盈利选项列表。

使用 Defold 时出现的错误

问: 我无法启动游戏,也没有构建错误。出了什么问题?

答: 在极少数情况下,构建过程可能无法重新构建文件,特别是当它之前遇到过您已经修复的构建错误时。通过从菜单中选择 Project > Rebuild And Launch 来强制完全重新构建。

游戏内容

问: Defold 支持预制件吗?

答: 是的,它支持。它们被称为集合。它们允许您创建复杂的游戏对象层次结构,并将这些作为单独的构建块存储,您可以在编辑器中或在运行时(通过集合生成)实例化它们。对于 GUI 节点,支持 GUI 模板。

问: 我无法将游戏对象添加为另一个游戏对象的子对象,为什么?

答: 可能是因为您试图在游戏对象文件中添加子对象,而这是不可能的。要理解为什么,您必须记住父子层次结构严格来说是_场景图_变换层次结构。尚未被放置(或生成)到场景(集合)中的游戏对象不是场景图的一部分,因此不能成为场景图层次结构的一部分。

问: 为什么我不能向游戏对象的所有子对象广播消息?

答: 父子关系只表达场景图变换关系,不应被误认为是对象导向的聚合。如果您尝试专注于您的游戏数据以及如何在游戏改变状态时最好地转换它,您可能会发现不需要一直向许多对象发送带有状态数据的消息。在需要数据层次结构的情况下,这些可以在 Lua 中轻松构建和处理。

问: 为什么我的精灵边缘周围会出现视觉瑕疵?

答: 这是一种称为”边缘出血”的视觉瑕疵,其中图集中相邻像素的边缘像素会渗入分配给您的精灵的图像中。解决方案是用额外的相同像素行和列填充图集图像的边缘。幸运的是,这可以通过 Defold 中的图集编辑器自动完成。打开您的图集并将 Extrude Borders 值设置为 1。

问: 我可以为我的精灵着色或使它们透明,还是必须为此编写自己的着色器?

答: 所有精灵默认使用的内置精灵着色器定义了一个常量”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))

问: 如果我将精灵的 z 坐标设置为 100,那么它就不会被渲染。为什么?

答: 游戏对象的 Z 位置控制渲染顺序。低值在高值之前绘制。在默认渲染脚本中,深度在 -1 和 1 之间的游戏对象被绘制,任何低于或高于此值的都不会被绘制。您可以在官方渲染文档中阅读更多关于渲染脚本的信息。在 GUI 节点上,Z 值被忽略,根本不影响渲染顺序。相反,节点按照它们列出的顺序以及子层次结构(和分层)进行渲染。在官方GUI 文档中阅读更多关于 gui 渲染和使用分层优化绘制调用的信息。

问: 将视图投影 Z 范围更改为 -100 到 100 会影响性能吗?

答: 不会。唯一的影响是精度。z 缓冲区是对数的,对于接近 0 的 z 值具有非常精细的分辨率,而对于远离 0 的 z 值分辨率较低。例如,使用 24 位缓冲区,可以区分 10.0 和 10.000005,而 10000 和 10005 则不能。

问: 角度表示方式没有一致性,为什么?

答: 实际上有一致性。在编辑器和游戏 API 中,角度处处表示为度数。数学库使用弧度。目前,对于 angular_velocity 物理属性,约定被打破,它当前表示为弧度/秒。这预计会改变。

问: 当创建一个只有颜色(没有纹理)的 GUI 框节点时,它将如何被渲染?

答: 它只是一个顶点着色的形状。请记住,它仍然会消耗填充率。

问: 如果我即时更改资源,引擎会自动卸载它们吗?

答: 所有资源在内部都有引用计数。一旦引用计数为零,资源就会被释放。

问: 是否可以在不使用附加到游戏对象的音频组件的情况下播放音频?

答: 一切都是基于组件的。可以创建一个带有多个声音的无头游戏对象,并通过向声音控制器对象发送消息来播放声音。

问: 是否可以在运行时更改与音频组件关联的音频文件?

答: 通常所有资源都是静态声明的,好处是您可以免费获得资源管理。您可以使用资源属性来更改分配给组件的资源。

问: 有没有办法访问物理碰撞形状属性?

答: 不,目前不可能。

问: 有什么快速方法可以渲染场景中的碰撞对象吗?(就像 Box2D 的调试绘制)

答: 是的,在 game.project 中设置 physics.debug 标志。(请参考官方项目设置文档

问: 拥有许多接触/碰撞的性能成本是多少?

答: Defold 在后台运行一个修改版本的 Box2D,性能成本应该相当相似。您可以通过调出分析器来查看引擎在物理上花费了多少时间。您还应该考虑使用什么类型的碰撞对象。例如,静态对象在性能方面更便宜。有关更多详细信息,请参考 Defold 中的官方物理文档

问: 拥有许多粒子效果组件的性能影响是什么?

答: 这取决于它们是否正在播放。没有播放的 ParticleFx 性能成本为零。必须使用分析器评估播放中的 ParticleFx 的性能影响,因为它的影响取决于它的配置方式。与大多数其他事情一样,内存是为在 game.project 中定义为 max_count 的 ParticleFx 数量预先分配的。

问: 如何接收通过集合代理加载的集合中游戏对象的输入?

答: 每个代理加载的集合都有自己的输入栈。输入从主集合输入栈通过代理组件路由到集合中的对象。这意味着,仅仅让加载集合中的游戏对象获取输入焦点是不够的,_持有_代理组件的游戏对象也需要获取输入焦点。有关详细信息,请参阅输入文档

问: 我可以使用字符串类型的脚本属性吗?

答: 不可以。Defold 支持hash类型的属性。这些可用于指示类型、状态标识符或任何类型的键。哈希也可用于存储游戏对象 id(路径),尽管url属性通常更可取,因为编辑器会自动为您填充相关 URL 的下拉列表。有关详细信息,请参阅脚本属性文档

问: 如何访问矩阵的各个单元格(使用 vmath.matrix4() 或类似方法创建的)?

答: 您可以使用 mymatrix.m11mymatrix.m12mymatrix.m21 等访问单元格。

问: 使用 gui.clone()gui.clone_tree() 时,我收到 Not enough resources to clone the node 错误

答: 增加 gui 组件的 Max Nodes 值。您可以在大纲中选择组件的根时在属性面板中找到此值。

论坛

问: 我可以发布一个宣传我作品的帖子吗?

答: 当然可以!我们有一个专门的“Work for hire” 类别。我们将始终鼓励任何有益于社区的事情,向社区提供您的服务——无论是否收费——就是一个很好的例子。

问: 我发布了一个帖子并添加了我的作品——我可以添加更多吗?

答: 为了减少”Work for hire”帖子的刷屏,您在自己的帖子中每 14 天只能发布一次(除非是对帖子中评论的直接回复,在这种情况下您可以回复)。如果您想在 14 天内向您的帖子添加更多作品,您必须编辑现有帖子来添加内容。

问: 我可以使用 Work for Hire 类别来发布招聘信息吗?

答: 当然可以,随意使用!它可以用于发布招聘信息,也可以用于请求,例如”程序员寻找 2D 像素艺术家;我很富有,我会给你很好的报酬”。