当我在 KorGE 中切换到其他场景时出现异常

Exception when I change to other scene in KorGE

com.soywiz.korinject.AsyncInjector$NotMappedException: Class 'class ChooseCampaign (Kotlin reflection is not available)' doesn't have constructors RequestContext(initialClazz=class ChooseCampaign (Kotlin reflection is not available))

编译当前代码时抛出上述异常。而且我不知道如何修复它以及它意味着什么。
我的代码:

textButton {
            position(0, 128)
            text = "Play"
            onClick {
                println("Play")
                launchImmediately {
                    sceneContainer.changeTo<ChooseCampaign>()
                }
            }
        }

如何修复?

在 KorGE 中使用场景时,您正在间接使用 korinject 依赖注入器。

而且那个喷油器需要手动映射。如果您使用的是模块,则可以在 Module.init 方法中配置这些映射。

检查这个示例:https://github.com/korlibs/korge-samples/blob/1771b7ca7f4440e1a368ff4b441e97bf62e08b8d/sample-scenes/src/commonMain/kotlin/main.kt#L15-L23

在你的例子中,一旦你获得了 Injector 实例,你就可以像这样映射一个场景:

mapPrototype { ChooseCampaign(get()) }

您必须输入与 ChooseCampaign 构造函数具有的参数一样多的 get()

如果你不使用模块,放置映射的地方是不同的,你需要得到Injector实例。

在您的 suspend fun main() = Korge { 块中,您注入了 Stage 单例。这是引用 Views 单例的根视图。

所以你可以像这样访问注入器:this.views.injector

然后您可以随时映射您的场景,但我建议您在应用程序开始时就这样做。