2014-05-11 20 views
5

Ich weiß nicht, ob es nur ich bin, aber drawables verwirren mich. Soll die Größe beibehalten werden oder gibt es eine Möglichkeit, das Bild in ihnen zu skalieren? Ich verstehe, dass sie ninepatch verwenden können, um bestimmte Bereiche zu füllen, indem Sie ein Bild strecken, aber ich möchte das Bild, das es dehnt, skalieren. Ich benutze eine TextButton für meine Menü-Tasten, aber sie sind viel zu groß, und ich würde gerne wissen, wie man sie skaliert. Ich hole die Haut von einem Atlas, der neun Bilder enthält. Hier ist das Einstellungsfenster: The settings screen Hier sind die Bilder in der Packung ich verwende: ninepatch images packed Hier ist die Initialisierung der TextureAtlas und Haut:Scene2D Button Skalierung mit libgdx

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

Hier ist die Initialisierung des Menütaste .

Und vielleicht könnte ich ändern, wie ich es in den Tisch legte, oder wie ich den Tisch in die Bühne legte?

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

Als letzten Ausweg nehme ich mich meine eigenen Text-Button Schauspieler könnte versuchen zu schaffen, die ich skalieren könnte, vielen Dank für Ihre Zeit.

Antwort

1

Zunächst einmal, wenn Sie wissen, dass Ihre Bilder zu groß sind: Am besten wäre es, die Bilder selbst auf eine kleinere Größe zu skalieren und dann mit dem TexturePacker einen neuen TextureAtlas zu erzeugen, der die kleineren Bilder enthält.

Auf jeden Fall können Sie das Bild Taste mit dem Tablelayout skaliert, wenn Sie wirklich wollen, siehe Beispiel:

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

Die obige Antwort funktioniert nicht für mich, aber ich habe eine Lösung.

Sie können eine sekundäre Kamera erstellen und an Ihre Bühne anschließen. die Tabelle zu skalieren nur die Darstellungsgröße der sekundären Kamera wäre

Ein Beispiel skalieren:

//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); 

Dies funktioniert gut, wenn Sie es für Touch-Steuerung verwenden. Sie können eine Tabelle für die gesamte Benutzeroberfläche verwenden und diese unabhängig von Ihren anderen Spielelementen skalieren.

0

table.add(buttonMenu).width(100).height(100); sollte funktionieren, und Sie müssen nur die width und height Parameter nach Ihren Wünschen anpassen, oder Sie können die setBounds Methode verwenden. Hier ein Beispiel:

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

Sie Größe Drawable in ButtonStyle festlegen können Ihre Button, um die Größe:

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

Weitere Informationen finden Sie official document for layout:

UI-Widgets nicht festlegen ihre eigene Größe und Position. Stattdessen legt das übergeordnete Widget die Größe und Position jedes untergeordneten Elements fest. Widgets bieten eine minimale, bevorzugte und maximale Größe, die der Elternteil als Hinweise verwenden kann. Einige übergeordneten Widgets, z. B. Tabelle und Container, können eingeschränkt werden, um die untergeordneten Elemente zu skalieren und zu positionieren. Um einem Widget eine bestimmte Größe in einem Layout zu geben, werden die minimale, bevorzugte und maximale Größe des Widgets in Ruhe gelassen und Größenbeschränkungen werden im übergeordneten Element festgelegt.

Und Sie können die Implementierung von Button.getPrefHeight() im source code finden:

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; 
} 
Verwandte Themen