适用于 Defold 的 Lua 快速入门

此快速入门可帮助您使用 Defold 进行首次 PlayFab API 调用。

您必须有 PlayFab 开发者帐户才能调用 PlayFab API。

Defold 项目设置

操作系统:本指南适用于 Windows 10。 它也应该适用于 Mac。

  1. 创建帐户并下载 defold,或登录 https://www.defold.com/(使用 Google O-Auth):https://d.defold.com/stable/

  2. 如果尚未完成 Defold“入门教程”,请立即完成该教程。

  3. 在 Defold 仪表板上创建新项目,如下所示。

创建新 Defold 项目

  1. 运行 Defold,然后加载新项目。 可以看到几个类似于以下示例的窗口。

Defold 仪表板

  1. 更新项目设置,在依赖项中包含 PlayFab:

    https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip

将 PlayFab 添加到依赖项

  1. 选择:项目 ->提取库,可以看到新的内置“PlayFab”文件夹,如下所示。

项目提取库

  1. 创建几个文件:

    • main/PfGettingStarted.gui

    • 右键单击“main”文件夹 ->新建 ->Gui 文件 ->PfGettingStarted.gui

    • main/PfGettingStarted.gui_script

    • 右键单击“main”文件夹 ->新建 ->Gui 脚本文件 ->PfGettingStarted.gui_script。

  2. 在 main.collection 中挂钩新 GUI。

    • 双击 main.collection 以打开它。

    • 在 Outline 面板中:

      • 右键单击 Add Game Object(可以重命名为 PfGui)。
        • 右键单击新对象,选择 Add Component From File...
          • PfGettingStarted.gui(上面创建的)。
    • 查看 main.collection 的 Outline 面板应类似于下面的示例。

      Main Outline 面板

PlayFab 安装已完成。 此项目尚未准备好进行生成,但我们会在下一步中解决该问题。

设置您的首次 API 调用

本指南将提供进行首次 PlayFab API 调用的最少步骤。 游戏窗口中将显示确认。

  1. 在 Defold 编辑器中,双击 PfGettingStarted.gui_script

  2. 这会打开文件以进行文本编辑。

  3. 更新 PfGettingStarted.gui_script 的内容,如下所示。

注意

要查找该示例中 loginRequest 对象的正确格式,请参阅 LoginWithCustomID 的 API 参考。

local PlayFabClientApi = require("PlayFab.PlayFabClientApi")
local IPlayFabHttps = require("PlayFab.IPlayFabHttps")
local PlayFabHttps_Defold = require("PlayFab.PlayFabHttps_Defold")
IPlayFabHttps.SetHttp(PlayFabHttps_Defold) -- Assign the Defold-specific IHttps wrapper

PlayFabClientApi.settings.titleId = "144" -- Please change this value to your own titleId from PlayFab Game Manager

function init(self)
    local loginRequest = {
        -- See the API reference for LoginWithCustomID
        TitleId = PlayFabClientApi.settings.titleId,
        CustomId = "GettingStartedGuide",
        CreateAccount = true
    }
    PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)
end

function OnLoginSuccess(result)
    local pfTestOutput = gui.get_node("pfOutput")
    gui.set_text(pfTestOutput, "Congratulations, you made your first successful API call!")
end

function OnLoginFailed(error)
    local pfTestOutput = gui.get_node("pfOutput")
    local message = "Something went wrong with your first API call.\n"
    local message = message .. "Here's some debug information:\n"
    local message = message .. error.GenerateErrorReport()
    gui.set_text(pfTestOutput, message)
end
  1. Defold 编辑器中,右键单击 PfGettingStarted.gui ->通过以下方式打开 ->文本编辑器。 遗憾的是,这会在 Defold 中更改内部设置,因此:

    • 再次打开它:右键单击 PfGettingStarted.gui ->通过以下方式打开 ->GUI 编辑器。 这会将默认设置重置回正常设置。

    • PfGettingStarted.gui 选择文本编辑选项卡。

    • 按如下所示更新 PfGettingStarted.gui 的文本内容。

