Lingara Lingara ឯកសារ មគ្គុទ្ទេសក៍សិក្សា API បណ្ណាល័យ កម្មវិធី បង្កើត បង្កប់ កម្មវិធីលើបណ្ដាញ
ភាសា: ខ្មែរ

JVM និង Android

ទំព័រនេះត្រូវបានបកប្រែពីភាសាអង់គ្លេស។ ប្រសិនបើទាំងពីរខុសគ្នា ទំព័រភាសាអង់គ្លេសគឺត្រឹមត្រូវ។ អានទំព័រភាសាអង់គ្លេស

កញ្ចប់ឧបករណ៍អ្នកលេង Kotlin ដំណើរការនៅលើ JVM នៅលើកុំព្យូទ័រ និងនៅលើ Android។ ហ្គេម Java ប្រើកញ្ចប់ឧបករណ៍ដដែលនេះតាមរយៈ facade Java របស់វា។ គំរូទាំងនោះធ្វើតាមហ្គេម libGDX មួយ ដែលរង្វិលជុំគូររបស់វាជាកន្លែងធម្មជាតិសម្រាប់បង្ហូរព្រឹត្តិការណ៍ ហើយការហៅដដែលទាំងនោះក៏សមនឹងរង្វិលជុំហ្គេមណាមួយដែរ។

បន្ថែមកញ្ចប់ឧបករណ៍ និង native របស់វា

កញ្ចប់ឧបករណ៍ និងបណ្ណាល័យ native របស់វា គឺជា artifact ដាច់ដោយឡែកពីគ្នានៅលើ Maven Central ដូច្នេះសូមបន្ថែមទាំងពីរ។ ហ្គេមកុំព្យូទ័របន្ថែម lingara-embed-natives-desktop ដែលផ្ទុកបណ្ណាល័យសម្រាប់ Windows, macOS និង Linux។ ម៉ូឌុល Android មួយបន្ថែម lingara-embed-natives-android ដែលជា AAR ជំនួសវិញ។ នៅក្នុងគម្រោង libGDX មួយ native សម្រាប់កុំព្យូទ័រចូលទៅក្នុងម៉ូឌុល desktop ហើយ native សម្រាប់ Android ចូលទៅក្នុងម៉ូឌុល Android។

ហ្គេម Kotlin មួយពឹងផ្អែកលើ lingara-embed-kotlin ហើយហ្គេម Java មួយពឹងផ្អែកលើ lingara-embed-java ដែលជា facade។

យកតូខិនពីម៉ាស៊ីនមេរបស់អ្នក

កញ្ចប់ឧបករណ៍មិនដែលកាន់សម្ងាត់ទេ។ ផ្ដល់ឲ្យវានូវផ្លូវតូខិន (token route) នៃម៉ាស៊ីនមេផ្ទាល់ខ្លួនរបស់អ្នក និង header ដែលផ្ទុកសម័យរបស់អ្នកលេង ហើយកញ្ចប់ឧបករណ៍នឹងផ្ញើទៅវារាល់ពេលដែលវាត្រូវការតូខិន។ ម៉ាស៊ីនមេរបស់អ្នកបង្កើតតូខិនដោយប្រើ កញ្ចប់ឧបករណ៍ម៉ាស៊ីនមេ ហើយឆ្លើយតបដោយតូខិន និងពេលផុតកំណត់របស់វា។

បង្ហូរព្រឹត្តិការណ៍នៅក្នុងរង្វិលជុំគូររបស់អ្នក

ស្នូលដំណើរការ I/O បណ្ដាញរបស់វានៅលើ thread ផ្ទាល់ខ្លួនរបស់វា ហើយមិនដែលហៅចូលទៅក្នុងកូដរបស់អ្នកទេ។ នៅក្នុងរង្វិលជុំគូររបស់អ្នក នៅលើ thread ហ្គេម សូមបង្ហូរអ្វីដែលបានមកដល់ យ៉ាងច្រើនបំផុត 256 ព្រឹត្តិការណ៍ក្នុងមួយលើក ហើយដោះស្រាយព្រឹត្តិការណ៍នីមួយៗ៖ បច្ចុប្បន្នភាពនៃការហាត់ ការឆ្លើយតប NPC ដែលបានស្ទ្រីម ឬកំហុសមួយ។ នៅក្នុង Java ព្រឹត្តិការណ៍នីមួយៗទៅកាន់ method ដែលត្រូវគ្នានៃ 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();
}