在 Libgdx/Scene2D SelectBox 中显示图像

Show images in Libgdx/Scene2D SelectBox

我有一个 SelectBox,它获取基本上封装了图像和更多细节的对象列表。我不想显示文本,而是想显示那个 TextureRegion。

我该怎么做?据我所知,SelectBox 默认显示 toString().

所以我的 class 看起来像那样(有点笨):

public class Image
{
    private Vector2 position;
    private TextureRegion sprite;

    public Image(Vector2 position) {...}

    public void render(SpriteBatch batch) { batch.draw{this.sprite, this.position.x ...}

    public String toString() { return "Position: " + position; }
}

SelectBox<Image> selectBox = ... // fetch data

我需要创建自己的 SelectBoxStyle 吗?如果是这样,我如何覆盖它以绘制 TextureRegion 而不是 Text?

SelectBox 使用 List 来显示其值。 List 用这个方法转换它的 children:

protected String toString (T obj) {
    return obj.toString();
}

这不是您通常包含和管理其 children 的 actor:它基本上有一个数据容器列表,将它们转换为字符串(同时允许您通过扩展 class).呈现方法并不期望数据容器成为参与者:它只是使用一种字体来呈现它们转换成的文本。您基本上必须实现一个自定义选择 actor,可能在 ScrollPane 中使用 Table(或其他容器),并使用 TextButton/ImageTextButton 存储当前值并打开菜单。

不过,您可以尝试使用 VisUI 扩展名。它的菜单小部件具有类似 drop-down 的行为,并允许您为每个菜单条目添加图标。此外,VisUI 1.0.0 添加了强大的 ListView 小部件,它允许您创建自定义角色来显示值集合。