Libgdx,Stage不适合屏幕,按钮不在表格中心

时间:2016-12-22 11:14:48

标签: android libgdx

我目前正在为我的第一款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)的解决方法。

1 个答案:

答案 0 :(得分:0)

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

StartMenu现在看起来像这样:enter image description here