Also ich bin auf dieses Problem gestoßen, dass ich einfach nicht schaffen, zu sortieren. Ich mache ein Spiel mit Hilfe von LibGdx und versuche, eine Chat-Bubble-Funktionalität zu erstellen. Das Problem ist, wenn ich versuche, den Hintergrund des Label-Stils zu einem 9patch Drawable zu ändern, skaliert es nicht gut oder überhaupt?LibGdx Etikett Hintergrund mit 9Patch
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();
}
}
Wie sieht es im Spiel:
Wie die 9batch aussieht:
Jede mögliche Hilfe würde geschätzt!
Update: Ich habe herausgefunden, dass meine 9patch skaliert ok, das Problem ist in Label nicht aktualisiert seine Größe, wenn setText() aufgerufen wird, so dass es Breite und Höhe 0 seit Konstruktor war "" .. Aufruf Layout() auf dem Etikett löst das auch nicht.
ich habe es schon mal probiert, ändert leider nichts. Die Art, wie ich das jetzt gelöst habe, ist Label = neues Label ("", stylewithbkg); jedes Mal, wenn ich eine neue Chat-Blase zeigen .. das ist nicht sehr klug Speicher weise tho :( –