我有一个项目需要看起来像这样:
使用窗口我得到以下结果
我使用以下代码
创建上述结果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。这种方法对于第三种情况是否正确?
答案 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
));