【问题标题】:Libgdx, Stage doesnt fit into the screen and the button are not centered within the TableLibgdx,舞台不适合屏幕,并且按钮不在表格中居中
【发布时间】:2016-12-22 11:14:47
【问题描述】:

我目前正在为我的第一个 android 游戏开发 StartMenu,我目前遇到了 3 个问题:

1) 舞台不完全适合屏幕。我已经尝试将不同的视口类型(stretch-、fit、extendviewport)传递给舞台构造函数,但它们都没有真正达到我的预期。我还为视口尝试了不同的参数(例如,480、800 等数字以及 Gdx.graphics.getWidth()),但我无法使菜单分辨率独立(在 s3 mini 和华为 P8 上尝试过),它要么转太小或太大。

2) 设置按钮不在表格单元格中居中。

3) 按钮改变大小。按下时,它们会填充它们所在的单元格,如何禁用此功能? (顺便说一下,我用 JSON 文件定义了按钮皮肤,但我怀疑这是原因)

@Override
public void resize(int width, int height) {
   stage.getViewport().update(width, height, true);
}

@Override
public void show() {
    stage = new Stage(new ExtendViewport(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT));
    Gdx.input.setInputProcessor(stage);
    rebuildStage();
}

private void rebuildStage() {
    skinStartMenu = new Skin(
            Gdx.files.internal(Constants.SKIN_Start_Menu_UI),
            new TextureAtlas(Constants.Start_Menu_Texture_Atlas)); 

    Table layerControls = buildControlsLayer();
    stage.clear();
    Stack stack = new Stack();
    stage.addActor(stack);
    stack.setSize(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT);
    stack.add(layerControls);
}

private Table buildControlsLayer() {
    Table layer = new Table();
    // + Play Button
    btnMenuPlay = new Button(skinStartMenu, "play");
    layer.add(btnMenuPlay);
    btnMenuPlay.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            onPlayClicked();
        }
    });
    layer.row();
    // + Options Button
    btnMenuOptions = new Button(skinStartMenu, "options");
    layer.add(btnMenuOptions);
    btnMenuOptions.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            onOptionsClicked();
        }
    });
    if (debugEnabled) layer.debug();
    return layer;
}

No Button Pressed; Button Pressed

编辑:我通过调整表格单元格的大小解决了第一个问题,但是我仍然没有解决问题 2) 和 3) 的方法。

【问题讨论】:

  • 你真的需要一个堆栈吗?它使布局更加复杂。如果您想控制 Stack 的位置,则必须将 Stack 的每个子项包装在 Container 中。
  • 实际上我现在不需要它。但我不认为它会有所作为,所以我把它留在那里,以防我将来需要它 x)

标签: android libgdx


【解决方案1】:

好的,我找到了问题的根源。愚蠢的我以不同大小导出了按钮的 png 文件。这就是为什么按钮在按下时会变高的原因。我认为这是按钮小部件的一个功能,默认情况下启用 x)。解决了舞台大小的问题,只需通过“layer.add(btnMenuPlay).size(273, 150);”更改包含按钮的表格单元格的大小。

开始菜单现在看起来像这样:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多