如何在libgdx中创建没有标题栏的窗口

时间:2017-07-31 23:04:51

标签: java libgdx

我有一个项目需要看起来像这样:

enter image description here

使用窗口我得到以下结果

enter image description here

我使用以下代码

创建上述结果
private Table buildControlsWindowLayer() {
        Window window = new Window("", skinLibgdx);
        // + play button
        playButton = new Button(maputoSkin, "play");
        window.add(playButton).pad(10, 0, 10, 0).row();
        playButton.addListener(listener);
        // + options button
        optionsButton = new Button(maputoSkin, "options");
        window.add(optionsButton).pad(10, 0, 10, 0).row();
        optionsButton.addListener(listener);
        // + leaders button
        leadersButton = new Button(maputoSkin, "leaders");
        window.add(leadersButton).pad(10, 0, 10, 0).row();
        leadersButton.addListener(listener);
        if (Constants.DEBUG_FLAG_MENU_SCREEN) window.debug();
        window.pack();
        window.setPosition(Constants.VIEWPORT_GUI_WIDTH / 2 - window.getWidth()/2,
                           Constants.VIEWPORT_GUI_HEIGHT/2 - window.getHeight());
        return window;
    }

我的问题

予。如何摆脱标题栏

II。如何设置自己的背景而不是libgdx默认

III。这种方法对于第三种情况是否正确?

3 个答案:

答案 0 :(得分:2)

com.badlogic.gdx.scenes.scene2d.ui.Window附带一个构造函数:Window(java.lang.String title, Window.WindowStyle style) 并且还有setStyle(Window.WindowStyle style)方法。 Window.WindowStyle类允许您为此窗口定义样式,包括背景。 (https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/ui/Window.WindowStyle.html

对于根据libgdxs doc的标题栏,窗口是:

"可以拖动并充当模态窗口的表格。顶部填充用作窗口的标题高度。",我没有找到任何直接的方法来摆脱标题栏,但如果你扩展窗口类,你可以覆盖它的一些功能来实现期望的结果。查看其来源:https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/scenes/scene2d/ui/Window.java

要回答第三个问题,您必须提供更多信息,您在这种情况下的意思是什么?

答案 1 :(得分:0)

private Table buildControlsWindowLayer() {
        SpriteDrawable bgDrawble=new SpriteDrawable(new Sprite(createTexture(120, 400, Color.BLACK, 1)));
        WindowStyle windowStyle=new WindowStyle(new BitmapFont(), Color.GREEN, bgDrawble);
        Window window = new Window("", windowStyle);
       // window.setWidth(0);
        // + play button
        SpriteDrawable upDrawble=new SpriteDrawable(new Sprite(createTexture(100, 40, Color.RED, 1)));
        SpriteDrawable downDrawble=new SpriteDrawable(new Sprite(createTexture(100, 40, Color.RED, 1)));
        SpriteDrawable cheDrawble=new SpriteDrawable(new Sprite(createTexture(100, 40, Color.RED, 1)));
        TextButtonStyle btStyle=new TextButtonStyle(upDrawble, downDrawble, cheDrawble, new BitmapFont());
        TextButton playButton = new TextButton("play",btStyle);
        window.add(playButton).pad(10, 0, 10, 0).row();
        //playButton.addListener(listener);
        // + options button
        TextButton  optionsButton = new TextButton( "options",btStyle);
        window.add(optionsButton).pad(10, 0, 10, 0).row();
       // optionsButton.addListener(listener);
        // + leaders button
        TextButton  leadersButton = new TextButton("leaders",btStyle);
        window.add(leadersButton).pad(10, 0, 10, 0).row();
        //leadersButton.addListener(listener);
       /// if (Constants.DEBUG_FLAG_MENU_SCREEN) window.debug();
        window.pack();
       // window.getTitleTable() ;
        return window;
    }



public static Texture createTexture(int width, int height, Color col,
            float alfa) {
        Pixmap pixmap = new Pixmap(width, height, Format.RGBA8888);
        Color color = col;
        pixmap.setColor(color.r, color.g, color.b, alfa);
        pixmap.fillRectangle(0, 0, width, height);

        Texture pixmaptexture = new Texture(pixmap);
        return pixmaptexture;
    }

答案 2 :(得分:0)

我的方法是使用表而不是窗口,并将其背景定义为可从皮肤中抽取的九个补丁

    Skin skin = SkinManager.getInstance().getSkin();
    final Table outerTable = new Table();
    outerTable.setFillParent(true);
    stage.addActor(outerTable);

    // Layer to hold the buttons and dark background
    Table buttonsTable = new Table();

    playButton = new TextButton("Play", skin, "play");
    settingsButton = new TextButton("Setting", skin, "setting");
    highScoreButton = new TextButton("Leaders", skin, "leaders");

    buttonsTable.add(playButton).width().height().pad();
    buttonsTable.row();
    buttonsTable.add(settingsButton).width().height().pad(0);
    buttonsTable.row();
    buttonsTable.add(highScoreButton).width().height().pad();
    buttonsTable.row();
    // + background color
    buttonsTable.setBackground(controlsBackground);

    // Adding button table to outer table
    outerTable.add(buttonsTable).colspan(2).expand();

我将width() height()pad()留空,因为它们取决于您的世界大小。 还有一件事

controlsBackground = new NinePatchDrawable(new NinePatch(
                SkinManager.getInstance().getSkin().getRegion("menu-background"), 10, 10, 10, 10
        ));