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年建立了合作关系然后并于2014年获得 Defold. 详情请见 这里.

问: Defold 能做 3D 游戏吗?

答: 可以! 游戏引擎纯 3D. 然而, 工具都是针对 2D 游戏设计的, 所以 3D 游戏工具你得自己开发. 提升 3D 支持的计划进行中.

问: Defold 游戏开发用什么语言?

答: Defold 项目游戏逻辑基本使用 Lua 语言 (特指 Lua 5.1/LuaJIT, 详情请见 Lua 教程). Lua 是一种强大快速的动态语言. 同时也支持使用原生 (C/C++, Objective-C, Java 和 JavaScript等) 语言来扩展 Defold 引擎功能. 自定义材质, 使用 OpenGL ES SL 语言编写的顶点和片元着色程序.

平台相关

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

答: 下表列出了编辑器工具与游戏引擎运行环境的支持情况:

系统 支持
macOS 10.7 Lion 编辑器与游戏引擎
Windows Vista 编辑器与游戏引擎
Ubuntu 18.04 (64 bit)(1) 编辑器
Linux (64 bit)(2) 游戏引擎
iOS 8.0 游戏引擎
Android 4.1 (API level 16) 游戏引擎
HTML5 游戏引擎

(1 编辑器在 64-bit Ubuntu 18.04 平台上通过编译和测试. 其他版本应该同样可以运行但是未经过测试.)

(2 游戏引擎在大多数 64-bit Linux 版本上只要更新显卡驱动支持 OpenGL ES 2.0 的基本都能运行.)

问: Defold 能输出哪些平台的游戏?

答: 可以一键发布 任天堂 Switch, iOS, Android 和 HTML5 游戏, 外加 macOS, Windows 和 Linux 游戏. 真正的一套代码平台通用.

问: Defold 基于何种渲染引擎?

A: Defold 在 HTML5 中使用 WebGL, iOS 和 macOS 中使用 Metal, 其他平臺中使用 Vulkan 或者 OpenGL ES 2.0. 作爲開發者只需要關心可編程渲染管綫所支持的一種渲染 API 即可.

问: 如何获取 Defold 版本信息?

答: 点击菜单栏 “About” 项. 弹出窗口详细列出了 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() 获取.

編輯器相關

问: 运行编辑器需要什么硬件系统?

答: 编辑器最多占用 75% 的空闲系统内存. 一般 4 GB 内存的电脑就可以运行 Defold 小项目了. 中大型项目建议配备 6 GB 或更多内存.

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

答: Defold 测试版编辑器会在启动时检查并自动更新, 正式版也是.

问: 编辑器不启动, 项目不加载?

答: 检查 Defold 安装路径里是否有空格. 比如, 把编辑器放在mac系统 Applications 中的 Defold-macosx 文件夹里, 就能运行. 改成 Defold macosx 就无法运行. 在 Windows 上, 像 C:\Program Files\ 这样的路径都不行. 这归因于 Eclipse 框架的一个已知 bug.

问: 启动 Defold 时报了 “sun.security.validator.ValidatorException: PKIX path building failed” 的错?

答: 这个错是由于编辑器尝试建立 https 连接而服务器证书无法验证导致.

详情请见 这里.

Linux 相關

Q: 在 GNOME 上使用 Defold 编辑器在 4k 或 HiDPI 显示器上显得特别小?

A: 启动 Defold 之前修改缩放参数. 参见

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

A: 另一种办法, 尤其是在你希望把界面放大到非整数倍时, 可以修改 Defold/config 文件, 在vmargs 一行加入 glass.gtk.uiScale: source

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 文章.

Q:在 Elementary OS 上使用 Defold 编辑器, 鼠标点选上的都是后面的东西?

A: 尝试这样启动编辑器:

$ GTK_CSD=0 ./Defold

Q: 在 Defold 编辑器里打开集合或者游戏对象时崩溃报关于 “com.jogamp.opengl” 的错误.

A: 某些Linux版本 (如 Ubuntu 18) 下 Mesa 版所使用的 jogamp/jogl Defold 版本有冲突. 可以在调用 glGetString(GL_VERSION) 是设置MESA_GL_VERSION_OVERRIDE 为2.1或者更高的值以覆盖 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

A: 某些Linux版本 (如 Ubuntu 20.04) 在運行 Defold 時會出現新的 Mesa 驅動程序 (Iris) 的問題. 可以嘗試使用舊版本驅動程序:

$ export MESA_LOADER_DRIVER_OVERRIDE=i965
$ ./Defold

Q: 在 Defold 编辑器里打开集合或者游戏对象时崩溃报关于 “libffi.so” 的错误.

A: 这是由于Linux系统的 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

然后需要在环境变量 LD_PRELOAD 中指定安装路径再启动 Defold:

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

