使用libgdx缩放scene2d按钮

时间:2014-05-11 15:43:00

标签: android button libgdx scaling scene2d

我不知道这只是我,但drawables让我感到困惑。他们是打算保持给定的尺寸,还是有办法在其中放大图像?我知道他们可以使用ninepatch通过拉伸图像来填充某些区域,但我想缩放它伸展的图像。我正在使用TextButton 对于我的菜单按钮,但它们太大了,我很想知道如何扩展它们。我正在从一张地图集中检索皮肤,其中有九个图像。 这是设置屏幕: The settings screen 以下是我正在使用的包中的图像: ninepatch images packed 这是TextureAtlas和Skin的初始化:

buttonAtlas = new TextureAtlas(Gdx.files.internal("buttons/buttons.pack"));
buttonSkin = new Skin(buttonAtlas); 

这是菜单按钮的初始化。

TextButtonStyle textButtonStyle = new TextButtonStyle();
textButtonStyle.up = Assets.buttonSkin.getDrawable("bluebutton");
textButtonStyle.down = Assets.buttonSkin.getDrawable("redbutton");
textButtonStyle.font = font;

buttonMenu = new TextButton("Menu", textButtonStyle);
buttonMenu.pad(20.0f);
buttonMenu.addListener(new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        game.fade.startFadeOut();
        super.clicked(event, x, y);
    }
});

也许我可以改变我把它放在桌子上的方式,或者我如何把桌子放在舞台上?

table.add(buttonMenu).width(Gdx.graphics.getWidth()/4);
stage.addActor(table);

作为最后的手段,我想我可以尝试创建自己的文字按钮演员,我可以缩放,谢谢你的时间。

4 个答案:

答案 0 :(得分:1)

首先,如果您知道图像太大:最好将图像本身缩放到较小的尺寸,然后使用TexturePacker生成包含较小图像的新TextureAtlas。

无论如何,你可以使用TableLayout缩放图像按钮,如果你真的想要,请参见示例:

table.add(buttonMenu).width(100).height(100);

答案 1 :(得分:0)

上述答案对我没有用,但我有一个解决方案。

您可以制作辅助相机并将其附加到舞台上。 要缩放表格,只需缩放辅助摄像机的视口大小

一个例子是:

//Heres where you set the scale of your buttons and your table
Camera secondaryCamera = new Camera(Gdx.graphics.getWidth() * scale, 
                                    Gdx.graphics.getHeight() * scale); 


Stage stage = new Stage();
Table table = new Table();
ImageButton button = new ImageButton(drawableUp, drawableDown, drawableChecked);
table.setFillParent(true);

stage.getViewport().setCamera(secondaryCamera);

table.add(ImageButton);
stage.addActor(table);

当您将其用于触控时,这非常有用。您可以将表格用于整个用户界面,并根据自己的喜好进行缩放,与其他游戏项目无关;

答案 2 :(得分:0)

table.add(buttonMenu).width(100).height(100);应该有效,您只需根据自己的喜好调整widthheight参数,也可以使用setBounds方法。这是一个例子:

    TextButton myButton = new TextButton("Press Me", style);
    myButton.setBounds(xCoordinate, yCoordinate, width, height);

答案 3 :(得分:0)

您可以在Drawable中设置ButtonStyle的尺寸,以调整Button的尺寸:

float scale = 0.5f;
float currentHeight = textButtonStyle.up.getMinHeight();
textButtonStyle.up.setMinHeight(currentHeight * scale);

有关详细信息,请参阅official document for layout

  

UI小部件不会设置自己的大小和位置。相反,父窗口小部件设置每个子项的大小和位置。 窗口小部件提供父级可以用作提示的最小,首选和最大大小。某些父窗口小部件(如表和容器)可以为如何调整子项的大小和位置提供约束。要在窗体中为窗口小部件指定特定大小,窗口小部件的最小,首选和最大大小将保持不变,并且在父窗口中设置大小约束。

您可以在source code中找到Button.getPrefHeight()的实施:

public float getPrefHeight () {
    float height = super.getPrefHeight();
    if (style.up != null) height = Math.max(height, style.up.getMinHeight());
    if (style.down != null) height = Math.max(height, style.down.getMinHeight());
    if (style.checked != null) height = Math.max(height, style.checked.getMinHeight());
    return height;
}