Lingara Lingara 說明文件 學習指南 API 函式庫 App 建立 嵌入 網頁版
語言: 客家話

JVM 摎 Android

這頁係對英文翻譯過來个。若係兩片無共樣,以英文頁為準。 看英文頁

Kotlin 玩家套件在 JVM 頂高行,桌面摎 Android 都做得。Java 遊戲透過佢个 Java 門面用同一隻套件。範例跈等一隻 libGDX 遊戲行,佢个繪圖迴圈係清事件个自然位所,共樣个呼叫也適用任何遊戲迴圈。

加入套件摎佢个原生函式庫

套件摎佢个原生函式庫在 Maven Central 頂高係分開个成品,所以兩隻都愛加。桌面遊戲加 lingara-embed-natives-desktop,肚項有 Windows、macOS 摎 Linux 个函式庫。Android 模組就改加 lingara-embed-natives-android,這係一隻 AAR。在 libGDX 專案肚,桌面个原生函式庫放在桌面模組,Android 个原生函式庫放在 Android 模組。

Kotlin 遊戲依賴 lingara-embed-kotlin;Java 遊戲依賴門面 lingara-embed-java。

從你个伺服器拿權杖

套件從來毋會保管密鑰。將你自家伺服器个權杖路由,摎帶玩家工作階段个標頭交分佢,套件需要權杖个時節就會送請求到該位。你个伺服器用一隻伺服器套件簽發,再用權杖摎佢个到期時間來回應。

在你个繪圖迴圈肚清事件

核心在佢自家个執行緒頂高行網路 I/O,從來毋會呼叫你个程式碼。在你个繪圖迴圈肚、在遊戲執行緒頂高,將已經到个東西清出來,一擺最多 256 隻事件,再一隻一隻處理:練習个更新、串流个 NPC 回覆、錯誤。在 Java 肚,每隻事件會去你个 visitor 對應个方法。在你遊戲个 dispose 步驟將套件關忒,恁樣會停核心,再將佢釋放。

想知這兜事件帶麼个,請看 NPC 對話摎練習結果。

程式碼範例个語言

Kotlin

// The kit, and the natives for the platform: natives-desktop in a libGDX lwjgl3 module, natives-android in its android module.
implementation("com.getlingara:lingara-embed-kotlin:0.1.0-alpha.6")
implementation("com.getlingara:lingara-embed-natives-desktop:0.1.0-alpha.6")

Java

<!-- The kit, and the natives for the platform (lingara-embed-natives-android in an Android module). -->
<dependency>
  <groupId>com.getlingara</groupId>
  <artifactId>lingara-embed-java</artifactId>
  <version>0.1.0-alpha.6</version>
</dependency>
<dependency>
  <groupId>com.getlingara</groupId>
  <artifactId>lingara-embed-natives-desktop</artifactId>
  <version>0.1.0-alpha.6</version>
</dependency>
程式碼範例个語言

Kotlin

// Your server mints the embed token; the kit POSTs {} here whenever it needs one.
private val lingara =
    LingaraEmbed.start(
        EmbedConfig(
            tokenSource =
                TokenSourceConfig.Http(
                    url = "https://my-game.example/lingara/token",
                    headers = listOf(Header("Authorization", Secret("Bearer $session"))),
                ),
            userAgentSuffix = "my-game/1.4",
        ),
    )

Java

// Your server mints the embed token; the kit POSTs {} here whenever it needs one.
lingara =
    LingaraEmbedJava.builder()
        .httpTokenSource(
            "https://my-game.example/lingara/token",
            Map.of("Authorization", "Bearer " + session))
        .userAgentSuffix("my-game/1.4")
        .build();
程式碼範例个語言

Kotlin

// In render(), on the game thread: one crossing, at most 256 events.
fun render() {
    lingara.drain(256) { event ->
        when (event) {
            is EmbedEvent.Practice -> showPractice(event.snapshot.question?.prompt)
            is EmbedEvent.NpcTurn -> onNpcTurn(event.update)
            is EmbedEvent.Error -> println("Lingara error: ${event.error.message}")
            else -> Unit
        }
    }
}

// In dispose(): stops the core and frees it.
fun dispose() {
    lingara.close()
}

Java

// In render(), on the game thread: one crossing, at most 256 events, each to its visitor method.
void render() {
  lingara.drain(256, event -> LingaraEmbedJava.visit(event, visitor));
}

// In dispose(), or let try-with-resources do it.
@Override
public void close() {
  lingara.close();
}