Q: 我的 OpenGL 驱动过期了. 还能用 Defold 吗?

A: 能用, 但是需要打开 Defold 软件渲染. 可以设置环境变量 LIBGL_ALWAYS_SOFTWARE 值为 1:

~/bin/Defold$ LIBGL_ALWAYS_SOFTWARE=1 ./Defold

Q: 在 Linux 上启动 Defold 游戏无效?

A: 看看 Defold 编辑器控制台. 如果有下面这样的输出:

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

就需要安装 libopenal1. 不同版本包名不同, 另外某些用户也需要安装 openalopenal-dev 或者 openal-devel 包.

$ apt-get install libopenal-dev

Android 相關

Q: 安卓系统有办法隐藏导航栏和状态栏吗?

A: 有, 在你的 game.project 文件的 Android 部分的 immersive_mode 项. 这项可以使你获得全部的屏幕及屏幕触摸事件.

Q: 在设备上安装 Defold 游戏时总是出现 “Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]” 错误?

A: 安卓系统发现你的更新app使用了新的证书. 打包调试版本时, 使用的是一个临时证书. 所以在更新版本前要删除旧版本:

$ 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

HTML5 相關

Q: 我的HTML5游戏在Chrome里一到溅射屏幕就卡死了?

A: 很多浏览器不允许从本地磁盘文件来启动程序. 从编辑器里运行就能自动生成临时本地服务器. 另外, 你也可以使用 Python 之类的程序快速搭建本地服务器 SimpleHTTPServer:

$ python -m SimpleHTTPServer [port]

Q: 游戏加载时报 “Unexpected data size” 错误然后崩溃?

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: 請確保游戲包 id 與 Defold 導出的 Xcode 項目檔案裏設置的 id 是一致的.

Q: 如何查看应用包的权限?

A: 参见 应用的权限检查:

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

Q: 如何查看配置档案的权限?

A: 参见 档案设置的权限检查:

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

Windows 相關

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

A: 这个错误发生在 使用 AMD Radeon GPU 的机器 上. 注意更新显卡驱动.

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

A: 试试以管理员身份打开 Defold. 右键点击 Defold 可执行程序选择 “以管理员身份运行”.

Nintendo Switch 相關

Q: 为什么开发任天堂游戏不免费?

A: Defold 基金会的目标之一就是让 Defold 软件和代码面向全世界免费. 我们不会食言, 但是接入的任天堂 Switch SDK 是人家说了算. 也就是说对任天堂 Switch 的支持, 编辑器, 各种工具, 我们没法自己做出来. 同样 Defold 基金会的社区贡献者也没法自己做出来, 为了确保对任天堂平台的合法长远的技术支持, 就必须缴费了.

Q: 做任天堂 Switch 游戏需要什么别的工具吗?

A: 使用 Defold 编辑器和命令行工具都可以打包任天堂 Switch 游戏. 一旦你取得了任天堂平台开发资格, 关于如何调试游戏的方法也会发送给你.

Q: 开发跨平台游戏加上任天堂 Switch 游戏, 代码库够用吗?

A: 够用, 所有标准 Defold API 功能在任天堂 Switch 平台同样有效. 除此之外也许需要调用一些任天堂 Switch 的原生功能, 但总体上讲一套代码跨平台没问题.

发布相关

问: 我想把游戏发布到 AppStore. 如何设置 IDFA?

答: 提交游戏时, Apple 为广告商提供了3种 IDFA 用例:

  1. 应用内展示广告
  2. 用广告提升安装量
  3. 用广告提升点击量

如果选择第一个, 编辑会在你的游戏里找广告. 如果没找到, 游戏很可能会被拒. Defold 本身不使用广告商id.

问: 怎么用游戏获利?

答: Defold 支持游戏内付费和多种广告服务. 最新相关信息详见 资源中心的盈利类目.

Defold 报错

问: 游戏无法启动也没有报错. 怎么办?

答: 如果二次编译不通过很肯能由你最后做的改动导致. 从菜单栏选择 Project > Rebuild And Launch 试试.

游戏内容相关

问: Defold 里有 prefab 吗?

答: 有. Defold 里叫 集合. 它能帮助建立储存游戏内容为树形结构以便在编辑器或者游戏运行时创建实例. 对于 GUI 节点类似结构称为 GUI 模板.

问: 为什么我不能在游戏对象下建立子游戏对象?

答: 有一种可能是因为父级游戏对象是一个文件引用. 对于父子结构的游戏对象来说它们的位移关系通过 场景结构 表达. 没有被加入到场景里的游戏对象无法于其他对象建立父子关系.

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

答: 父子关系除了场景结构中表现相对位移以外别无其他特别之处. 如果需要跟踪子对象状态无需时刻向所有子对象发送消息. 这种情况下你需要使用 Lua 编写数据结构.

问: 精灵对象周围出现黑白边?

