--- title: 移植和发布指南 brief: 本手册重点介绍了将游戏移植到新平台或首次发布游戏时需要考虑的一些事项。 --- # 移植和发布指南 本页面包含发布游戏或移植到新平台时需要考虑的有用指南和清单。 将 Defold 游戏移植到新平台或首次发布通常是一个简单直接的过程。理论上,只需确保在 *game.project* 文件中配置了相关部分就足够了,但为了充分利用每个平台的优势,建议将游戏适配到每个平台的具体特性。 ## 输入 确保将游戏适配到平台的输入方法。考虑添加对[游戏手柄](/manuals/input-gamepads)的支持,如果平台支持的话!并确保游戏支持暂停菜单 - 如果控制器突然断开连接,游戏应该暂停! ## 本地化 翻译游戏中的任何文本。在欧洲和美洲发布时,考虑至少翻译成 EFIGS(英语、法语、意大利语、德语和西班牙语)。确保可以在游戏中轻松切换不同语言(通过暂停菜单)。 ::: important 仅限 iOS - 确保在 `game.project` 中指定[本地化](/manuals/project-settings/#localizations),因为 `sys.get_info()` 永远不会返回不在此列表中的语言。 ::: 翻译商店页面上的文本,因为这将对销售产生积极影响!一些平台要求商店页面上的文本必须翻译成游戏可用的每个国家的语言。 ## 商店资料 ### 应用图标 确保您的游戏在竞争中脱颖而出。图标通常是您与潜在玩家的第一个接触点。它应该在充满游戏图标的页面上容易被找到。 ### 商店横幅和图像 确保为您的游戏使用有影响力和令人兴奋的艺术资源。花一些钱与艺术家合作创作吸引玩家的艺术资源可能是值得的。 ## 保存游戏 ### 在桌面、移动设备和 Web 上保存游戏 保存游戏和其他保存的状态可以使用 Defold API 函数 `sys.save(filename, data)` 进行存储,并使用 `sys.load(filename)` 加载。您可以使用 `sys.get_save_file(application_id, name)` 获取操作系统特定位置的路径,文件可以保存在那里,通常在登录用户的个人文件夹中。 ### 在游戏主机上保存游戏 使用 `sys.get_save_file()` 和 `sys.save()` 在大多数平台上都能很好地工作,但在游戏主机上建议采用不同的方法。主机平台通常将用户与每个连接的控制器相关联,因此保存的游戏、成就和其他功能应该与其各自的用户相关联。 游戏手柄输入事件将包含一个用户 ID,可用于将控制器的操作与主机上的用户相关联。 主机平台及其原生扩展将公开平台特定的 API 函数,以保存和加载与特定用户关联的数据。在主机上保存和加载时使用这些 API。 主机平台的文件操作 API 通常是异步的。在开发针对主机的跨平台游戏时,建议将您的游戏设计为所有文件操作都是异步的,无论平台如何。例如: ```lua local function save_game(data, user_id, cb) if console then local filename = "savegame" consoleapi.save(user_id, filename, data, cb) else local filename = sys.get_save_file("mygame", "savegame" .. user_id) local success = sys.save(filename, data) cb(success) end end ``` ## 构建产物 确保为每个发布的版本[生成调试符号](/manuals/debugging-native-code/#symbolicate-a-callstack),以便您可以调试崩溃。将这些与应用程序包一起存储。 确保存储在第一次打包期间在项目根目录生成的 `manifest.private.der` 和 `manifest.public.der` 文件。这些是游戏存档和存档清单的公钥和私钥签名密钥。您需要这些文件才能重新创建游戏的先前版本。 ## 应用程序优化 阅读[优化手册](/manuals/optimizations),了解如何优化应用程序的性能、大小、内存使用和电池消耗。 ## 性能 始终在目标硬件上测试!检查游戏性能,并在需要时进行优化。使用[分析器](/manuals/profiling)查找代码中的瓶颈。 ## 屏幕分辨率和刷新率 对于具有固定方向和屏幕分辨率的平台:检查游戏在目标平台屏幕分辨率和宽高比上是否正常工作。对于具有可变屏幕分辨率和宽高比的平台:检查游戏在各种屏幕分辨率和宽高比上是否正常工作。考虑在渲染脚本和相机中使用什么样的[视图投影](/manuals/render/#default-view-projection)。 对于移动平台,可以在 *game.project* 中锁定屏幕方向,或者确保游戏在横向和纵向模式下都能工作。 * **显示尺寸** - 在比 *game.project* 中设置的默认宽度和高度更大或更小的屏幕上,一切看起来都好吗? * 渲染脚本中使用的投影和 gui 中使用的布局将在这里发挥作用。 * **宽高比** - 在与 *game.project* 中设置的宽度和高度的默认宽高比不同的屏幕上,一切看起来都好吗? * 渲染脚本中使用的投影和 gui 中使用的布局将在这里发挥作用。 * **刷新率** - 游戏在刷新率高于 60 Hz 的屏幕上运行良好吗? * *game.project* 显示部分中的 vsync 和交换间隔 ## 移动手机的刘海屏和打孔屏相机 在显示屏上使用小镜头切口来容纳前置摄像头和传感器(也称为刘海屏或打孔屏相机)变得越来越流行。将游戏移植到移动设备时,建议确保没有关键信息放置在通常发现刘海屏(屏幕上边缘中心)或打孔屏(屏幕左上区域)的位置。也可以使用[安全区域扩展](/extension-safearea)将游戏视图限制在任何刘海屏或打孔屏相机之外的区域。 ## 平台特定指南 ### Android 确保将您的[密钥库](/manuals/android/#creating-a-keystore)存储在安全的地方,以便您可以更新您的游戏。 ### 游戏主机 存储每个版本的完整包。如果您想给游戏打补丁,您将需要这些文件。 ### Nintendo Switch 集成平台特定代码 - 对于 Nintendo Switch,有一个单独的扩展,提供一些用户选择等辅助功能。 Defold for Nintendo Switch 使用 Vulkan 作为图形后端 - 确保使用[Vulkan 图形后端](https://github.com/defold/extension-vulkan)测试游戏。 ### PlayStation®4 集成平台特定代码 - 对于 PlayStation®4,有一个单独的扩展,提供一些用户选择等辅助功能。 ### HTML5 在手机上玩网页游戏越来越受欢迎 - 尽量使游戏在移动浏览器上也能良好运行!同样重要的是要记住,网页游戏被期望快速加载! - 确保优化游戏的大小。还要考虑一般的加载体验,以避免不必要的玩家流失。 2018 年,浏览器引入了声音自动播放策略,阻止游戏和其他网页内容播放声音,直到发生用户交互事件(触摸、按钮、游戏手柄等)。在移植到 HTML5 时,考虑到这一点很重要,只在第一次用户交互时才开始播放声音和音乐。在任何用户交互之前尝试播放声音将在浏览器开发者控制台中记录为错误,但不会影响游戏。 还要确保如果游戏正在显示广告,则暂停任何正在播放的声音。