script: "/main/PfGettingStarted.gui_script"
fonts {
  name: "system_font"
  font: "/builtins/fonts/system_font.font"
}
background_color {
  x: 0.0
  y: 0.0
  z: 0.0
  w: 1.0
}
nodes {
  position {
    x: 100.0
    y: 620.0
    z: 0.0
    w: 1.0
  }
  rotation {
    x: 0.0
    y: 0.0
    z: 0.0
    w: 1.0
  }
  scale {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  size {
    x: 1080.0
    y: 520.0
    z: 0.0
    w: 1.0
  }
  color {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  type: TYPE_TEXT
  blend_mode: BLEND_MODE_ADD
  text: "Logging in..."
  font: "system_font"
  id: "pfOutput"
  xanchor: XANCHOR_LEFT
  yanchor: YANCHOR_TOP
  pivot: PIVOT_NW
  outline {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  shadow {
    x: 1.0
    y: 1.0
    z: 1.0
    w: 1.0
  }
  adjust_mode: ADJUST_MODE_FIT
  line_break: false
  layer: ""
  inherit_alpha: true
  clipping_mode: CLIPPING_MODE_NONE
  clipping_visible: true
  clipping_inverted: false
  alpha: 1.0
  outline_alpha: 1.0
  shadow_alpha: 1.0
  template_node_child: false
  text_leading: 1.0
  text_tracking: 0.0
  size_mode: SIZE_MODE_AUTO
}
material: "/builtins/materials/gui.material"
adjust_reference: ADJUST_REFERENCE_PARENT
max_nodes: 512

完成并执行

首先,确保所有内容都已保存并选择另一个选项卡。然后寻找“ * ”标记 - 有时 Defold 不会刷新。

然后,构建游戏(Ctrl+b 或下拉菜单:项目 ->构建和发布)。 应在屏幕上看到以下文本:

“Congratulations, you made your first successful API call!”

有关所有可用客户端 API 调用的列表,请参阅我们的 PlayFab API 引用文档。

编码愉快!

解析此代码

  • PfGettingStarted.gui

    • 我们有关 PfGettingStarted.gui 的说明只是为了方便,而不是必须如此。 此文件是一个 GUI 定义,它将一个文本框添加到屏幕,然后将它绑定到其他脚本:PfGettingStarted.gui_script。 通常不会以文本形式编辑这些文件。
    • 有关如何生成 Defold GUI 小组件的正确说明,请阅读此指南:
    • Defold 中的 GUI 场景
  • PfGettingStarted.gui_script

    • 需要声明和设置。

      • PlayFabClientApi允许进行客户端 API 调用 - 这是使用它的原因。
      • IPlayFabHttps 和 PlayFabHttps_Defold:
        • PlayFab Defold 插件基于 PlayFab LuaSdk 而构建。 Lua 语言没有正确的 HTTPS 模块。 使用 Lua 的每个游戏引擎都会实现自己的模块。 这两个变量告知 PlayFabSdk 如何访问 HTTPS。 在第一个场景中,只需在项目中执行此操作一次即可。 否则它只是必需样本
    • PlayFabClientApi.settings.titleId = "144"

      • 使用 PlayFab 的每个项目都应在 PlayFab 网站(我们将它称为 Game Manager)中创建唯一的游戏。 在 Game Manager 中找到 titleId,然后将 144 替换为 titleId
    • function init(self)

      • Defold 函数 - 这会在 gui 初始化时进行调用。
    • local loginRequest = { TitleId = PlayFabClientApi.settings.titleId, CustomId = "GettingStartedGuide", CreateAccount = true }

      • 大多数 PlayFab API 方法需要输入参数,而这些输入参数被打包到请求对象中
      • 每个 API 方法都需要唯一请求对象,并且同时具有可选参数和强制参数
        • 对于 LoginWithCustomIDRequest,存在唯一标识玩家的 CustomId 的强制参数,以及可利用此调用创建新帐户的 CreateAccount
      • 对于登录,大多数开发者需要使用更合适的登录方法
    • PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)

      • 这会使用请求执行 API 调用,并为成功和失败条件提供回调函数。
    • function OnLoginSuccess(result)

      • 许多 API 成功回调的结果对象将包含所请求的信息。
      • LoginResult包含有关玩家的一些基本信息,但对于大多数用户而言,登录只是在调用其他 API 之前的必要步骤。
    • function OnLoginFailed(error)

      • API 调用可能由于多种原因而失败,应始终尝试处理失败。

      • 为什么 API 调用失败(按可能性顺序)

        • 未设置 PlayFabSettings.TitleId。 如果忘记将 titleId 设置为您的游戏,则不会进行任何操作。

        • 请求参数。 如果未为特定 API 调用提供正确或必需的信息,则调用将失败。 有关详细信息,请参阅 error.errorMessageerror.errorDetailserror.GenerateErrorReport()

        • 设备连接问题。 手机不断失去/恢复连接,因此任何 API 调用在任何时候都可能随机失败,然后立即恢复运行。 进入隧道将完全断开连接。

        • PlayFab 服务器问题。 与所有软件一样,可能存在问题。 有关更新,请参阅我们的发行说明

        • 互联网并非 100% 可靠。 有时消息已受损或无法到达 PlayFab 服务器。

      • 如果在调试问题时遇到困难,并且错误信息中的信息不充分,请访问我们的论坛

    • local pfTestOutput = gui.get_node("pfOutput")

      • 这是另一个 Defold GUI 函数。 它提取在 PfGettingStarted.gui 文件中定义的 pfOutput GUI 对象,并为它分配文本以显示给用户。