title: Defold 引擎和编辑器常见问题
答: 是的,具有完整功能的 Defold 引擎和编辑器完全免费。没有隐藏成本、费用或版权使用费。就是免费。
答: Defold 基金会 的目标之一是确保 Defold 软件可供全球开发者使用,并且源代码免费提供。
答: 我们对 Defold 深度投入。Defold 基金会 的设立方式保证了它将作为 Defold 的负责任所有者存在多年。它不会消失。
答: 绝对可以。Defold 已被越来越多的专业游戏开发者和游戏工作室使用。查看 游戏展示 了解使用 Defold 创建的游戏示例。
答: 我们记录来自我们网站和 Defold 编辑器的匿名使用数据,以改进我们的服务和产品。在你创建的游戏中没有用户跟踪(除非你自己添加分析服务)。在我们的 隐私政策 中阅读更多相关信息。
答: Defold 由 Ragnar Svensson 和 Christian Murray 创造。他们从 2009 年开始开发引擎、编辑器和服务器。King 和 Defold 在 2013 年开始合作,King 于 2014 年收购了 Defold。阅读完整故事请点击这里。
答: 当然可以!引擎是一个完整的 3D 引擎。然而,工具集是为 2D 设计的,所以你必须自己完成大量繁重的工作。更好的 3D 支持正在计划中。
答: 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 着色器语言来编写顶点和片段着色器。
答: Defold 中的 C++ 支持主要用于编写与第三方 SDK 或平台特定 API 交互的原生扩展。dmSDK(用于原生扩展的 Defold C++ API)将逐步扩展更多功能,使开发者可以选择完全使用 C++ 编写所有游戏逻辑。Lua 仍将是游戏逻辑的主要语言,但通过扩展的 C++ API,也可以使用 C++ 编写游戏逻辑。扩展 C++ API 的工作主要是将现有的私有头文件移至公共部分,并清理 API 以供公共使用。
答: TypeScript 不是官方支持的。社区维护了一个工具包 ts-defold,用于编写 TypeScript 并直接从 VSCode 将其转译为 Lua。
答: Haxe 不是官方支持的。社区维护了 hxdefold 用于编写 Haxe 并将其转译为 Lua。
答: Defold 基金会将添加 C# 支持并将其作为库依赖项提供。C# 是一种广泛采用的编程语言,它将帮助那些大量投资于 C# 的工作室和开发者过渡到 Defold。
答: Defold 不会放弃将 Lua 作为主要脚本语言。C# 支持将作为扩展的新语言添加。除非你在项目中选择使用 C# 扩展,否则它不会影响引擎。
C# 支持是有代价的(可执行文件大小、运行时性能等),但这由个别开发者/工作室来决定。
至于 C# 本身,这是一个相对较小的变化,因为扩展系统已经支持多种语言(C/C++/Java/Objective-C/Zig)。SDK 将通过生成 C# 绑定来保持同步。这将使绑定以最小的努力保持最新。
Defold 基金会以前一直反对在 Defold 中添加 C# 支持,但由于多种原因改变了看法:
答: 以下平台支持编辑器/工具和引擎运行时:
| System | Version | Architectures | Supported |
| ------------------ | ------------------ | ------------------ | ------------------ |
| macOS | 11 Big Sur | x86-64
, arm-64
| Editor |
| macOS | 10.15 | x86-64
, arm-64
| 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 | 11.0 | arm-64
| Engine |
| Android | 4.4 (API level 19) | arm-32
, arm-64
| Engine |
| HTML5 | | asm.js
, wasm
| Engine |
(1 编辑器为 64 位 Ubuntu 构建和测试。它应该也能在其他发行版上运行,但我们不提供保证。)
(2 只要图形驱动是最新的,引擎运行时应该在大多数 64 位 Linux 发行版上运行,有关图形 API 的更多信息见下文)
答: 只需点击一下,您就可以发布到 PS4™、PS5™、Nintendo Switch、iOS(64 位)、Android(32 位和 64 位)和 HTML5,以及 macOS(x86-64 和 arm64)、Windows(32 位和 64 位)和 Linux(x86-64 和 arm64)。真正的一套代码库,多个支持的平台。
答: 作为开发者,您只需要担心使用完全可编程渲染管线的一种渲染 API。Defold 渲染脚本 API 将渲染操作转换为以下图形 API:
答: 是的,在帮助菜单中选择"关于"选项。弹出窗口清楚地显示了 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()
。
答: 提交时,Apple 为其三个有效的 IDFA 用例提供了三个复选框:
如果您选择选项 1,应用审核人员会在应用中寻找广告。如果您的游戏不显示广告,游戏可能会被拒绝。Defold 本身不使用广告 ID。
答: Defold 支持应用内购买和各种广告解决方案。查看 资源门户中的盈利类别 获取最新的可用盈利选项列表。
答: 在极少数情况下,构建过程可能无法重新构建文件,特别是当它之前遇到过您已经修复的构建错误时。通过从菜单中选择 Project > Rebuild And Launch 来强制完全重新构建。
答: 是的,它支持。它们被称为集合。它们允许您创建复杂的游戏对象层次结构,并将这些作为单独的构建块存储,您可以在编辑器中或在运行时(通过集合生成)实例化它们。对于 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 位置控制渲染顺序。低值在高值之前绘制。在默认渲染脚本中,深度在 -1 和 1 之间的游戏对象被绘制,任何低于或高于此值的都不会被绘制。您可以在官方渲染文档中阅读更多关于渲染脚本的信息。在 GUI 节点上,Z 值被忽略,根本不影响渲染顺序。相反,节点按照它们列出的顺序以及子层次结构(和分层)进行渲染。在官方GUI 文档中阅读更多关于 gui 渲染和使用分层优化绘制调用的信息。
答: 不会。唯一的影响是精度。z 缓冲区是对数的,对于接近 0 的 z 值具有非常精细的分辨率,而对于远离 0 的 z 值分辨率较低。例如,使用 24 位缓冲区,可以区分 10.0 和 10.000005,而 10000 和 10005 则不能。
答: 实际上有一致性。在编辑器和游戏 API 中,角度处处表示为度数。数学库使用弧度。目前,对于 angular_velocity
物理属性,约定被打破,它当前表示为弧度/秒。这预计会改变。
答: 它只是一个顶点着色的形状。请记住,它仍然会消耗填充率。
答: 所有资源在内部都有引用计数。一旦引用计数为零,资源就会被释放。
答: 一切都是基于组件的。可以创建一个带有多个声音的无头游戏对象,并通过向声音控制器对象发送消息来播放声音。
答: 通常所有资源都是静态声明的,好处是您可以免费获得资源管理。您可以使用资源属性来更改分配给组件的资源。
答: 不,目前不可能。
答: 是的,在 game.project 中设置 physics.debug 标志。(请参考官方项目设置文档)
答: Defold 在后台运行一个修改版本的 Box2D,性能成本应该相当相似。您可以通过调出分析器来查看引擎在物理上花费了多少时间。您还应该考虑使用什么类型的碰撞对象。例如,静态对象在性能方面更便宜。有关更多详细信息,请参考 Defold 中的官方物理文档。
答: 这取决于它们是否正在播放。没有播放的 ParticleFx 性能成本为零。必须使用分析器评估播放中的 ParticleFx 的性能影响,因为它的影响取决于它的配置方式。与大多数其他事情一样,内存是为在 game.project 中定义为 max_count 的 ParticleFx 数量预先分配的。
答: 每个代理加载的集合都有自己的输入栈。输入从主集合输入栈通过代理组件路由到集合中的对象。这意味着,仅仅让加载集合中的游戏对象获取输入焦点是不够的,_持有_代理组件的游戏对象也需要获取输入焦点。有关详细信息,请参阅输入文档。
答: 不可以。Defold 支持hash类型的属性。这些可用于指示类型、状态标识符或任何类型的键。哈希也可用于存储游戏对象 id(路径),尽管url属性通常更可取,因为编辑器会自动为您填充相关 URL 的下拉列表。有关详细信息,请参阅脚本属性文档。
vmath.matrix4()
或类似方法创建的)?答: 您可以使用 mymatrix.m11
、mymatrix.m12
、mymatrix.m21
等访问单元格。
Not enough resources to clone the node
错误答: 增加 gui 组件的 Max Nodes
值。您可以在大纲中选择组件的根时在属性面板中找到此值。
答: 当然可以!我们有一个专门的"Work for hire" 类别。我们将始终鼓励任何有益于社区的事情,向社区提供您的服务——无论是否收费——就是一个很好的例子。
答: 为了减少"Work for hire"帖子的刷屏,您在自己的帖子中每 14 天只能发布一次(除非是对帖子中评论的直接回复,在这种情况下您可以回复)。如果您想在 14 天内向您的帖子添加更多作品,您必须编辑现有帖子来添加内容。
答: 当然可以,随意使用!它可以用于发布招聘信息,也可以用于请求,例如"程序员寻找 2D 像素艺术家;我很富有,我会给你很好的报酬"。