LibGdx标签背景与9patch

时间:2016-04-08 15:19:21

标签: java android libgdx label nine-patch

所以我遇到了这个问题,我根本无法解决这个问题。 我在LibGdx的帮助下制作游戏,并尝试创建聊天气泡功能。问题是,当我尝试将标签样式的背景更改为9patch drawable时,它不能很好地缩放它,或者根本没有?

public class ChatBubble
{
    private Label textLabel;
    private BitmapFont font;
    private Label.LabelStyle lStyle;
    private int scaledWidth = 0;
    private int scaledHeight = 0;
    private Timer.Task currentTask;
    private Texture bkg;

    public ChatBubble()
    {
        font = new BitmapFont();
        font.setColor(Color.BLACK);
        bkg = new Texture("data/ui/chatb.9.png");

        NinePatch np = new NinePatch(bkg,11,11,9,10);
        NinePatchDrawable npd = new NinePatchDrawable(np);
        lStyle = new Label.LabelStyle(font,font.getColor());
        lStyle.background = npd;

        textLabel = new Label("",lStyle);
        textLabel.setVisible(false);
        textLabel.setAlignment(Align.center);
        currentTask = new Timer.Task() {
            @Override
            public void run() {
                textLabel.setVisible(false);
            }};
    }

    public void show(String text, float duration)
    {
        if(currentTask.isScheduled())currentTask.cancel();
        textLabel.setText(text);
        textLabel.setVisible(true);
        scaledHeight = (int)textLabel.getPrefHeight();
        scaledWidth = (int)textLabel.getWidth()/2;
        Timer.schedule(currentTask,duration);
    }

    public void show(String text)
    {
        if(currentTask.isScheduled())currentTask.cancel();
        textLabel.setText(text);
        textLabel.setVisible(true);
        scaledHeight = (int)textLabel.getPrefHeight();
        scaledWidth = (int)textLabel.getWidth()/2;
        Timer.schedule(currentTask,(float)(text.length()*0.1));
    }

    public void draw(SpriteBatch batch, float x, float y)
    {
        if(!textLabel.isVisible())return;
        textLabel.setPosition(x - scaledWidth, y + scaledHeight);
        batch.begin();
        textLabel.draw(batch, 1);
        batch.end();
    }
}

它的外观如何: How it looks ingame

9batch的外观如何: 9patch

任何帮助将不胜感激!

更新: 我发现我的9patch扩展正常,标签没有在调用setText()时更新它的大小,因此它的宽度和高度为0,因为构造函数是"&#34 ; ..在标签上调用layout()并没有解决这个问题。

1 个答案:

答案 0 :(得分:0)

.pack()之后的标签上调用.setText()告诉它自己调整文本大小(加上背景可绘制的填充)。您不需要致电layout(),因为这是自动处理的。

我不确定您必须手动调用pack()的确切原因,但通常情况下,Widgets不是WidgetGroup子类的子项(即Table,VerticalGroup等)