2014-05-11 24 views
5

Non so se sono solo io, ma drawables confondimi. Hanno lo scopo di mantenere la dimensione che gli è stata data o esiste un modo per ridimensionare l'immagine al loro interno? Capisco che possono usare ninepatch per riempire determinate aree allungando un'immagine, ma voglio ridimensionare l'immagine che si estende. Sto usando uno per i pulsanti del mio menu, ma sono troppo grandi e mi piacerebbe sapere come ridimensionarli. Sto recuperando la skin da un atlante, che contiene nove immagini di patch. Ecco la schermata delle impostazioni: The settings screen Ecco le immagini contenute nella confezione che sto usando: ninepatch images packed Ecco l'inizializzazione dei TextureAtlas, e della pelle:ridimensionamento pulsante scene2d con libgdx

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

Ecco l'inizializzazione di quel tasto menu .

E forse potrei cambiare il modo in cui lo metto sul tavolo o come ho messo il tavolo sul palco?

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

Come ultima risorsa Suppongo che potrei tentare creare il mio attore pulsante testo che ho potuto scalare, grazie per il vostro tempo.

risposta

1

Prima di tutto se sai che le tue immagini sono troppo grandi: il meglio sarebbe ridimensionare le immagini stesse a una dimensione più piccola e poi usare il TexturePacker per generare anche una nuova TextureAtlas che contiene le immagini più piccole.

In ogni caso è possibile scalare il pulsante con l'immagine TableLayout se si vuole veramente, si veda l'esempio:

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

È possibile che questo lavoro non ha ancora risposta per me, ma ho una soluzione.

È possibile creare una fotocamera secondaria e collegarla al palco. per scalare il tavolo solo scalare la dimensione finestra della fotocamera secondaria

Un esempio potrebbe essere:

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

Questa grande opera quando il vostro utilizzo per i controlli touch. Puoi utilizzare una tabella per l'intera interfaccia utente e ridimensionarla a tuo piacimento indipendentemente dagli altri tuoi elementi di gioco;

0

table.add(buttonMenu).width(100).height(100); dovrebbe funzionare, e solo bisogno di regolare i parametri width e height a proprio piacimento, oppure è possibile utilizzare il metodo setBounds. Ecco un esempio:

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

È possibile impostare le dimensioni di Drawable in ButtonStyle per ridimensionare il vostro Button:

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

Per ulteriori informazioni, vedere official document for layout:

widget UI non impostare le loro dimensioni e posizione. Invece, il widget genitore imposta la dimensione e la posizione di ogni bambino. I widget forniscono una dimensione minima, preferita e massima che il genitore può utilizzare come suggerimenti. Alcuni widget padre, come tabella e contenitore, possono avere vincoli su come dimensionare e posizionare i bambini. Per assegnare a un widget una dimensione specifica in un layout, le dimensioni minime, preferite e massime del widget vengono lasciate sole e i vincoli di dimensione sono impostati nel genitore.

E si possono trovare l'attuazione Button.getPrefHeight() nel source code:

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