Lingara Lingara المستندات أدلة التعلّم API المكتبات التطبيقات البناء التضمين تطبيق الويب
اللغة: العربية

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، أي الواجهة.

احصل على الرموز من خادمك

لا تحتفظ الحزمة بأي سرّ أبدًا. أعطِها مسار الرموز في خادمك والترويسة التي تحمل جلسة اللاعب، فترسل الحزمة طلبًا إليه كلما احتاجت إلى رمز. يُصدر خادمك الرمز باستخدام حزمة خادم ويجيب بالرمز وموعد انتهاء صلاحيته.

أفرغ الأحداث في حلقة العرض

تشغّل النواة عمليات الإدخال والإخراج الشبكية على خيطها الخاص ولا تستدعي شيفرتك أبدًا. في حلقة العرض، على خيط اللعبة، أفرغ ما وصل، بحد أقصى 256 حدثًا في المرة، وتعامل مع كل حدث: تحديث تدريب، أو رد NPC متدفّق، أو خطأ. في Java، يذهب كل حدث إلى الدالة المطابقة في الزائر الخاص بك. أغلق الحزمة في خطوة التخلّص في لعبتك، فيوقف ذلك النواة ويحرّرها.

انظر حوار 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();
}