Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

构建变体

当您打包游戏时,需要选择希望使用的引擎类型。您有三个基本选项:

  • Debug
  • Release
  • Headless

这些不同版本也被称为 构建变体

当您选择 Project ▸ Build 时,您将始终获得调试版本。

Debug

这种类型的可执行文件通常在游戏开发过程中使用,因为它包含几个有用的调试功能:

  • 分析器 - 用于收集性能和使用计数器。了解如何使用分析器,请参阅分析器手册
  • 日志记录 - 启用日志记录时,引擎将记录系统信息、警告和错误。引擎还将输出来自 Lua print() 函数的日志,以及使用 dmLogInfo()dmLogError() 等的原生扩展日志记录。了解如何阅读这些日志,请参阅游戏和系统日志手册
  • 热重载 - 热重载是一个强大的功能,它允许开发者在游戏运行时重新加载资源。了解如何使用此功能,请参阅热重载手册
  • 引擎服务 - 可以通过多个不同的开放 TCP 端口和服务连接到游戏调试版本并与之交互。这些服务包括热重载功能、远程日志访问和上述分析器,还包括其他远程与引擎交互的服务。在开发者文档中了解有关引擎服务的更多信息。

Release

此变体禁用了调试功能。当游戏准备发布到应用商店或以其他方式与玩家共享时,应选择此选项。出于多种原因,不建议发布启用了调试功能的游戏:

  • 调试功能在二进制文件中占用一些空间,而尽量保持发布游戏的二进制文件大小尽可能小是一种最佳实践
  • 调试功能也会占用一些 CPU 时间。如果用户使用低端硬件,这可能会影响游戏性能。在手机上,增加的 CPU 使用量还会导致发热和电池消耗。
  • 调试功能可能会暴露游戏中不应让玩家看到的信息,无论从安全、作弊还是欺诈的角度来看。

Headless

此可执行文件在没有图形和声音的情况下运行。这意味着您可以在 CI 服务器上运行游戏的单元/冒烟测试,甚至可以将其作为云中的游戏服务器使用。

App Manifest

不但可以为引擎加入原生扩展功能,还可以从引擎中剔除一些部分。比如你不需要物理引擎,就可以从应用中去除。关于如何去除引擎功能参见应用清单手册

上下文组合

实际上 app manifest 有着与 extension manifest 相同的结构和语法。这使我们能够在最终编译时为每个平台混合上下文配置。

而且,Defold 自身,有其基础 build manifest(build.yml)。编译每个扩展时,这些文件做如下混合:

manifest = merge(game.appmanifest, ext.manifest, build.yml)

用户可以覆盖引擎和每个扩展的默认行为。而且,对于最终链接阶段,我们混合了 app manifest 与 defold manifest:

manifest = merge(game.appmanifest, build.yml)

语法

这是一个参考示例:

platforms:
    x86_64-osx:
        context:
            excludeLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    x86_64-linux:
        context:
            excludeLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    js-web:
        context:
            excludeLibs: []
            excludeJsLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    wasm-web:
        context:
            excludeLibs: []
            excludeJsLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    x86-win32:
        context:
            excludeLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    x86_64-win32:
        context:
            excludeLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    armv7-android:
        context:
            excludeLibs: []
            excludeJars: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    armv7-ios:
        context:
            excludeLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []
    arm64-ios:
        context:
            excludeLibs: []
            excludeSymbols: []
            libs: []
            linkFlags: []

白名单

对于所有关键字,我们提供白名单过滤。这样可以避免非法路径处理和访问编译上载文件夹之外的文件。

linkFlags

可以在这里添加指定平台的编译标志。

libs

此标志仅在需要添加平台或者 Defold SDK 里的库时使用。应用的扩展库是自动添加的,不应在这里添加。下面是从引擎中剔除 3D 物理的例子:

x86_64-linux:
    context:
        excludeLibs: ["physics","LinearMath","BulletDynamics","BulletCollision"]
        excludeSymbols: []
        libs: ["physics_2d"]
        linkFlags: []

Exclude flags

此标志用于剔除平台上下文已经预先定义的东西。下面是从引擎中剔除 Facebook 扩展的例子(注意 (.*) 是帮助去掉正确元素而使用的正则表达式)。

armv7-android:
    context:
        excludeLibs: ["facebookext"]
        excludeJars: ["(.*)/facebooksdk.jar","(.*)/facebook_android.jar"]
        excludeSymbols: ["FacebookExt"]
        libs: []
        linkFlags: []

所有 flags、libraries、symbols 在哪?

与其在这里列举,我们不如努力把 manifest 的编辑功能加入编辑器,让用户使用更方便。

与此同时,Manifestation 工具也会持续更新。