移植指南

Read this manual in English

移植指南

本教程包含了游戏跨平台发布的教程和步骤.

将 Defold 游戏移植到新平台通常是一个比较简单的过程. 理论上只要在 game.project 文件里配置好就行了, 但是处于对平台充分利用的考量还是推荐针对目标平台进行适配. 本教程包含一些通用移植的最佳实践和一些平台相关的细节.

输入

确保游戏适配平台的输入法. 只要支持 游戏手柄 的平台就做好手柄支持! 确保游戏有一个暂停菜单 - 万一输入控制器突然断掉, 游戏有必要暂停!

本地化

本地化翻译游戏中的任何文本以及商店页面中的文本,因为这将对销售产生积极影响! 对于本地化, 确保玩家可以在游戏的不同语言之间轻松切换 (通过暂停菜单).

仅 iOS - 确保在 game.project 里指定了 Localizations, 因为语言不在列表中的话 sys.get_info() 会返回空值.

翻译应用页面上的文字因为这样会对销售产生积极意义! 一些平台要求为游戏发售的每个国家翻译页面文字.

商店资料

应用图标

确保您的游戏在竞争中脱颖而出. 图标通常是您与潜在玩家的第一个接触点. 要在充满游戏图标的页面上很容易找到才好.

商店横幅和图像

确保为您的游戏使用有影响力和令人兴奋的美术资源. 花一些钱与艺术家合作创作吸引玩家的图像可能是件值得的事.

保存游戏进度

在桌面设备, 手机和 web 游戏里保存进度

保存游戏状态可以使用 Defold API 函数 sys.save(filename, data) 然后使用 sys.load(filename) 加载. 可以使用 sys.get_save_file(application_id, name) 获取不同系统上文件保存的路径, 一般就是登录用户的 home 文件夹.

在游戏主机里保存进度

用 sys.get_save_file() 和 sys.save() 能在大多数平台上顺利工作, 但是在游戏主机上推荐另一个方法. 游戏主机平台通常将用户与每个连接的手柄相关联, 这样当保存进度时, 成就和其他功能应与其各自的用户相关联.

游戏手柄输入事件将包含一个用户 id, 可用于将手柄的操作与控制台上的用户关联起来.

主机平台及其原生扩展会暴露相关 API 函数,以保存和加载与特定用户关联的数据. 在主机上使用这些 API 以实现保存和载入游戏.

主机平台的文件操作 API 通常都是异步的. 在给主机开发跨平台游戏时推荐把所有文件操作做成异步的, 不管目标是哪个平台. 例如:

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

Build artifacts

确保为每个版本发布 生成 debug symbols 以便你能对它们进行崩溃调试. 将它们与应用包保存在一起.

确保储存初次打包时在项目根目录生成的 manifest.private.der 和 manifest.public.der 文件. 它们是游戏包和 manifest 的公钥和私钥. 您需要这些文件才能重新创建游戏的上一个版本.

应用优化

参考 优化教程 优化应用的性能, 大小, 内存占用和耗电量.

性能

用真机进行调试! 必要的话查找性能瓶颈然后进行优化. 可以使用 性能分析器 分析找出代码性能瓶颈.

屏幕分辨率

对于具有固定方向和屏幕分辨率的平台: 检查游戏能否在目标平台屏幕分辨率和长宽比上正常运行. 对于具有可变屏幕分辨率和长宽比的平台: 检查游戏是否适用于各种屏幕分辨率和长宽比. 考虑在渲染脚本和摄像机中使用什么样的 视口映射 最好.

移动平台可以在 game.project 配置中锁定屏幕方向, 或者做好适配确保游戏在横向和纵向模式下都能运行.

Display sizes - 在游戏设计宽高之外的大屏或者小屏上是否显示正常?

渲染脚本中使用的映射和 gui 中的布局会在这里发挥作用.

Aspect ratios - 在游戏设计屏幕比例之外的屏幕上是否显示正常?

渲染脚本中使用的映射和 gui 中的布局会在这里发挥作用.

Refresh rate - 在刷新率高于 60 Hz 的屏幕上是否显示正常?

调整配置 game.project 里 Display 部分的 vsync 和 swap interval.

手机刘海和打孔屏

在显示屏上使用小切口 (也叫刘海或者打孔屏) 来安装前置摄像头和传感器变得越来越流行. 将游戏移植到移动设备时, 建议确保没有关键信息放置在刘海 (屏幕上边中间) 或打孔(屏幕左上角) 的位置. 还可以使用 安全区域扩展 将游戏视图限制在任何刘海或打孔摄像机之外的区域.

平台相关指导

Android

确保你的 keystore 保存在安全的地方以便后面可以更新你的游戏.

Consoles

保存每个版本的完整游戏包. 如果要给游戏发补丁就要用到这些文件.

Nintendo Switch

集成目标平台代码 - 对于 Nintendo Switch 就有一个特殊的扩展包以及很多工具供用户使用.

Defold 的 Nintendo Switch 使用 Vulkan 作为图形后端 - 要使用 Vulkan 图形后端 测试游戏.

PlayStation®4

集成目标平台代码 - 对于 PlayStation®4 就有一个特殊的扩展包以及很多工具供用户使用.

HTML5

在手机上玩网页游戏正越来越流行 - 当然前提是要确保游戏在手机浏览器可以流畅运行! 还要注意的是网页游戏要能快速载入! - 换句话说就是优化游戏体积. 同时还要考虑加载速度,以免造成不必要的玩家流失.

2018 年, 浏览器引入了声音自动播放策略. 该策略阻止游戏和其他 Web 内容播放声音, 直到用户交互事件 (触摸, 按钮, 游戏手柄事件等) 发生. 在移植到 HTML5 时必须考虑到这一点, 仅在第一次用户交互时才开始播放声音和音乐. 尝试在任何用户交互之前就播放声音, 将在浏览器开发人员控制台中记录为错误, 但不会影响游戏运行.

还要确保显示广告的时候暂停掉游戏里的所有声音.