> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Inicio rápido de Lua para Defold

> Configure un proyecto de Defold y realice su primera llamada a la API de PlayFab en Lua mediante el SDK de cliente de Defold de PlayFab para el desarrollo de juegos multiplataforma.

Este inicio rápido le ayuda a realizar su primera llamada a la API de PlayFab mediante Defold.

Antes de poder llamar a cualquier API de PlayFab, debe tener una [cuenta de desarrollador de PlayFab](https://developer.playfab.com).

## Configuración del proyecto de Defold

SO: esta guía está escrita para Windows 10.  También debería funcionar bien en un equipo Mac.

1. Cree una cuenta y descargue Defold, o inicie sesión en [https://www.defold.com/](https://www.defold.com/) (usa Google O-Auth): [https://d.defold.com/stable/](https://d.defold.com/stable/).

2. Si no ha completado el tutorial "Getting Started" de Defold, debería hacerlo ahora.

3. Cree un proyecto nuevo en el panel de Defold, como se muestra a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-add-project.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=cb5e329e814177d3456031004cccfe39" alt="Crear un proyecto de Defold nuevo" width="162" height="376" data-path="images/playfab/sdks/lua/defold-add-project.png" />

4. Ejecute **Defold** y cargue el proyecto nuevo. Debería ver varias ventanas con un aspecto similar al del ejemplo que se muestra a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dashboard.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=3451047b4d248b54063ae35d647b01f4" alt="Panel de Defold" width="1626" height="1360" data-path="images/playfab/sdks/lua/defold-dashboard.png" />

5. Actualice la configuración del proyecto e incluya PlayFab en las dependencias:

   [https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip](https://github.com/PlayFab/LuaSdk/raw/master/Defold/PlayFabClientSdk.zip)

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dependency-1.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=801a76d9fbd6fd3c4d1c2674a6cae4be" alt="Agregar PlayFab a las dependencias" width="865" height="294" data-path="images/playfab/sdks/lua/defold-dependency-1.png" />

6. Seleccione: **Project** -> **Fetch Libraries**, y debería ver una nueva carpeta integrada de PlayFab, como se muestra a continuación.

<img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-dependency-2.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=ce12f4685d293dc015acdf6132997d53" alt="Recuperar bibliotecas del proyecto" width="812" height="289" data-path="images/playfab/sdks/lua/defold-dependency-2.png" />

7. Cree algunos archivos:

   * **main/PfGettingStarted.gui**

   * Seleccione la carpeta "main" -> **new** -> **Gui File** -> **PfGettingStarted.gui**.

   * **main/PfGettingStarted.gui\_script**

   * Seleccione la carpeta "main" -> **new** -> **Gui Script File** -> **PfGettingStarted.gui\_script**.

8. Conecte la nueva GUI en main.collection.

   * Seleccione main.collection para abrirlo.

   * En el panel Outline:
     * Seleccione **Add Game Object** (opcionalmente, cámbiele el nombre a **PfGui**).
       * Seleccione el objeto nuevo, **Add Component From File...**
         * PfGettingStarted.gui (creado anteriormente).

   * El panel Outline al ver main.collection debería tener un aspecto similar al del ejemplo que se muestra a continuación.

     <img src="https://mintcdn.com/microsoft-4404708b/N3T1ucKV7zIMBudj/images/playfab/sdks/lua/defold-main-outline.png?fit=max&auto=format&n=N3T1ucKV7zIMBudj&q=85&s=cdc7b1fa9078bf5fcd4bb85877858a7a" alt="Panel Outline principal" width="259" height="110" data-path="images/playfab/sdks/lua/defold-main-outline.png" />

La instalación de PlayFab está completa. Este proyecto aún no está listo para compilarse, pero lo solucionaremos en el paso siguiente.

## Configuración de la primera llamada a la API

Esta guía proporciona los pasos mínimos para realizar su primera llamada a la API de PlayFab. La confirmación será visible en la ventana del juego.

1. En el editor de Defold, haga doble clic en **PfGettingStarted.gui\_script**.

2. Esto debería abrir el archivo para la edición de texto.

3. Actualice el contenido de PfGettingStarted.gui\_script como se muestra a continuación.

<Note>
  Para consultar el formato correcto del objeto loginRequest de este ejemplo, vea la referencia de API de [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid).
</Note>

```gui_script theme={null}
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
```

4. En el editor de **Defold**, haga clic con el botón derecho en **PfGettingStarted.gui** -> **Open With** -> **Text Editor**. Lamentablemente, esto cambia una configuración interna de Defold, así que:

   * Ábralo de nuevo: haga clic con el botón derecho en **PfGettingStarted.gui** -> **Open With** -> **GUI Editor**. Esto restablece el valor predeterminado a la normalidad.

   * Seleccione la pestaña de edición de texto de **PfGettingStarted.gui**.

   * Actualice el contenido de texto de PfGettingStarted.gui como se muestra a continuación.

```gui_script theme={null}
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
```

## Finalización y ejecución

En primer lugar, asegúrese de que todo está guardado y seleccione otra pestaña. Luego, busque los marcadores " \* ": a veces Defold no se actualiza.

Después, compile su juego (Ctrl+b o en los menús desplegables: **Project** -> **Build and Launch**). Debería ver el texto siguiente en la pantalla:

"Congratulations, you made your first successful API call!"

Para obtener una lista de todas las llamadas a la API de cliente disponibles, consulte nuestra documentación de [referencias de API de PlayFab](/services/playfab/api-references).

¡Feliz programación!

## Análisis del código

* `PfGettingStarted.gui`
  * Nuestras instrucciones para `PfGettingStarted.gui` son por conveniencia, no con fines instructivos. Este archivo es una definición de GUI, que agrega un cuadro de texto a la pantalla y lo enlaza a nuestro otro script: `PfGettingStarted.gui_script`. Normalmente NO editaría estos archivos en formato de texto.
  * Para obtener instrucciones adecuadas sobre cómo crear widgets de GUI de Defold, lea esta guía:
  * [Escenas de GUI en Defold](https://www.defold.com/manuals/gui/)

* `PfGettingStarted.gui_script`
  * Instrucciones require y configuración.
    * `PlayFabClientApi` le permite realizar llamadas a la API de cliente: esta es la razón por la que está aquí.
    * IPlayFabHttps y PlayFabHttps\_Defold:
      * Los complementos de Defold de PlayFab se basan en el LuaSdk de PlayFab. El lenguaje Lua no tiene un módulo HTTPS propiamente dicho. Cada motor de juego que usa Lua implementa el suyo. Estas dos variables indican a PlayFabSdk cómo acceder a HTTPS. Solo necesita hacerlo una vez en el proyecto, en la primera escena. Por lo demás, es código reutilizable obligatorio

  * `PlayFabClientApi.settings.titleId = "144"`
    * Cada proyecto que use PlayFab debe crear un título único en el sitio web de PlayFab, que llamamos Game Manager. Busque su `titleId` en Game Manager y reemplace `144` por su `titleId`.

  * `function init(self)`
    * Función de Defold: se llama cuando se inicializa la GUI.

  * `local loginRequest = { TitleId = PlayFabClientApi.settings.titleId, CustomId = "GettingStartedGuide", CreateAccount = true }`
    * La mayoría de los métodos de la API de PlayFab requieren parámetros de entrada, y esos parámetros de entrada se empaquetan en un objeto de solicitud
    * Cada método de la API requiere un objeto de solicitud único, con una combinación de parámetros opcionales y obligatorios
      * Para `LoginWithCustomIDRequest`, hay un parámetro obligatorio, `CustomId`, que identifica de forma única a un jugador, y `CreateAccount`, que permite crear una cuenta nueva con esta llamada.
    * Para el inicio de sesión, la mayoría de los desarrolladores querrán usar un método de inicio de sesión más adecuado
      * Consulte la [documentación de inicio de sesión de PlayFab](xref:titleid.playfabapi.com.client.authentication) para obtener una lista de todos los métodos de inicio de sesión y los parámetros de entrada. Las opciones comunes son:
        * [LoginWithAndroidDeviceID](xref:titleid.playfabapi.com.client.authentication.loginwithandroiddeviceid)
        * [LoginWithIOSDeviceID](xref:titleid.playfabapi.com.client.authentication.loginwithiosdeviceid)
        * [LoginWithEmailAddress](xref:titleid.playfabapi.com.client.authentication.loginwithemailaddress)

  * `PlayFabClientApi.LoginWithCustomID(loginRequest, OnLoginSuccess, OnLoginFailed)`
    * Esto realiza la llamada a la API mediante la solicitud y proporciona funciones de devolución de llamada para las condiciones de éxito y de error.

  * `function OnLoginSuccess(result)`
    * El objeto result de muchas devoluciones de llamada correctas de la API contendrá la información solicitada.
    * `LoginResult` contiene información básica sobre el jugador, pero para la mayoría de los usuarios, el inicio de sesión es simplemente un paso obligatorio antes de llamar a otras API.

  * `function OnLoginFailed(error)`
    * Las llamadas a la API pueden fallar por muchos motivos, y siempre debe intentar controlar los errores.

    * Motivos por los que fallan las llamadas a la API (en orden de probabilidad)
      * PlayFabSettings.TitleId no está establecido. Si olvida establecer titleId en su título, nada funcionará.

      * Parámetros de la solicitud. Si no ha proporcionado la información correcta o necesaria para una llamada a la API concreta, esta fallará. Consulte `error.errorMessage`, `error.errorDetails` o `error.GenerateErrorReport()` para obtener más información.

      * Problema de conectividad del dispositivo. Los teléfonos móviles pierden y recuperan la conectividad constantemente, por lo que cualquier llamada a la API en cualquier momento puede fallar aleatoriamente y funcionar inmediatamente después. Entrar en un túnel puede desconectarle por completo.

      * Problema del servidor de PlayFab. Como ocurre con todo el software, puede haber problemas. Consulte nuestras [notas de la versión](/services/playfab/release-notes) para conocer las actualizaciones.

      * Internet no es 100 % confiable. A veces, el mensaje se daña o no llega al servidor de PlayFab.

    * Si tiene dificultades para depurar un problema y la información contenida en el error no es suficiente, visítenos en nuestros [foros](https://community.playfab.com/index.html)

  * `local pfTestOutput = gui.get_node("pfOutput")`
    * Esta es otra función de GUI de Defold. Recupera el objeto de GUI `pfOutput` definido en nuestro archivo PfGettingStarted.gui y le asigna el texto que se mostrará al usuario.


## Related topics

- [Inicio rápido de Lua para Corona](/es/services/playfab/sdks/lua/quickstart-corona.md)
- [Inicio rápido de C++ para Linux](/es/services/playfab/sdks/playfab-cpp/quickstart-linux.md)
- [Inicio rápido de C++ para Windows](/es/services/playfab/sdks/playfab-cpp/quickstart-windows.md)
- [Inicio rápido de Unity](/es/services/playfab/sdks/unity3d/quickstart.md)
- [Inicio rápido de C/C++ para GDK](/es/services/playfab/sdks/playfab-cpp/quickstart-gdk.md)