答: 这被称作 “边缘出血” 现象, 渲染精灵对象的时候把纹理旁边的一些像素也加入进来了. 解决办法是用纹理边缘的像素再扩充一圈. 好在 Defold 编辑器有工具能自动做这件事. 尝试打开图集并且设置 Extrude Borders 的值为 1.

问: 精灵变色, 透明效果如何制作?

A: 精灵默认着色程序包含 “tint” 属性:

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

问: 为什么游戏对象的z值设为100就看不见了?

答: z值表示深度方向的遮挡关系. z值小的位于z值大的游戏对象前面. 默认渲染程序的z值范围是 -1 到 1, 此范围之外的不被渲染. 关于渲染脚本详情请见 渲染教程. 对于 GUI 节点来说z值毫无作用. 节点的遮挡顺序取决于树形结构 (以及层次设置). 关于用户界面节点的渲染详情请见 GUI 教程.

问: 要是把视口深度范围设为 -100 到 100 会影响性能吗?

答: 不影响性能但是影响精度. z缓存是一种对数结构靠近 0 差别明显, 远离 0 差别不明显. 比如说, 用 24 位缓存 10.0 对比 10.000005 区别明显但是 10000 对比 10005 区别不明显.

问: 角度的单位为什么不一致?

答: 实际上一致. 编辑器和游戏API使用角度制. 数学计算库使用弧度制. 目前对于物理 angular_velocity 是个例外使用了弧度制. 以后可能会矫正.

问: 只有颜色没有纹理的GUI节点如何渲染?

答: 作为顶点着色形状渲染, 注意其性能消耗.

问: 如何释放资源所占用的内存?

答: 引擎对所有资源都有引用计数. 一旦引用为0则资源自动被释放.

问: 不用游戏对象能播放声音吗?

答: 游戏引擎设计模式基于组件. 可以建立一个不可见游戏对象把声音组件放入然后需要播放时给它发消息即可.

问: 运行时声音组件播放的声音文件能更改吗?

答: 一般资源都是静态声明随意管理的. 可以使用 资源属性 来修改与组件关联的资源.

问: 存取物理碰撞形状属性的方法?

答: 目前尚未支持.

问: 有办法快速渲染物理碰撞对象吗? (就像 Box2D 的 debugdraw 那样)

答: 有, 要在 game.project 里设置 physics.debug 项. (参见 项目设置教程)

问: 许多物理碰撞的主要性能消耗在哪里?

答: Defold 包含的是 Box2D 略微修改版本, 所以性能应该和原版差不多. 可以使用 调试器 跟踪物理碰撞数量. 确保用对碰撞对象. 比如静态碰撞对象性能高些. 详情请见 Defold 的 物理教程.

问: 如果有许多粒子效果, 对性能影响大不大?

答: 这取决于粒子效果是否正在播放. 没有播放的粒子效果不消耗性能. 播放中的粒子效果性能消耗取决于其配置情况, 可以用调试器来观察. 粒子效果的内存消耗基本上取决于项目设置的 max_count 数.

问: 如何得到集合代理加载的集合里的游戏对象的输入信息?

答: 每个集合都有自己的输入栈. 输入从主集合通过代理组件传递到被载入集合里的游戏对象. 换句话说仅游戏对象获得输入焦点是不够的, 那个代理组件 所在的 游戏对象同样需要获得输入焦点. 详情请见 输入教程.

问: 脚本属性有字符串类型的吗?

答: 没有. Defold 只有 哈希 类型的脚本属性. 用来表示枚举, 表示状态, 表示各种类型都没问题. 而且游戏对象的 id (路径) 也是用其 url 属性的哈希来保存, 遇到这样的属性时编辑器会自动建立相关路径弹框供你选择. 详情请见 脚本属性教程.

问: 如何存取矩阵 (使用 vmath.matrix4() 之类的函数生成的) 内部数据?

答: 使用 mymatrix.m11, mymatrix.m12, mymatrix.m21 之类的属性可以访问内部数据.

问: 使用 gui.clone()gui.clone_tree() 时报 Not enough resources to clone the node 的错误信息?

答: 增加gui组件的 Max Nodes 值. 在大纲视图gui根节点的属性面板上就能看到.

论坛相关

问: 我能在论坛上打广告吗?

答: 可以! 论坛有一个 “Work for hire” 类目. 能充实社区论坛的所有信息都欢迎, 这里可以发布求职广告.

问: 可以无限打广告?

答: 为避免 “Work for hire” 类目论坛被爆, 至少14天内不许再加广告 (除非有人回复找你, 此时你可以立即回复这个人). 14天内, 只能通过更新帖子的方式加入新内容.

问: 我能发布招聘广告吗?

答: 可以, 自己找! 招聘也行求职也行, 比如 “程序员找美工; 高价求不差钱”.