Libgdx表组件未正确显示

时间:2016-06-09 22:54:50

标签: java libgdx

大家好我试图在Libgdx中使用Table显示一些图像但它没有正确显示它们我找不到解决方法 当我使用table.bottom时,它会向下显示它们但是当我使用table.center时它会显示它们更低,当我选择顶部,左侧或右侧时它显示什么都没有 :这是我格式化表格的代码:

public class MenuIcons {
    public Viewport viewport;
    public Stage stage;
    public boolean upPressed;
    public boolean leftPressed;
    public boolean rightPressed;
    public boolean levellock1,levellock2;
    public Image lock1;
    public Image lock2;

    public OrthographicCamera camera;
    public Table table;

    //Constructor.
    public MenuIcons(SpriteBatch spriteBatch) {
        camera = new OrthographicCamera();
        viewport = new FitViewport(400, 208, camera);
        stage = new Stage(viewport, spriteBatch);
        Gdx.input.setInputProcessor(stage);
        initalizeTable();


    }
    public void draw() {
        stage.draw();
    }

    public void resize(int width, int height) {
        viewport.update(width, height);
    }
    public void initalizeTable()
    {
        //Buttons with images.
        lock1 = new Image(new Texture("levellock.png"));
        lock1.setSize(25, 25);
        lock1.addListener(new InputListener() {
            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                levellock1 = true;
                return true;
            }

            @Override
            public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
                levellock1 = false;
            }
        });
        lock2 = new Image(new Texture("levellock.png"));
        lock2.setSize(25, 25);
        lock2.addListener(new InputListener() {
            @Override
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
                levellock2 = true;
                return true;
            }

            @Override
            public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
                levellock2 = false;
            }
        });
        //Table with buttons.
        table = new Table();
        table.bottom; //Align to the left bottom.
        table.add();
        table.add();
        table.add();
        table.add(lock1).size(lock1.getWidth(), lock1.getHeight());
        table.add(lock2).size(lock2.getWidth(), lock2.getHeight());



        stage.addActor(table);
    }

    public boolean isLevellock1() {
        return levellock1;
    }

    public boolean isLevellock2() {
        return levellock2;
    }

}

以下是我使用Table.bottom时的图片:

以下是我使用Table.center时的图片:

2 个答案:

答案 0 :(得分:1)

我建议您阅读以下信息和示例: https://github.com/libgdx/libgdx/wiki/Table

这条线甚至不起作用?:table.bottom;

试试这个table.left().bottom();代替table.bottom;

或者更好的是,您可以在添加时对齐各个项目,如下所示:

table.add(lock1).width(lock1.getWidth()).height(lock1.getHeight()).left().bottom();

注意: 为什么一遍又一遍地使用空白table.add();?你不应该使用table.row()吗?

编辑评论:

您需要为项目创建一个行或空格,而不是使用table.add();。你正在给自己造成各种各样的问题。

在进一步之前,您需要在table.setDebug(true);之后添加 table = new Table();,以便了解自己在做什么。

现在试试这个:

    table = new Table();
    table.setDebug(true);
    table.top().left();
    table.add(lock1).width(lock1.getWidth()).height(lock1.getHeight()).left().top();
    table.row();
    table.row();
    table.add(lock2).width(lock2.getWidth()).height(lock2.getHeight()).left().bottom();

现在您可以看到调试行,您可以看到出错的地方。在table.row();之间添加一个空白标签,然后使用.expand();,以便填充这样的空格:

    table.row();
    table.add(myBlankLabel).expandY();
    table.row();

答案 1 :(得分:1)

在根表上调用table.setFillParent(true)。否则,table.bottom()之类的调用毫无意义,因为逻辑表在零大小的框内对齐。