libgdx全息皮肤:没有没有用名称注册的SelectBoxStyle:默认

libgdx holo-skin: no No SelectBoxStyle registered with name: default

我正在尝试使用 libKtx 扩展进入 LibGDX,并尝试让我的第一个 UI 开始。我想添加一个 SelectBox 来设置 window 分辨率,但是在设置舞台时出现异常:

Exception in thread "main" com.badlogic.gdx.utils.GdxRuntimeException: No com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle registered with name: default
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.get(Skin.java:162)
    at com.badlogic.gdx.scenes.scene2d.ui.SelectBox.<init>(SelectBox.java:80)
    at ktx.scene2d.KSelectBox.<init>(widget.kt:405)
    at ch.raoc.sublighttrader.screen.ConfigMenu.setStage(ConfigMenu.kt:132)
    at ch.raoc.sublighttrader.screen.ConfigMenu.<init>(ConfigMenu.kt:16)
    at ch.raoc.sublighttrader.Main.create(Main.kt:37)

我正在使用 here 的全息深色皮肤进行测试,我查看了 json 文件并验证了 SelectBox 确实应该有一个“默认”样式在那里:

    com.badlogic.gdx.scenes.scene2d.ui.SelectBox$SelectBoxStyle: {
        default: { background: spinner_default, backgroundOver: spinner_focused, backgroundOpen: spinner_pressed, listStyle: default, scrollStyle: opaque, font: default-font, fontColor: text-dark },
        default-thin: { background: spinner_default, backgroundOver: spinner_focused, backgroundOpen: spinner_pressed, listStyle: default-thin, scrollStyle: opaque, font: thin-font, fontColor: text-dark }
    },

皮肤的加载看起来像这样,并且如前所述,我尝试过的其他元素工作正常,所以我认为这不是问题: Skin(Gdx.files.internal("${assetPath}ui/skin/dark-mdpi/Holo-dark-mdpi.json"))

发生这种情况的特定菜单定义如下所示:

    private fun setStage() {
        stage.actors {
            table {
                setFillParent(true)
                left()
                top()
                textButton("Back", skin = manager.skin) {
                    onChange {
                        // TODO: Breadcrumbs!
                        manager.showMainMenu()
                    }
                }
            }
            table {
                defaults().fillX().uniformX()
                setFillParent(true)


                label("Options", skin = manager.skin) {
                    setAlignment(Align.center)
                }
                row()
                selectBox<String> {
                    setItems(
                        "1920x1080",
                        "1792x1008",
                        "1664x936",
                        "1536x864",
                        "1408x792",
                        "1280x720",
                        "1152x648",
                        "1024x576"
                    )
                }
            }
        }
    }

如果我注释掉 selectBox,一切正常。

基本上我有两个问题:json 可能有什么问题? (好吧,如果它是实际的 json 我会发现它有很多错误,但似乎 libGDX 解析器不太关心引号,否则 nothing 在这里可以工作。至少按钮和标签工作得很好)

还有另一个问题,我可以 libGDX 以某种方式记录皮肤解析吗?然后我也许可以自己解决这些问题,但现在我所拥有的只是一个非常好的(看起来)皮肤,我不是自己写的,还有一个例外,据我所知不应该存在,没有关于两者如何组合在一起的任何信息。

附录

我真的运行 没主意了。我尝试了一种不同的皮肤,想着也许它有一个问题,只是没有人注意到。但是其他皮肤在尝试实例化 SelectBox 时会抛出相同的错误。 我想也许某处与我正在使用的版本不兼容,但我检查了样式 类 的所有字段并将它们与 json 进行了比较,它们都匹配,所有字段不能为空的被初始化。 SelectBox 依赖的两种样式 ListStyle 和 ScrollPaneStyle 也是如此。那里似乎一切都很好。

我仔细查看了调试器中的皮肤,据我所知,SelectBox 有一个默认样式,还有两个依赖样式:

然而,libGDX 一直告诉我 SelectBox 没有默认样式,没有任何进一步的信息。我不知道从哪里继续...

发现椅子和键盘之间的问题

我不会把血淋淋的皮肤交给工厂,我没有注意到所有错误的地方都太用力了。所以这个:

selectBox<String> {
                    ...
                }

很明显必须是这样的:

selectBox<String>(skin = manager.skin) {
                    ...
                }